iT邦幫忙

1

[SwiftUI] 讓開發的 Mac App 擁有自動更新的功能 - Sparkle

  • 分享至 

  • xImage
  •  

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 SwiftUI
import Sparkle

struct 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 內加上以下幾個參數:

Key Type Value
SUPublicEDKey String 剛剛你產出的 EdDSA
SUFeedURL String 填入 appcast.xml 上傳的 URL (步驟五會解釋)

如果沒有 Info.plist,可以到專案 Targets 內的 Info 加上數值

https://ithelp.ithome.com.tw/upload/images/20231104/201623832dVUCECvUr.png

其他參數及說明請參考:Sparkle Customization

4. 發佈 App

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

Sparkle 使用 Bundle Version 來判斷 APP 是否是新版本

https://ithelp.ithome.com.tw/upload/images/20231104/20162383IeIYfQBwGg.png

.entitlements 檔案的 App Sandbox 設定成 NO

https://ithelp.ithome.com.tw/upload/images/20231104/20162383dOvPNSMHVR.png

接下來要發佈 Mac App

Xcode:Product > Archive

Archive:Distribute app > Direct Distribution> Distribute

1. 等候 Status 變為 Ready to distribute

2. 按下 Export Notarized App 輸出 App

https://ithelp.ithome.com.tw/upload/images/20231104/20162383fXvNkCjDJ5.png

輸出到 Xcode 專案的資料夾內

Xcode 專案資料夾就是專案 .xcodeproj 存在的資料夾

接著將 App 壓縮成 zip 檔,並加上版本號後綴

https://ithelp.ithome.com.tw/upload/images/20231104/20162383gaaCDzUrxf.png

5. 建立 appcast.xml

appcast.xmlSparkle 用來辨認 App 版本的檔案

所有的更新資訊,包含版本、更新內容,都需要寫在 appcast.xml

首先在 Xcode 專案的資料夾內,執行以下指令:

$ generate_appcast -o appcast.xml .

Xcode 專案資料夾就是專案 .xcodeproj 存在的資料夾

該指令會在專案資料夾生成一個 appcast.xml,並把專案資料夾內所有版本的 zip 都簽章完成

接著我們要把 zip 檔上傳到雲端,並把下載連結貼到 appcast.xml 內:

https://ithelp.ithome.com.tw/upload/images/20231104/20162383yK0R4kzV6p.png

然後把 appcast.xml 上傳到雲端,連結必須是我們在 Info.plist SUFeedURL 填入的 URL

然後就大功告成了,在 App 內試試看能不能檢查更新吧!

參考資料


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言