Date
Nov. 25th, 2024
 
2024年 10月 25日

Post: Sparkle 1: Setup

Sparkle 1: Setup

Published 12:04 Apr 25, 2016.

Created by @ezra. Categorized in #Programming, and tagged as #macOS.

Source format: Markdown

Table of Content

做 Mac 开发的同学应该至少都听说过 Sparkle,一个应用升级框架,Sparkle 是开源的,参考 Github

Sparkle

不过需要注意的是,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 ClassSUUpdater
  • 如果需要,你也可以添加一个检查更新的菜单项,设置它的 target 为刚才的 SUUpdater 实例,actioncheckForUpdates:

setup

action

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!!

Pinned Message
HOTODOGO
The Founder and CEO of Infeca Technology.
Developer, Designer, Blogger.
Big fan of Apple, Love of colour.
Feel free to contact me.
反曲点科技创始人和首席执行官。
开发、设计与写作皆为所长。
热爱苹果、钟情色彩。
随时恭候 垂询