建構和釋出為 macOS 應用

本課程將指導開發者如何在 App Store 上釋出 Flutter 應用程式。

預備工作

在開始釋出應用程式之前,請確保它符合蘋果的 應用程式審查指南

為了將應用程式釋出到 App Store,你必須先註冊 蘋果開發者計劃。可以在 Apple 的 選擇會員資格 指南中閱讀更多關於各種會員資格的資訊。

在 App Store Connect 上註冊你的應用程式

App Store Connect(以前叫 iTunes Connect)上管理應用程式的生命週期。你可以定義應用程式的名稱和描述、新增螢幕截圖、設定定價以及管理應用程式商店和 TestFlight 的釋出。

註冊應用程式包括兩個步驟:註冊一個唯一的 Bundle ID,以及在 App Store Connect 上建立應用程式記錄。

有關 App Store Connect 的詳細概述,請參閱 App Store Connect 指南

註冊 Bundle ID

每個 macOS 應用程式都與一個 Bundle ID 關聯, Bundle ID 是在 Apple 註冊的唯一標識。要為應用程式註冊 Bundle ID,請執行以下步驟:

  1. 開啟開發者帳戶的 App IDs 頁面。

  2. 點選 + 建立一個新的 Bundle ID。

  3. 輸入應用程式名稱,選擇 顯式 App ID,然後輸入 ID。

  4. 選擇應用程式使用的服務,然後點選 下一步

  5. 在下一頁中,確認應用的詳細資訊,然後點選 註冊 來註冊你的 Bundle ID。

在 App Store Connect 上建立應用程式記錄

在 App Store Connect 上註冊你的應用程式:

  1. 在瀏覽器中開啟 App Store Connect

  2. 在 App Store Connect 登入頁上,點選 我的應用程式

  3. 點選我的應用程式頁面左上角的 +,然後選擇 新建應用程式

  4. 在表單中填寫應用程式詳細資訊。在平台部分,請確保選中了 macOS。由於 Flutter 目前不支援 tvOS,所以不要選中該項。點選 建立

  5. 從側邊欄中選擇 應用程式資訊,可以檢視應用程式的詳細資訊。

  6. 在常規資訊中,選擇在上一步中註冊的 Bundle ID。

更詳細的介紹,請參閱 將應用程式新增到您的帳戶]

檢查 Xcode 專案設定

這一步包括檢查 Xcode 工作區中最重要的設定。更詳細的過程和說明,請參閱 準備應用程式分發

在 Xcode 中配置目標:

  1. 在 Xcode 中,開啟應用程式 macos 資料夾中的 Runner.xcworkspace

  2. 要檢視應用程式的設定,請在 Xcode 導航欄中選擇 Runner 專案。然後,在主檢視側欄中,選擇 Runner 目標。

  3. 選擇 General(常規) 選項。

確認最重要的設定。

Identity(標識) 部分:

App Category(應用類別)
你的應用將出現在 Mac App Store 中的哪個類別,此項不能為空。

Bundle Identifier
你在 App Store Connect 註冊的應用程式 ID。

Deployment info(部署資訊) 部分:

Deployment Target(部署目標)
應用程式支援的最低 macOS 版本。Flutter 支援 macOS 10.11 及更高版本。

Signing & Capabilities(簽名和功能) 部分:

Automatically manage signing(自動管理簽名)
Xcode 是否自動管理應用程式簽名和配置。預設為 true,這對於大多數應用程式來說應該足夠。更復雜的場景,請參閱 程式碼簽名指南

Team(團隊)
選擇與你註冊的 Apple 開發者帳戶關聯的團隊。如果需要,請選擇 Add Account…(新增賬戶…),然後更新此設定。

專案設定的 General(常規) 選項應類似於以下內容:

Xcode Project Settings

有關應用程式簽名的詳細概述,請參閱 建立、匯出和刪除簽名證書

參考標識的配置集中在 macos/Runner/Configs/AppInfo.xcconfig 檔案中。想修改應用名稱,設定 PRODUCT_NAME;想修改版權資訊,設定 PRODUCT_COPYRIGHT;想修改 Bundle ID,設定 PRODUCT_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。在蘋果開發者的網站上,檢視更多關於 iOS 版本的 Core Foundation Keys

新增應用程式圖示

建立一個新的 Flutter 應用程式時,會建立一個佔位圖示集。此步驟包含如何用應用程式的圖示替換這些佔位圖示:

  1. 檢視 macOS 應用程式圖示 指南。

  2. 在 Xcode 專案導航欄的 Runner 資料夾中選擇 Assets.xcassets。用你自己的應用程式圖示更新佔位圖示。

  3. 使用 flutter run -d macos 執行應用程式,驗證圖示是否已被替換。

建立建構存檔

此步驟包含建立建構存檔並將其上傳到 App Store Connect。

在開發時,你已經完成了在 debug 模式下的應用建構、除錯和測試。當你準備好在 App Store 或 TestFlight 上向用戶釋出應用時,你需要準備一個 release 版產物。此時,你可以考慮 混淆你的 Dart 程式碼 讓逆向工程變得更加困難。混淆你的程式碼需要向建構命令新增兩個標誌。

