做 Mac 开发的同学应该至少都听说过 Sparkle,一个应用升级框架,Sparkle 是开源的,参考 Github。
不过需要注意的是,Sparkle 的使用场景应仅仅局限于 非 App Store 且非 Sandbox 应用。
使用 Sparkle 几乎不需要写代码,但需要做一些 Xcode 配置还是必要的。
添加 Sparkle 到你的项目
CocoaPods:
pod 'Sparkle'
记得要使用 use_frameworks!。
手动
- 下载 最新版本
- 用 Xcode 打开你的项目并将 Sparkle.framework文件拖入你
- 拖入时请勾选 Copy items into the destination group’s folder
- 拖入时确保勾选了正确的 Target
- 在对应的 Target 中 Build Phases->Copy Files Build Phase中添加Sparkle.framework
- 在对应的 Target 中 Build Settings中设置Runpath Search Paths为@loader_path/../Frameworks
- 如果你的应用是非 App 性质,如偏好设置和插件等,此项应设置为 -Wl,-rpath,@loader_path/../Frameworks
配置 Sparkle
- 打开 MainMenu.xib/Main.storyboard
- 依次选择 View->Utilities->Object Library...
- 在搜索栏中搜索 Object并将Object拖入左侧
- 选中刚才添加的内容
- 依次选择 View->Utilities->Identity Inspector
- 修改 Custom Class为SUUpdater
- 如果需要,你也可以添加一个检查更新的菜单项,设置它的 target为刚才的SUUpdater实例,action为checkForUpdates:
DSA 签名
- 使用 Installer Package(.pkg)/Binady Delta Updates更新必须进行 Sparkle 的 DSA 签名
- 偏好设置和插件更新必须进行 Sparkle 的 DSA 签名
- 对于常规使用苹果开发者签名的 App,不强制但推荐进行 Sparkle 的 DSA 签名
要进行 DSA 签名:
- 使用 Sparkle 目录下 bin/generate_keys工具生成 DSA 密钥,这个步骤只需执行一次
- 备份你的私钥 dsa_priv.pem并 保证它的安全,不要被他人获取
- 用 Xcode 打开你的项目并将公钥 dsa_pub.pem拖入其中
- 在 Info.plist中添加字典 (Dictionary) 键值SUPublicDSAKeyFile,将其值设置为公钥的文件名 (dsa_pub.pem)
发布应用
DMG
对于 macOS Sierra 及之后的系统版本,最好的方式是使用 signed disk image (.dmg) 映像包。
默认的,网络下载的应用可能会被系统隔离 (translocate),除非它们使用的是已签名的 DMG、PKG 包,或使用 Finder 复制它们。
因此,如果你使用 DMG 方式发布,确保你的 DMG 包在 macOS 10.11.5 及之后的系统中使用开发者 ID 签名。
如果你不做签名,那么则应将应用放在归档的根目录,因为复制整个文件夹不能移除系统的隔离。
当然,你还应该添加一个 /Applications 目录的替身 symlink 方便用户复制应用到他们的系统中。
ZIP/tar
类似的,你也应该想办法让用户更方便的复制你的应用到它们的应用目录,比如使用 LetsMove。
避免在归档中防止除应用外的其它文件,同样的,将应用放在归档根目录。
发布 Appcast
Appcast 用来提供应用更新的细节信息,事实上,它只是在 RSS 源,添加了一些额外信息。
- 在 Info.plist中添加SUFeedURL并将它的值设置为你的Appcast地址,例如{{ site.url }}/appcast.xml
- 当然,最好的选择还是使用 HTTPS
- 注意,你的 Info.plist中还应包含有格式正确的CFBundleVersion键值对
<?xml version="1.0" standalone="yes"?><rss xmlns:sparkle="https://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0"><channel><title>Ezra</title>
<item>
<title>1.0</title>
<pubDate>2017-04-25</pubDate>
<sparkle:minimumSystemVersion>10.11</sparkle:minimumSystemVersion>
<enclosure url="{{ site.url }}/clients/mac/Ezra.zip" sparkle:version="21" sparkle:shortVersionString="1.0" length="4312551" type="application/octet-stream" sparkle:dsaSignature="MC0CFxxxxxxxxxxxxxx4Ag4X8n+ogIxxxxxxxxxxxxxxxR4SKM="/>
</item>
</channel></rss>
自动生成
如果你更新的是常规应用,并且进行了前面介绍的 DSA 签名,那么你可以使用 generate_appcast 工具自动生成 Appcast 文件
- Build你的应用并进行压缩,例如 DMG/ZIP/- tar.bz2等,将压缩后的归档内容放入一个新的文件夹
- 执行 ./bin/generate_appcast DSA私钥文件路径.pem 压缩后的归档所在的目录
- generate_appcast工具会生成- Appcast文件和- *.delta文件
手动生成
- 直接复制 Sparkle目录下准备好的Appcast文件
- 根据你自己的情况进行修改
至此,基本的流程已经全部结束,Yay!!
 李二狗 — @Meniny
                李二狗 — @Meniny
            


 
            
             
            
             
            
             
                 
                