0

这个问题已经在 Stackoverfl0w 上讨论过多次,但不幸的是我没有看到任何真正令人满意的解决方案。

情况:

(仅包括在内,因为大多数先前的答案都与“只是不要这样做!没有理由拥有多个版本的应用程序..等等”这一行一致,我同意大多数情况下,但不是这个。)

我们目前正在发送一个 .pkg 文件,该文件将我们的软件包安装到 /Applications/$CompanyName/$SoftwareName_$VersionNumber 。在文件夹名称中包含版本号而不删除旧版本是必要的,因为我们的许多客户同时使用我们当前的发行版和 beta 版本,此外,许多客户使用旧版本软件是因为他们认证了它用于特定用途案例,但他们对当前项目使用当前版本。

我们过去只为 macOS 提供命令行工具和库,因此多年来它对我们来说工作得很好。

但是,我们开始仅将我们的 GUI 应用程序从 Windows 移植到 Windows / macOS / Linux,它们在 macOS 下以 .app 格式提供。

问题:

如果 .app 包含在 .pkg 安装程序中,安装程序会在空盘中搜索相同 .app 的旧实例。如果找到,它会替换它找到的实例(非常糟糕),并且也不会将 .app 放在指定的安装目录中(也很糟糕)。

我找到的解决方案:

a) 为每个发布的版本更改 .app 的 CFBundleIdentifier。对我来说似乎不是一个干净的方式。我认为它还会导致 .app 在启动板中多次出现
b) 在安装程序执行之前搜索 .app 的所有实例,压缩它们,并在安装后再次提取它们。(听起来也不是一个好的解决方案。)

有人对此有干净的方法吗?无法相信 Apple 没有办法指定在创建 .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 作为标签。用这个问题赢得风滚草后撞了。将不胜感激任何建议:)

4

1 回答 1

0

分发文件中的“重定位”属性似乎控制了这一点。不幸的是,您似乎只能通过添加此键来启用“重定位”,但不能通过省略该键来禁用它。根据 Apple 的 Distribution XML 文档,.app 包的默认设置是“重定位”。

于 2016-12-02T12:21:25.553 回答