在 Xcode 中,配置應用程式版本和內部版本:

  1. 開啟 macos 資料夾中的 Runner.xcworkspace 工程專案,若要在命令列中這樣做就切換到工程的資料夾下執行下面的命令:

    open macos/Runner.xcworkspace
    
  2. 在 Xcode 專案導航欄中選擇 Runner,然後在設定側欄中選擇 Runner 目標。

  3. 在標識部分,將 Version(版本) 更新為要釋出的版本號。

  4. 在標識部分,將 Build identifier(建構標識) 更新為在 App Store Connect 上可以追蹤此產生的唯一產生串。每次上傳都需要一個唯一的建構標識。

最後,建立一個建構歸檔並將其上傳到 App Store Connect:

  1. 為你的應用建立一個釋出歸檔,命令列切換到你的工程目錄,執行下面的命令:

    flutter build macos
    
  2. 開啟 Xcode 並選擇 Product > Archive,開啟上個步驟產生的歸檔檔案;

  3. 點選 Validate App 按鈕。如果報告了任何問題,請嘗試解決並再次建構。在上傳歸檔之前,可以重用相同的建構 ID。

  4. 成功驗證歸檔後,點選 Distribute App。你可以在 App Store Connect 上的應用程式詳細資訊頁的活動標籤下檢視建構狀態。

你應該會在 30 分鐘內收到一封郵件。告知你的建構已經過驗證,可以在 TestFlight 上釋出給測試人員。此時,你可以選擇在 TestFlight 上釋出,或者繼續將應用程式釋出到應用程式商店。

更多詳細資訊,請參閱 將應用程式上傳到 App Store Connect

使用 Codemagic 命令列工具建立一個建構歸檔

下面的步驟,我們會介紹在 Flutter 應用的工程目錄下執行 Flutter 建構命令和 Codemagic 命令列工具,建立一個建構歸檔並將其上傳至 App Store Connect。

  1. 安裝 Codemagic 命令列工具:

    pip3 install codemagic-cli-tools
    
  2. 你需要產生一個具有 App Manager 存取許可權的 App Store Connect API 金鑰,以方便對 App Store Connect 進行自動化操作。為了使後續的命令更簡潔,請設定下面的環境變數:發行者 ID、金鑰 ID、API 金鑰檔案:

    export 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`
    
  3. 你需要匯出或者建立 Mac App Distribution 和 Mac Installer Distribution 證書,以便與執行程式碼簽名以及打包建構歸檔。

    對於已有的 證書,你可以選擇透過下嗎的命令來匯出私鑰:

    openssl pkcs12 -in <certificate_name>.p12 -nodes -nocerts | openssl rsa -out cert_key
    

    或者透過以下命令建立一個新的私鑰:

    ssh-keygen -t rsa -b 2048 -m PEM -f cert_key -q -N ""
    

    之後,你可以讓命令列工具自動建立新的 Mac App Distribution 和 Mac Installer Distribution 證書,每個新的證書都可以使用相同的私鑰。

  4. 從 App Store Connect 獲取需要程式碼簽名的檔案:

    app-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 證書私鑰。

  5. 如果你還沒有 Mac Installer Distribution 證書,透過執行下面的命令列可以產生一個:

    app-store-connect create-certificate \
        --type MAC_INSTALLER_DISTRIBUTION \
        --certificate-key=@file:/path/to/cert_key \
        --save
    

    使用你之前建立的私鑰的 cert_key

  6. 獲取 Mac 安裝程式分發證書:

    app-store-connect list-certificates \
        --type MAC_INSTALLER_DISTRIBUTION \
        --certificate-key=@file:/path/to/cert_key \
        --save
    
  7. 設定用於程式碼簽名的新臨時鑰匙串:

    keychain initialize
    
  8. 現在將獲取的證書新增到你的鑰匙串中:

    keychain add-certificates
    
  9. 更新 Xcode 專案設定以使用獲取的程式碼簽名配置檔案:

    xcode-project use-profiles
    
  10. 安裝 Flutter 依賴項:

    flutter packages pub get
    
  11. 安裝 CocoaPods 依賴項:

    find . -name "Podfile" -execdir pod install \;
    
  12. 建構 Flutter macOS 專案:

    flutter build macos --release
    
  13. 打包應用程式:

    APP_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 
    
  14. 將打套件的應用釋出到 App Store Connect:

    app-store-connect publish \
        --path "$PACKAGE_NAME"
    
  15. 如前所述,不要忘記將你的登入鑰匙串設定為預設設定,以避免你機器上的應用程式出現身份驗證問題:

    keychain use-login
    

分發到已註冊的裝置

TestFlight 不可用於向內部和外部的測試人員分發 macOS 應用。請參閱 分發指南,準備一個歸檔檔案,以便分發到指定的 Mac 裝置。

將應用程式釋出到應用程式商店

當你準備向全世界釋出應用程式時,請按照以下步驟提交應用程式以供審閱併發布到應用程式商店:

  1. App Store Connect 應用程式詳情頁的側欄中選擇 定價和可用性,並完善相關資訊。

  2. 從側邊欄中選擇狀態。如果這是應用程式的第一個版本,則其狀態為 1.0 準備提交。填寫所有必填欄位。

  3. 點選 提交稽核

蘋果會在你的應用程式稽核完成後通知你。應用程式是按照你在 版本釋出 說明中釋出的。

更多詳細資訊,請參閱 透過應用程式商店分發應用程式.

故障排除

分發你的應用程式 指南詳細概述了將應用程式釋出到應用商店的過程。