我遇到了一个奇怪的问题,我的安装程序正确地覆盖了以前安装的应用程序,但随后又覆盖了我的构建目录中的应用程序。
我的安装程序构建如下所示:
mkdir /tmp/foo
cp -R ~/Projects/MyApp/Builds/MacOSX/build/Release/MyApp.app /tmp/foo
pkgbuild --quiet --analyze --root /tmp/foo/ MyApp.plist
pkgbuild --quiet --root /tmp/foo/ \
--component-plist MyApp.plist \
--identifier com.mycompany.myapp \
--version $VERSION \
--install-location "/Applications" \
MyApp.pkg
productbuild --quiet --distribution "./Distribution.xml" \
--package-path "./" --resources "./Resources" \
--sign "Developer ID Installer: My LLC" "MyApp Installer.pkg"
现在,这可以工作了……它按照我的预期将应用程序安装在 /Applications 文件夹中。但我注意到我的下一个 Xcode 版本存在一些问题。经过一番调查,我注意到我的构建文件夹在 Xcode 构建之后和运行安装程序之前看起来像这样:
drwxr-xr-x@ 3 me staff 96 Jul 11 23:15 My.app
…像这样,运行安装程序后:
drwxr-xr-x 3 root wheel 96 Jul 11 23:44 My.app
不知何故,我的应用程序的所有者发生了变化。我仔细检查了所有内容,没有看到任何触及我的构建文件夹的内容。但后来我检查了安装程序日志,发现了这条神秘的线:
PackageKit: Applications/MyApp.app relocated to
Users/me/Projects/MyApp/Builds/MacOSX/build/Release/MyApp.app
经过一番谷歌搜索后,其他人推测安装程序会覆盖它在驱动器上任何位置找到的任何应用程序副本……而不仅仅是您告诉它的文件夹中的那个。这是有道理的……如果我在构建文件夹中删除我的应用程序的副本,安装程序不会创建一个新的。如果它在那里,它只会覆盖它。
虽然这不是一个大问题,但它有些问题,因为它会更改文件的所有者,从而阻止下一个构建工作。
有没有其他人遇到过这个问题?安装程序是否有一些选项可以不覆盖已安装应用程序的每个副本?