跳到主內容

構建併發布 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,請按照以下步驟操作:

  1. 開啟開發者帳戶的 App IDs 頁面。
  2. 點選 + 以建立新的 Bundle ID。
  3. 輸入應用名稱,選擇 Explicit App ID,然後輸入一個 ID。
  4. 選擇應用使用的服務,然後點選 Continue
  5. 在下一頁上,確認詳細資訊並點選 Register 以註冊 Bundle ID。

在 App Store Connect 上建立應用記錄

#

在 App Store Connect 上註冊應用

  1. 在瀏覽器中開啟 App Store Connect
  2. 在 App Store Connect 登入頁面上,點選 My Apps
  3. 點選“My Apps”頁面左上角的 +,然後選擇 New App
  4. 在出現的表單中填寫應用詳細資訊。在“Platforms”部分,確保選中 macOS。由於 Flutter 目前不支援 tvOS,請取消勾選該項。點選 Create
  5. 導航至應用的詳細資訊頁面,並從側邊欄中選擇 App Information
  6. 在“General Information”部分,選擇您在上一步中註冊的 Bundle ID。

有關詳細概述,請參閱 將應用新增到您的帳戶

檢查 Xcode 專案設定

#

此步驟涵蓋檢查 Xcode 工作區中最重要的設定。有關詳細流程和說明,請參閱 準備應用分發

在 Xcode 中導航至您的目標設定 (Target settings)

  1. 在 Xcode 中,開啟應用 macos 資料夾下的 Runner.xcworkspace
  2. 要檢視應用設定,請在 Xcode 專案導航器中選擇 Runner 專案。然後,在主檢視側邊欄中,選擇 Runner target。
  3. 選擇 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 選項卡應如下所示:

Xcode Project Settings

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

#

產品識別符號的配置集中在 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 應用時,會生成一套佔位符圖示。此步驟涵蓋如何使用您自己的應用圖示替換這些佔位符圖示。

  1. 請查閱 macOS 應用圖示 指南。
  2. 在 Xcode 專案導航器中,選擇 Runner 資料夾下的 Assets.xcassets。使用您自己的應用圖示更新佔位符圖示。
  3. 透過執行 flutter run -d macos 來執行您的應用,以驗證圖示是否已成功替換。

使用 Xcode 建立構建歸檔 (Build Archive)

#

此步驟涵蓋使用 Xcode 建立構建歸檔並上傳到 App Store Connect。

在開發過程中,您一直使用 debug 構建進行構建、除錯和測試。當您準備好將應用分發給 App Store 或 TestFlight 上的使用者時,需要準備一個 release 構建。此時,您可以考慮 混淆您的 Dart 程式碼,以增加反向工程的難度。混淆程式碼需要在構建命令中新增幾個標誌。

在 Xcode 中配置應用版本和構建號

  1. 開啟應用 macos 資料夾下的 Runner.xcworkspace。要透過命令列執行此操作,請在應用專案的根目錄下執行以下命令。
    open macos/Runner.xcworkspace
    
  • 在 Xcode 專案導航器中選擇 Runner,然後在設定檢視側邊欄中選擇 Runner target。
  • 在“Identity”部分,將 Version 更新為您希望釋出的面向使用者的版本號。
  • 在“Identity”部分,將 Build 識別符號更新為用於在 App Store Connect 上跟蹤此構建的唯一構建號。每次上傳都需要一個唯一的構建號。

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

    1. 建立應用程式的釋出歸檔 (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。

    1. 安裝 Codemagic CLI 工具

      bash
      pip3 install codemagic-cli-tools
      
    2. 您需要生成一個具有 App Manager 訪問許可權的 App Store Connect API Key,以實現 App Store Connect 操作的自動化。為了使後續命令更簡潔,請根據新金鑰設定以下環境變數:issuer id、key id 和 API key 檔案。

      bash
      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 證書,以執行程式碼簽名並打包構建歸檔。

      如果您有現有的 證書,可以透過為每個證書執行以下命令來匯出私鑰:

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

      或者,您可以透過執行以下命令建立新的私鑰:

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

      稍後,您可以讓 CLI 工具自動建立新的 Mac App Distribution 和 Mac Installer Distribution 證書。您可以為每個新證書使用相同的私鑰。

    4. 從 App Store Connect 獲取程式碼簽名檔案

      bash
      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 證書,可以透過執行以下命令建立新證書:

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

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

    6. 獲取 Mac Installer Distribution 證書

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

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

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

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

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

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

      bash
      flutter build macos --release
      
    13. 打包應用

      bash
      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

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

      bash
      keychain use-login
      

    在 TestFlight 上釋出應用

    #

    TestFlight 允許開發者將應用推送到內部和外部測試人員手中。此可選步驟涵蓋如何在 TestFlight 上釋出構建。

    1. 導航至 App Store Connect 上應用詳情頁的“TestFlight”選項卡。
    2. 在側邊欄中選擇 Internal Testing
    3. 選擇要釋出給測試人員的構建版本,然後點選 Save
    4. 新增任何內部測試人員的電子郵件地址。您可以在 App Store Connect 的 Users and Roles 頁面中新增更多內部使用者,該頁面可從頁面頂部的下拉選單中訪問。

    分發到已註冊的裝置

    #

    請參閱 分發指南 以準備用於分發到指定 Mac 計算機的歸檔。

    將應用釋出到 App Store

    #

    當您準備好將應用釋出給全世界時,請按照以下步驟提交應用以供稽核併發布到 App Store:

    1. App Store Connect 上應用詳情頁的側邊欄中選擇 Pricing and Availability,並填寫所需資訊。
    2. 從側邊欄中選擇狀態。如果是該應用的首次釋出,其狀態為 1.0 Prepare for Submission。填寫所有必填欄位。
    3. 點選 Submit for Review

    蘋果會在其應用稽核流程完成後通知您。您的應用將按照您在 Version Release 部分中指定的說明進行釋出。

    有關更多詳細資訊,請參閱 透過 App Store 分發應用

    故障排除

    #

    分發您的應用 指南提供了將應用釋出到 App Store 過程的詳細概覽。

    額外資源

    #

    要了解如何以開源方式打包和分發 Flutter 桌面應用到 macOS(無需支付 Apple 開發者帳戶費用),請檢視此分步 macOS 打包指南