macos-spm-app-packaging 是做什麼的?
建立、建置與封裝基於 SwiftPM 的 macOS 應用程式,無需 Xcode 專案。適用於需要從頭建立 macOS 應用佈局、SwiftPM 目標/資源、自訂 .app 套件組合腳本,或是在 Xcode 外部進行簽署、公證與 appcast 步驟的情境。
概覽
此技能提供一個完整的解決方案,用於透過 Swift 套件管理器 (SwiftPM) 從頭建立 macOS 應用程式,避免對 Xcode 專案的依賴。它自動化以下任務:
- Scaffolding 一個基本的 macOS 應用程式佈局
- 設定 SwiftPM 目標與資源
- 建立與組裝一個自訂的 .app 套件組合
- 對應用程式進行簽署與公證
- 產生 appcast 更新資訊
需求
- Swift 5.5+ 與 SwiftPM 已安裝
- macOS 11+ 或更新版本用於本機開發
- 可選的 Apple Developer 帳戶 用於簽署與公證
用法
-
Scaffold 應用程式: 使用提供的指令建立一個新的 macOS 應用專案。
swift package init --type executable -
建置: 使用 SwiftPM 建置專案。
swift build -c release -
封裝: 執行自訂腳本,將建置好的二進位檔組裝成
.app套件組合。./scripts/package.sh -
簽署與公證: 對應用程式進行簽署,並提交給 Apple 公證。
codesign --force --deep --sign "Developer ID Application" MyApp.app xcrun notarytool submit MyApp.zip --apple-id <APPLE_ID> --team-id <TEAM_ID> --password <PASSWORD> -
Appcast: 產生一個 appcast XML 檔案,以便與 Sparkle 整合。
支援的平台
- macOS(主要目標)
- 所有 Swift 支援的平台(用於非 GUI 部分)
工作原理
技能的核心是一個 shell 腳本,用於將 SwiftPM 建置輸出組裝成一個標準的 .app 套件組合。它會:
- 複製可執行檔到
MyApp.app/Contents/MacOS/ - 複製資源到
MyApp.app/Contents/Resources/ - 產生
Info.plist(如果未提供) - 對二進位檔進行簽署(如果提供了簽署身份)
- 提供可選的 dmg 封裝 ZIP 功能
這個腳本會自動處理 SwiftPM 的相依性,並確保套件組合符合 macOS 的標準。
範例
# Scaffold 一個新的應用程式
swift package init --type executable
# 建置應用程式
swift build -c release
# 封裝應用程式
./scripts/package.sh