[SwiftUI] 让开发的 Mac App 拥有自动更新的功能 - Sparkle

Sparkle


Sparkle 套件是最常见的 Mac App 检查更新方案

本章介绍如何安装并使用 Sparkle

1. 加入 Sparkle 套件

首先在 Xcode 专案加入 Sparkle 套件

File > Add Package Dependencies...

https://github.com/sparkle-project/Sparkle.git

2. 建立 Sparkle Update Object

在专案内加入 Sparkle Updater 的程式码:

import SwiftUIimport Sparklestruct UpdaterView: View {    var updater = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil).updater    var body: some View {        Button("检查更新") {            updater.checkForUpdates()        }        .buttonStyle(.borderedProminent)    }}

其他详细写法请参考:Sparkle Programmatic Setup

3. 产出 EdDSA (ed25519) 签证

先下载 Sparkle 最新版本

Sparkle 或是 Sparkle-for-Swift-Package-Manager 都可以

将下载下来的 Sparkle 内以下三个档案複製到 /bin 底下:

./bin/generate_keys./bin/sign_update./bin/generate_appcast
$ mv ./bin/generate_keys Users/${user}/.local/bin/generate_keys$ mv ./bin/sign_update Users/${user}/.local/bin/sign_update$ mv ./bin/generate_appcast Users/${user}/.local/bin/generate_appcast

之后再任意位置下产 EdDSA 的指令:

$ generate_keys

会产出类似下方的签证:

    <key>SUPublicEDKey</key>    <string>pfIShU4dEXqPd5ObYNfDBiQWcXozk7estwzTnF9BamQ=</string>

接下来在你的 Xcode 专案的 Info.plist 内加上以下几个参数:

KeyTypeValueSUPublicEDKeyString刚刚你产出的 EdDSASUFeedURLString填入 appcast.xml 上传的 URL (步骤五会解释)

如果没有 Info.plist,可以到专案 Targets 内的 Info 加上数值

http://img2.58codes.com/2024/201623832dVUCECvUr.png

其他参数及说明请参考:Sparkle Customization

4. 发布 App

首先在 Xcode Targets 设定 Identity Bundle Version 及 Build

Sparkle 使用 Bundle Version 来判断 APP 是否是新版本

http://img2.58codes.com/2024/20162383IeIYfQBwGg.png

.entitlements 档案的 App Sandbox 设定成 NO

http://img2.58codes.com/2024/20162383dOvPNSMHVR.png

接下来要发布 Mac App

Xcode:Product > Archive

Archive:Distribute app > Direct Distribution> Distribute

1. 等候 Status 变为 Ready to distribute

2. 按下 Export Notarized App 输出 App

http://img2.58codes.com/2024/20162383fXvNkCjDJ5.png

输出到 Xcode 专案的资料夹内

Xcode 专案资料夹就是专案 .xcodeproj 存在的资料夹

接着将 App 压缩成 zip 档,并加上版本号后缀

http://img2.58codes.com/2024/20162383gaaCDzUrxf.png

5. 建立 appcast.xml

appcast.xmlSparkle 用来辨认 App 版本的档案

所有的更新资讯,包含版本、更新内容,都需要写在 appcast.xml

首先在 Xcode 专案的资料夹内,执行以下指令:

$ generate_appcast -o appcast.xml .

Xcode 专案资料夹就是专案 .xcodeproj 存在的资料夹

该指令会在专案资料夹生成一个 appcast.xml,并把专案资料夹内所有版本的 zip 都签章完成

接着我们要把 zip 档上传到云端,并把下载连结贴到 appcast.xml 内:

http://img2.58codes.com/2024/20162383yK0R4kzV6p.png

然后把 appcast.xml 上传到云端,连结必须是我们在 Info.plist SUFeedURL 填入的 URL

然后就大功告成了,在 App 内试试看能不能检查更新吧!

参考资料

Sparkle 官方文件

How to integrate the Sparkle framework into a SwiftUI app for MacOS


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章