这个问题已经在stackoverflow上讨论过几次了,但不幸的是,我没有看到任何真正令人满意的解决方案。
情况:
(只包括,因为大多数以前的回答都是"不要这样做!没有理由使用多个版本的应用程序。等等",在大多数情况下我都同意,但这次不同意。
我们目前正在发送一个.pkg文件,该文件将我们的软件包安装到/Applications/$CompanyName/$SoftwareName_$VersionNumber。包括文件夹名称中的版本号并且不删除旧版本是必要的,因为我们的许多客户同时使用我们的当前发行版和beta版本,而且,许多客户使用旧版本软件是因为他们为特定用例认证了它,但是他们为当前项目使用当前版本。
我们过去只为macOS发布命令行工具和库,因此多年来它对我们来说工作得很好。
然而,我们开始将我们的GUI应用程序仅从Windows移植到Windows/macOS/Linux,这些应用程序在macOS下以。app格式发布。
问题:
如果.app是在.pkg安装程序中发布的,安装程序会在孔盘中搜索相同.app的旧实例。如果它找到一个,它会替换它找到的实例(非常糟糕),并且也不会将.app放在指定的安装目录中(也是糟糕的)。
a)为每个发布版本更改.app的CFBundleIdentifier。在我看来,这不是一条干净的路。我认为这也会导致。app在Launchpad
中多次出现。b)在安装程序之前搜索.app的所有实例,压缩它们,并在安装后再次提取它们。(听起来也不像是一个好的解决方案。)
有人有干净的方法吗?真不敢相信苹果没有办法指定在创建。pkg文件时省略此行为。
有没有比我找到的更好的文档?:
https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html//apple_ref/doc/uid/TP40005370-CH100-SW15
http://s.sudre.free.fr/Stuff/Ivanhoe/FLAT.html(良好的文档,但经过8年的正常运行时间,许多字段仍然标记为"即将到来的描述")
编辑:添加XCode作为标签。在用这个问题赢得滚草后颠簸。如有任何建议,我将不胜感激。
发布文件中的"relocate"属性似乎控制了这一点。不幸的是,似乎只能通过添加该键来启用"重新定位",而不能通过省略该键来禁用它。根据Apple的Distribution XML文档,.app bundle的默认值是"relocate"。