構建併發布 macOS 應用
如何將 Flutter 應用釋出到 macOS App Store。
本指南提供了將 Flutter 應用釋出到 App Store 的分步操作說明。
準備工作
#在開始應用釋出流程之前,請確保應用符合蘋果的 App 稽核指南。
要將應用釋出到 App Store,必須首先註冊加入 Apple Developer Program。您可以閱讀蘋果的 選擇會員資格 指南,瞭解有關不同會員選項的更多資訊。
在 App Store Connect 上註冊應用
#透過 App Store Connect(前身為 iTunes Connect)管理應用的生命週期。您可以在此處定義應用名稱和描述、新增螢幕截圖、設定價格,以及管理釋出到 App Store 和 TestFlight 的版本。
註冊應用包含兩個步驟:註冊唯一的 Bundle ID,以及在 App Store Connect 上建立應用記錄。
有關 App Store Connect 的詳細概覽,請參閱 App Store Connect 指南。
註冊 Bundle ID
#每個 macOS 應用都關聯一個 Bundle ID,這是在蘋果註冊的唯一識別符號。要為應用註冊 Bundle ID,請按照以下步驟操作:
- 開啟開發者帳戶的 App IDs 頁面。
- 點選 + 以建立新的 Bundle ID。
- 輸入應用名稱,選擇 Explicit App ID,然後輸入一個 ID。
- 選擇應用使用的服務,然後點選 Continue。
- 在下一頁上,確認詳細資訊並點選 Register 以註冊 Bundle ID。
在 App Store Connect 上建立應用記錄
#在 App Store Connect 上註冊應用
- 在瀏覽器中開啟 App Store Connect。
- 在 App Store Connect 登入頁面上,點選 My Apps。
- 點選“My Apps”頁面左上角的 +,然後選擇 New App。
- 在出現的表單中填寫應用詳細資訊。在“Platforms”部分,確保選中 macOS。由於 Flutter 目前不支援 tvOS,請取消勾選該項。點選 Create。
- 導航至應用的詳細資訊頁面,並從側邊欄中選擇 App Information。
- 在“General Information”部分,選擇您在上一步中註冊的 Bundle ID。
有關詳細概述,請參閱 將應用新增到您的帳戶。
檢查 Xcode 專案設定
#此步驟涵蓋檢查 Xcode 工作區中最重要的設定。有關詳細流程和說明,請參閱 準備應用分發。
在 Xcode 中導航至您的目標設定 (Target settings)
- 在 Xcode 中,開啟應用
macos資料夾下的Runner.xcworkspace。 - 要檢視應用設定,請在 Xcode 專案導航器中選擇 Runner 專案。然後,在主檢視側邊欄中,選擇 Runner target。
- 選擇 General 選項卡。
驗證最重要的設定。
在 Identity 部分
App Category (應用類別)-
您的應用在 Mac App Store 中展示的所屬類別。不能設為“無”。
Bundle Identifier您在 App Store Connect 上註冊的 App ID。
在 Deployment info 部分
Deployment Target (部署目標)-
您的應用支援的最低 macOS 版本。要檢查 Flutter 支援部署的 macOS 版本,請檢視 Flutter 的 支援的部署平臺。
在 Signing & Capabilities 部分
Automatically manage signing (自動管理簽名)-
Xcode 是否應自動管理應用簽名和配置檔案。預設設定為
true,這對大多數應用來說應該足夠了。對於更復雜的場景,請參閱 程式碼簽名指南。 Team-
選擇與您已註冊的 Apple Developer 帳戶關聯的團隊。如有必要,選擇 Add Account...,然後更新此設定。
專案設定的 General 選項卡應如下所示:
有關應用簽名的詳細概述,請參閱 建立、匯出和刪除簽名證書。
配置應用名稱、Bundle Identifier 和版權資訊
#產品識別符號的配置集中在 macos/Runner/Configs/AppInfo.xcconfig 中。對於應用名稱,設定 PRODUCT_NAME;對於版權,設定 PRODUCT_COPYRIGHT;最後,設定 PRODUCT_BUNDLE_IDENTIFIER 以指定應用的 Bundle Identifier。
更新應用版本號
#應用的預設版本號是 1.0.0。要更新它,請導航到 pubspec.yaml 檔案並更新以下行:
version: 1.0.0+1
版本號是三個由點分隔的數字,例如上述示例中的 1.0.0,後跟可選的構建號(例如上述示例中的 1),並用 + 分隔。
版本號和構建號都可以在 Flutter 構建過程中透過分別指定 --build-name 和 --build-number 來覆蓋。
在 macOS 中,build-name 使用 CFBundleShortVersionString,而 build-number 使用 CFBundleVersion。在蘋果開發者網站的 Core Foundation Keys 中閱讀更多關於 iOS 版本控制的資訊。
新增應用圖示
#建立新的 Flutter 應用時,會生成一套佔位符圖示。此步驟涵蓋如何使用您自己的應用圖示替換這些佔位符圖示。
- 請查閱 macOS 應用圖示 指南。
- 在 Xcode 專案導航器中,選擇
Runner資料夾下的Assets.xcassets。使用您自己的應用圖示更新佔位符圖示。 - 透過執行
flutter run -d macos來執行您的應用,以驗證圖示是否已成功替換。
使用 Xcode 建立構建歸檔 (Build Archive)
#此步驟涵蓋使用 Xcode 建立構建歸檔並上傳到 App Store Connect。
在開發過程中,您一直使用 debug 構建進行構建、除錯和測試。當您準備好將應用分發給 App Store 或 TestFlight 上的使用者時,需要準備一個 release 構建。此時,您可以考慮 混淆您的 Dart 程式碼,以增加反向工程的難度。混淆程式碼需要在構建命令中新增幾個標誌。
在 Xcode 中配置應用版本和構建號
- 開啟應用
macos資料夾下的Runner.xcworkspace。要透過命令列執行此操作,請在應用專案的根目錄下執行以下命令。open macos/Runner.xcworkspace - 在 Xcode 專案導航器中選擇 Runner,然後在設定檢視側邊欄中選擇 Runner target。
- 在“Identity”部分,將 Version 更新為您希望釋出的面向使用者的版本號。
- 在“Identity”部分,將 Build 識別符號更新為用於在 App Store Connect 上跟蹤此構建的唯一構建號。每次上傳都需要一個唯一的構建號。
最後,建立構建歸檔並將其上傳到 App Store Connect
- 建立應用程式的釋出歸檔 (Archive)。在應用專案的根目錄下,執行以下命令。
flutter build macos - 開啟 Xcode 並選擇 Product > Archive 以開啟上一步建立的歸檔。
- 點選 Validate App 按鈕。如果報告了任何問題,請解決它們並重新構建。在上傳歸檔之前,您可以重複使用相同的構建 ID。
- 歸檔驗證成功後,點選 Distribute App。您可以在 App Store Connect 上應用詳情頁的“Activities”選項卡中跟蹤構建狀態。
您應該會在 30 分鐘內收到一封電子郵件,通知您構建已透過驗證,並可在 TestFlight 上向測試人員釋出。此時,您可以選擇是在 TestFlight 上釋出,還是直接將應用釋出到 App Store。
有關更多詳細資訊,請參閱 將應用上傳到 App Store Connect。
使用 Codemagic CLI 工具建立構建歸檔
#此步驟涵蓋使用 Flutter 構建命令和在終端執行的 Codemagic CLI Tools 建立構建歸檔並上傳到 App Store Connect。
安裝 Codemagic CLI 工具
bashpip3 install codemagic-cli-tools您需要生成一個具有 App Manager 訪問許可權的 App Store Connect API Key,以實現 App Store Connect 操作的自動化。為了使後續命令更簡潔,請根據新金鑰設定以下環境變數:issuer id、key id 和 API key 檔案。
bashexport APP_STORE_CONNECT_ISSUER_ID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee export APP_STORE_CONNECT_KEY_IDENTIFIER=ABC1234567 export APP_STORE_CONNECT_PRIVATE_KEY=`cat /path/to/api/key/AuthKey_XXXYYYZZZ.p8`您需要匯出或建立 Mac App Distribution 和 Mac Installer Distribution 證書,以執行程式碼簽名並打包構建歸檔。
如果您有現有的 證書,可以透過為每個證書執行以下命令來匯出私鑰:
bashopenssl pkcs12 -in <certificate_name>.p12 -nodes -nocerts | openssl rsa -out cert_key或者,您可以透過執行以下命令建立新的私鑰:
bashssh-keygen -t rsa -b 2048 -m PEM -f cert_key -q -N ""稍後,您可以讓 CLI 工具自動建立新的 Mac App Distribution 和 Mac Installer Distribution 證書。您可以為每個新證書使用相同的私鑰。
從 App Store Connect 獲取程式碼簽名檔案
bashapp-store-connect fetch-signing-files YOUR.APP.BUNDLE_ID \ --platform MAC_OS \ --type MAC_APP_STORE \ --certificate-key=@file:/path/to/cert_key \ --create其中
cert_key是您匯出的 Mac App Distribution 證書私鑰,或者是自動生成新證書的新私鑰。如果您沒有 Mac Installer Distribution 證書,可以透過執行以下命令建立新證書:
bashapp-store-connect certificates create \ --type MAC_INSTALLER_DISTRIBUTION \ --certificate-key=@file:/path/to/cert_key \ --save使用您之前建立的私鑰的
cert_key。獲取 Mac Installer Distribution 證書
bashapp-store-connect certificates list \ --type MAC_INSTALLER_DISTRIBUTION \ --certificate-key=@file:/path/to/cert_key \ --save設定一個新的臨時鑰匙串 (keychain) 以用於程式碼簽名
bashkeychain initialize現在將獲取的證書新增到您的鑰匙串中
bashkeychain add-certificates更新 Xcode 專案設定以使用獲取的程式碼簽名配置檔案
bashxcode-project use-profiles安裝 Flutter 依賴項
bashflutter packages pub get安裝 CocoaPods 依賴項
bashfind . -name "Podfile" -execdir pod install \;構建 Flutter macOS 專案
bashflutter build macos --release打包應用
bashAPP_NAME=$(find $(pwd) -name "*.app") PACKAGE_NAME=$(basename "$APP_NAME" .app).pkg xcrun productbuild --component "$APP_NAME" /Applications/ unsigned.pkg INSTALLER_CERT_NAME=$(keychain list-certificates \ | jq '[.[] | select(.common_name | contains("Mac Developer Installer")) | .common_name][0]' \ | xargs) xcrun productsign --sign "$INSTALLER_CERT_NAME" unsigned.pkg "$PACKAGE_NAME" rm -f unsigned.pkg將打包好的應用釋出到 App Store Connect
bashapp-store-connect publish \ --path "$PACKAGE_NAME"如前所述,別忘了將登入鑰匙串設定為預設值,以避免機器上的應用程式出現身份驗證問題。
bashkeychain use-login
在 TestFlight 上釋出應用
#TestFlight 允許開發者將應用推送到內部和外部測試人員手中。此可選步驟涵蓋如何在 TestFlight 上釋出構建。
- 導航至 App Store Connect 上應用詳情頁的“TestFlight”選項卡。
- 在側邊欄中選擇 Internal Testing。
- 選擇要釋出給測試人員的構建版本,然後點選 Save。
- 新增任何內部測試人員的電子郵件地址。您可以在 App Store Connect 的 Users and Roles 頁面中新增更多內部使用者,該頁面可從頁面頂部的下拉選單中訪問。
分發到已註冊的裝置
#請參閱 分發指南 以準備用於分發到指定 Mac 計算機的歸檔。
將應用釋出到 App Store
#當您準備好將應用釋出給全世界時,請按照以下步驟提交應用以供稽核併發布到 App Store:
- 在 App Store Connect 上應用詳情頁的側邊欄中選擇 Pricing and Availability,並填寫所需資訊。
- 從側邊欄中選擇狀態。如果是該應用的首次釋出,其狀態為 1.0 Prepare for Submission。填寫所有必填欄位。
- 點選 Submit for Review。
蘋果會在其應用稽核流程完成後通知您。您的應用將按照您在 Version Release 部分中指定的說明進行釋出。
有關更多詳細資訊,請參閱 透過 App Store 分發應用。
故障排除
#分發您的應用 指南提供了將應用釋出到 App Store 過程的詳細概覽。
額外資源
#要了解如何以開源方式打包和分發 Flutter 桌面應用到 macOS(無需支付 Apple 開發者帳戶費用),請檢視此分步 macOS 打包指南。