Packaging for Installation on Mac OS X

在 Mac OS X 下为程序打包该用什么格式?这是个很有趣的问题,首先,显然绝大部分的应用程序都应该:

  • 使用手动安装,也就是一个独立的 .app,里面通过 @executable_path/../Frameworks/ 的方式链接所有依赖的第三方库,也就是说,不往系统相关目录里乱放东西。这是 Apple 官方的 Software Delivery Guide 中推荐的安装方式
  • 支持用 Sparkle 这样的自动更新框架,实际上符合上一点的也就自然可以用 Sparkle 完全自动的完成更新。
  • .zip 格式分发。为什么不用 .dmg?因为 .dmg 不容易直接解压,挂载速度比 .zip 慢得多,增加拖动的手续,所以我支持这篇 zip vs dmg 的观点。

SunPinyin 安装界面

但是如果遇到特殊的情况呢?比如你写的是一个非得往系统目录 (/Library/...) 安装内容的软件呢?比如我最近参与改进的 SunPinyin 输入法,就必须打包为 Installer 支持的 .pkg 格式安装了,否则很难确保软件被正确的安装。

关于这个打包方式,最重要的一点心得是:千万不要用 Apple 自己提供的 PackageMaker,这恐怕是 Apple 开发的最恐怖的一个开发辅助工具了,因为:

  • 它必须用图形界面修改内容
  • 它保存的 .pmdoc 格式非常混乱,而且居然喜欢把绝对路径存入文件中
  • 不支持 Installer Plugins 扩展

那替代的工具是什么呢?是一个非常棒的第三方工具: Iceberg,它能:

  • 打包出 Mac OS X 10.2+ 以上都支持的 .pkg bundle 格式
  • 界面比 PackageMaker 友好得多,而且有非常详尽的文档,也很方便调试
  • 支持 Installer Plugin

涉及打包、Sparkle 的 appcast 自动生成,Iceberg 的使用等问题,都可以参考 SunPinyin 目前使用的代码

Author: jjgod

A software engineer from China, working on text rendering for a fruit company. Interested in typography and science fiction.

4 thoughts on “Packaging for Installation on Mac OS X”

Leave a Reply

Your email address will not be published. Required fields are marked *