跳至主要內容

建置和發布 macOS 應用程式

本指南提供逐步說明,引導您將 Flutter 應用程式發布到 App Store

準備事項

#

在開始發布應用程式的流程之前,請確保它符合 Apple 的 App 審查指南

為了將您的應用程式發布到 App Store,您必須先加入 Apple 開發者計畫。您可以在 Apple 的 選擇成員資格指南中閱讀更多關於各種成員資格選項的資訊。

在 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 是在 Apple 註冊的唯一識別碼。若要為您的應用程式註冊 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 中您目標的設定

  1. 在 Xcode 中,開啟您應用程式的 macos 資料夾中的 Runner.xcworkspace
  2. 若要檢視您應用程式的設定,請在 Xcode 專案導覽器中選取 Runner 專案。然後,在主視圖側邊欄中,選取 Runner 目標。
  3. 選取 General 標籤。

驗證最重要的設定。

Identity 區段中

App Category
您的應用程式將在 Mac App Store 上列出的應用程式類別。這不能為「無」。
Bundle Identifier
您在 App Store Connect 上註冊的 App ID。

Deployment info 區段中

Deployment Target
您的應用程式支援的最低 macOS 版本。Flutter 支援將應用程式部署到 macOS 10.14 (Mojave) 及更高版本。

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 版本控制的更多資訊,請參閱 Apple 開發人員網站上的 Core Foundation Keys

新增應用程式圖示

#

當建立新的 Flutter 應用程式時,會建立一個預留位置圖示集。此步驟涵蓋將這些預留位置圖示取代為您應用程式的圖示

  1. 檢閱 macOS 應用程式圖示指南。
  2. 在 Xcode 專案導覽器中,選取 Runner 資料夾中的 Assets.xcassets。使用您自己的應用程式圖示更新預留位置圖示。
  3. 使用 flutter run -d macos 執行您的應用程式,驗證圖示是否已取代。

使用 Xcode 建立建置封存檔

#

此步驟涵蓋建立建置封存檔,並使用 Xcode 將您的建置上傳到 App Store Connect。

在開發期間,您一直在使用偵錯組建進行建置、偵錯和測試。當您準備好將應用程式發布給 App Store 或 TestFlight 上的使用者時,您需要準備發行組建。此時,您可能會考慮混淆您的 Dart 程式碼,使其更難以進行逆向工程。混淆您的程式碼需要將一些標誌新增至您的組建命令。

在 Xcode 中,設定應用程式版本和組建

  1. 開啟您應用程式 macos 資料夾中的 Runner.xcworkspace。若要從命令列執行此操作,請從您的應用程式專案的根目錄執行以下命令。
    open macos/Runner.xcworkspace
  2. 在 Xcode 專案導覽器中選取 Runner,然後在設定視圖側邊欄中選取 Runner 目標。
  3. 在「Identity」區段中,將 Version 更新為您要發布的使用者可見版本號碼。
  4. 在「Identity」區段中,將 Build 識別碼更新為用於在 App Store Connect 上追蹤此組建的唯一組建號碼。每次上傳都需要一個唯一的組建號碼。

最後,建立組建封存檔並將其上傳到 App Store Connect

  1. 建立您應用程式的發行封存檔。從您的應用程式專案的根目錄執行以下命令。
    flutter build macos
  2. 開啟 Xcode 並選取 Product > Archive 以開啟在上一個步驟中建立的封存檔。
  3. 點擊 Validate App 按鈕。如果報告任何問題,請解決這些問題並產生另一個組建。您可以使用相同的組建 ID,直到您上傳封存檔為止。
  4. 在成功驗證封存檔後,點擊 Distribute App。您可以在 App Store Connect 上您的應用程式詳細資料頁面的「Activities」標籤中追蹤您組建的狀態。

您應在 30 分鐘內收到一封電子郵件,通知您您的組建已通過驗證,並且可以在 TestFlight 上發布給測試人員。此時,您可以選擇是否在 TestFlight 上發布,或繼續將您的應用程式發布到 App Store。

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

使用 Codemagic CLI 工具建立建置封存檔

#

此步驟涵蓋建立建置封存檔,並使用 Flutter 組建命令和在 Flutter 專案目錄中的終端機中執行的 Codemagic CLI 工具,將您的組建上傳到 App Store Connect。

  1. 安裝 Codemagic CLI 工具

    bash
    pip3 install codemagic-cli-tools
  2. 您需要使用 App Manager 存取權產生一個 App Store Connect API 金鑰,以自動執行 App Store Connect 的操作。若要使後續的命令更加簡潔,請從新金鑰設定以下環境變數:發行者 ID、金鑰 ID 和 API 金鑰檔案。

    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 應用程式發行憑證和 Mac 安裝程式發行憑證,才能執行程式碼簽署並封裝建置封存檔。

    如果您有現有的憑證,您可以執行以下命令來匯出每個憑證的私密金鑰

    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 應用程式發行憑證和 Mac 安裝程式發行憑證。您可以為每個新憑證使用相同的私密金鑰。

  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 應用程式發行憑證私密金鑰,或是自動產生新憑證的新私密金鑰。

  5. 如果您沒有 Mac 安裝程式發行憑證,您可以執行以下命令來建立新的憑證

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

    使用您稍早建立的私密金鑰的 cert_key

  6. 擷取 Mac 安裝程式發行憑證

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

    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. 在側邊欄中選擇 內部測試
  3. 選擇要發佈給測試人員的建置版本,然後按一下 儲存
  4. 新增任何內部測試人員的電子郵件地址。您可以在 App Store Connect 的 使用者和角色 頁面中新增其他內部使用者,該頁面可從頁面頂端的下拉式選單中取得。

發布到已註冊的裝置

#

請參閱發布指南,以準備將封存檔發布到指定的 Mac 電腦。

在 App Store 上發布您的應用程式

#

當您準備好將您的應用程式發布到全世界時,請按照以下步驟提交您的應用程式以進行審查並發布到 App Store

  1. 從您應用程式在 App Store Connect 上的應用程式詳細資料頁面的側邊欄中選擇 定價與供應狀況,並填寫所需資訊。
  2. 從側邊欄中選擇狀態。如果這是此應用程式的首次發布,其狀態為 1.0 準備提交。填寫所有必填欄位。
  3. 按一下 提交以供審查

當蘋果的應用程式審查流程完成時,他們會通知您。您的應用程式會根據您在 版本發布 區段中指定的指示發布。

如需更多詳細資訊,請參閱透過 App Store 發布應用程式

疑難排解

#

發布您的應用程式 指南提供了有關將應用程式發布到 App Store 的流程的詳細概述。

其他資源

#

若要了解如何以開源方式封裝和發布適用於 macOS 的 Flutter 桌面應用程式,而無需使用付費的 Apple 開發人員帳戶,請查看逐步教學的 macOS 封裝指南