1

背景

我正在开发一些 Mac OS 守护进程。有时我将它作为我的存储库中的应用程序启动以测试一些东西。到目前为止,一切都很好。我能够创建可以被其他人使用的安装包,完全没有问题。

问题

当我使用安装包时,有时守护程序不会复制到所需的路径。在安装日志中,我可以看到流畅的语句:

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

基本上安装程序注意到在某个目录中存在具有相同捆绑 ID 的捆绑包,因此它决定跳过其在所需位置的安装。现在由于启动我的服务的 xml 使用安装包中定义的位置,服务启动失败。

问题

有什么方法可以通知系统忘记我的包的私有版本,而不删除它?我需要一种方法来防止安装程序跳过安装某些捆绑包,因为它找到了其他版本。

4

1 回答 1

0

好的。我找到了对这个问题的很好解释:

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

问题解决了。Bundle 仅安装在安装包定义的位置。

于 2020-03-06T17:43:23.990 回答