Как забыть пакет MacOS для предотвращения неправильной установки - PullRequest
0 голосов
/ 06 марта 2020

Фон

Я работаю над демоном ОС Ma c. Иногда я запускаю его как приложение в своем хранилище, чтобы проверить некоторые вещи. Все идет нормально. Я могу создать установочный пакет, который может использоваться другими без проблем.

Проблема

Когда я использую установочный пакет, иногда демон не копируется по желаемому пути. В журналах установки я вижу текущее утверждение:

....
installer: Installation Check: Passed
installer: Volume Check: Passed
installer: Bundle com.mybudle.id will be relocated to /Users/itsMe/repos/MySourceCodeRepo/Debug/MyDaemonApplication.app

По сути, установщик заметил, что в каком-то каталоге есть пакет с таким же идентификатором пакета, поэтому он решил пропустить установку в требуемом месте. Теперь, когда xml, который запускает мой сервис, использует местоположение, определенное в установочном пакете, запуск сервиса завершается неудачно.

Вопрос

Есть ли способ сообщить системе, чтобы она забыла мою личную версию пакета, не удаляя это? Мне нужен способ запретить установщику пропускать установку некоторых пакетов, так как он нашел другую версию.

1 Ответ

0 голосов
/ 06 марта 2020

Хорошо. Я нашел хорошее объяснение проблемы:

https://apple.stackexchange.com/questions/219123/pkgbuild-created-package-does-not-install-correctly

Итак, чтобы исправить это, я сгенерировал myapp_istaller.plist следующим образом:

pkgbuild --analyze --root "./my_product_root/" myapp_istaller.plist

Тогда я изменил значение для BundleIsRelocatable§ to false` внутри этого файла. И наконец, я создаю этот файл plist при создании пакета:

    pkgbuild --root ${PKG_SUBDIR} \
         --component-plist ./myapp_istaller.plist \
         --identifier ${PKG_IDENTIFIER} \
         --version ${APP_VERSION_FULL} \
         --ownership recommended \
         --scripts scripts \
         pkg1/output.pkg

и проблема решена. Пакет устанавливается только в месте, определенном установочным пакетом.

...