这个问题已经在 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 期间应省略此行为。
有比我找到的更好的文档吗?:
http://s.sudre.free.fr/Stuff/Ivanhoe/FLAT.html(良好的文档,但经过约 8 年的正常运行时间后,许多字段仍标有“即将发布的说明”。)
编辑:添加 XCode 作为标签。用这个问题赢得风滚草后撞了。将不胜感激任何建议:)