本指南將分步指導您如何將 Flutter 應用釋出到 App StoreTestFlight

準備工作

#

構建和釋出應用需要 Xcode。您必須使用執行 macOS 的裝置才能遵循本指南。

在開始釋出應用的過程中,請確保您的應用符合 Apple 的 App Review Guidelines(應用稽核指南)。

要將您的應用釋出到 App Store,您必須首先註冊 Apple Developer Program(Apple 開發者計劃)。您可以在 Apple 的 Choosing a Membership(選擇會員資格)指南中閱讀有關各種會員選項的更多資訊。

影片概覽

#

對於喜歡影片而非文字的學習者,以下影片涵蓋了本指南中的相同內容。

在 YouTube 新標籤頁中觀看:“7 步釋出使用 Flutter 構建的 iOS 應用”

在 App Store Connect 註冊您的應用

#

App Store Connect(以前稱為 iTunes Connect)中管理您應用的生命週期。您可以在此處定義應用名稱和描述、新增螢幕截圖、設定定價以及管理到 App Store 和 TestFlight 的釋出。

註冊您的應用包含兩個步驟:註冊唯一的 Bundle ID,以及在 App Store Connect 中建立應用記錄。

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

註冊 Bundle ID

#

每個 iOS 應用都與一個 Bundle ID 相關聯,這是在 Apple 註冊的一個唯一識別符號。要為您的應用註冊 Bundle ID,請按照以下步驟操作:

  1. 在您的開發者賬戶中開啟 App IDs 頁面。
  2. 點選 + 建立新的 Bundle ID。
  3. 輸入應用名稱,選擇 Explicit App ID(明確的應用 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. 在“我的應用”頁面的左上角,點選 +,然後選擇 New App(新應用)。
  4. 在出現的表單中填寫您的應用詳細資訊。在“Platforms”(平臺)部分,確保已勾選 iOS。由於 Flutter 目前不支援 tvOS,請勿勾選該複選框。點選 Create(建立)。
  5. 導航到您應用的應用程式詳細資訊,然後從側邊欄選擇 App Information(應用資訊)。
  6. 在“General Information”(通用資訊)部分,選擇您在上一步中註冊的 Bundle ID。

有關詳細的概述,請參閱 Add an app to your account(將應用新增到您的賬戶)。

檢查 Xcode 專案設定

#

此步驟涵蓋了檢查 Xcode 工作區中最重要的設定。有關詳細的步驟和說明,請參閱 Prepare for app distribution(為應用分發做準備)。

導航到 Xcode 中您目標的設定

  1. 透過在 Flutter 專案目錄的終端視窗中執行 open ios/Runner.xcworkspace 來開啟專案中的預設 Xcode 工作區。
  2. 要檢視您應用的設定,請在 Xcode 導航器中選擇 Runner 目標。

驗證最重要的設定。

General(通用)選項卡的 Identity(標識)部分

Display Name(顯示名稱)
您應用的顯示名稱。
Bundle Identifier(Bundle 識別符號)
您在 App Store Connect 註冊的應用 ID。

Signing & Capabilities(簽名與功能)選項卡中

Automatically manage signing(自動管理簽名)
Xcode 是否應自動管理應用簽名和配置。預設設定為 true,這對於大多數應用來說應該足夠了。對於更復雜的情況,請參閱 Code Signing Guide(程式碼簽名指南)。
Team(團隊)
選擇與您的註冊 Apple Developer 賬戶關聯的團隊。如果需要,請選擇 Add Account...(新增賬戶...),然後更新此設定。

Build Settings(構建設定)選項卡的 Deployment(部署)部分

iOS Deployment Target(iOS 部署目標)
您的應用支援的最低 iOS 版本。Flutter 支援 iOS 13 及更高版本。如果您的應用或外掛包含使用 iOS 12 以上 API 的 Objective-C 或 Swift 程式碼,請將此設定更新為所需的最高版本。

您專案的 General(通用)選項卡應如下所示

Xcode Project Settings

有關應用簽名的詳細概述,請參閱 Create, export, and delete signing certificates(建立、匯出和刪除簽名證書)。

更新應用的部署版本

#

如果您在 Xcode 專案中更改了 Deployment Target(部署目標),請開啟您 Flutter 應用中的 ios/Flutter/AppframeworkInfo.plist 檔案,並將 MinimumOSVersion(最低作業系統版本)的值更新為匹配。

新增應用圖示

#

當建立一個新的 Flutter 應用時,會建立一個佔位符圖示集。此步驟將介紹如何用您應用的圖示替換這些佔位符圖示。

  1. 請參閱 iOS App Icon(iOS 應用圖示)指南,特別是關於 為您的應用建立淺色、深色和彩色圖示 的建議。
  2. 在 Xcode 專案導航器中,在 Runner 資料夾中選擇 Assets.xcassets。用您自己的應用圖示更新佔位符圖示。
  3. 透過執行 flutter run 來執行您的應用,驗證圖示是否已替換。

新增啟動圖

#

與應用圖示類似,您也可以替換佔位符啟動圖。

  1. 在 Xcode 專案導航器中,在 Runner 資料夾中選擇 Assets.xcassets。用您自己的啟動圖更新佔位符啟動圖。
  2. 透過熱過載您的應用來驗證新的啟動圖。(不要使用 hot reload。)

建立構建存檔並上傳到 App Store Connect

#

在開發過程中,您一直在使用除錯構建進行構建、除錯和測試。當您準備將應用釋出到 App Store 或 TestFlight 時,您需要準備一個釋出構建。

更新應用的構建和版本號

#

應用的預設版本號是 1.0.0。要更新它,請導航到 pubspec.yaml 檔案並更新以下行:

yaml
version: 1.0.0+1

版本號是三個用點分隔的數字,例如上面的示例中的 1.0.0,後面跟著一個可選的構建號,例如上面的示例中的 1,用 + 分隔。

版本和構建號都可以透過指定 --build-name--build-number 分別在 flutter build ipa 中覆蓋。

在 iOS 中,build-name 使用 CFBundleShortVersionString,而 build-number 使用 CFBundleVersion。在 Apple Developer 網站的 Core Foundation Keys(核心基金會鍵)中瞭解有關 iOS 版本控制的更多資訊。

您也可以在 Xcode 中覆蓋 pubspec.yaml 的構建名稱和數字。

  1. 開啟應用 ios 資料夾中的 Runner.xcworkspace
  2. 在 Xcode 專案導航器中選擇 Runner,然後在設定檢視側邊欄中選擇 Runner 目標。
  3. 在 Identity(標識)部分,將 Version(版本)更新為您希望釋出的面向使用者的版本號。
  4. 在 Identity(標識)部分,將 Build(構建)識別符號更新為一個用於在 App Store Connect 中跟蹤此構建的唯一構建號。每次上傳都需要一個唯一的構建號。

建立應用包

#

執行 flutter build ipa 以在專案 build/ios/archive/ 目錄中生成 Xcode 構建存檔(.xcarchive 檔案),並在 build/ios/ipa 中生成 App Store 應用包(.ipa 檔案)。

可以考慮新增 --obfuscate--split-debug-info 標誌來 混淆您的 Dart 程式碼,使其更難被逆向工程。

如果您不分發到 App Store,您可以選擇新增選項 --export-method ad-hoc--export-method development--export-method enterprise 來選擇不同的 匯出方法

將應用包上傳到 App Store Connect

#

建立應用包後,透過以下任一方式將其上傳到 App Store Connect

  1. 安裝並開啟 Apple Transport macOS 應用。將 build/ios/ipa/*.ipa 應用包拖放到該應用中。

  2. 或者,透過執行以下命令從命令列上傳應用包:

    bash
    xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa --apiKey your_api_key --apiIssuer your_issuer_id

    執行 man altool 以獲取有關如何使用 App Store Connect API 金鑰進行身份驗證的詳細資訊。

  3. 或者,在 Xcode 中開啟 build/ios/archive/MyApp.xcarchive

    點選 Validate App(驗證應用)按鈕。如果報告任何問題,請解決它們並重新生成構建。在上傳存檔之前,您可以重複使用相同的構建 ID。

    在存檔成功驗證後,點選 Distribute App(分發應用)。

您可以在 App Store Connect 上您應用的詳細資訊頁面的 Activities(活動)選項卡中跟蹤您的構建狀態。您應該在 30 分鐘內收到一封電子郵件,通知您您的構建已驗證並透過,可釋出給 TestFlight 測試人員。此時,您可以選擇在 TestFlight 中釋出,或直接釋出您的應用到 App Store。

有關更多詳細資訊,請參閱 Upload an app to App Store Connect(將應用上傳到 App Store Connect)。

使用 Codemagic CLI 工具建立構建存檔

#

此步驟涵蓋了使用 Flutter 構建命令和在 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 file。

    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. 您需要匯出或建立 iOS 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 工具從私鑰自動建立一個新的 iOS Distribution 證書。

  4. 設定一個新的臨時鑰匙串以用於程式碼簽名

    bash
    keychain initialize
  5. 從 App Store Connect 獲取程式碼簽名檔案

    bash
    app-store-connect fetch-signing-files $(xcode-project detect-bundle-id) \
        --platform IOS \
        --type IOS_APP_STORE \
        --certificate-key=@file:/path/to/cert_key \
        --create

    其中 cert_key 是您匯出的 iOS Distribution 證書私鑰,或者是自動生成新證書的新私鑰。如果證書在 App Store Connect 中不存在,它將從私鑰建立。

  6. 現在將獲取的證書新增到您的鑰匙串中

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

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

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

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

    bash
    flutter build ipa --release \
        --export-options-plist=$HOME/export_options.plist

    請注意,export_options.plistxcode-project use-profiles 命令的輸出。

  11. 將應用釋出到 App Store Connect

    bash
    app-store-connect publish \
        --path $(find $(pwd) -name "*.ipa")
  12. 如前所述,別忘了將您的登入鑰匙串設定為預設值,以避免您的計算機上的應用程式出現身份驗證問題。

    bash
    keychain use-login

您應該在 30 分鐘內收到一封電子郵件,通知您您的構建已驗證並透過,可釋出給 TestFlight 測試人員。此時,您可以選擇在 TestFlight 中釋出,或直接釋出您的應用到 App Store。

在 TestFlight 中釋出您的應用

#

TestFlight 允許開發者將他們的應用推送給內部和外部測試人員。此可選步驟涵蓋在 TestFlight 中釋出您的構建。

  1. App Store Connect 上您應用的應用程式詳細資訊頁面的 TestFlight 選項卡中進行導航。
  2. 在側邊欄中選擇 Internal Testing(內部測試)。
  3. 選擇要釋出給測試人員的構建,然後點選 Save(儲存)。
  4. 新增任何內部測試人員的電子郵件地址。您可以在 App Store Connect 的 Users and Roles(使用者和角色)頁面中新增其他內部使用者,該頁面可在頁面頂部的下拉選單中找到。

有關更多詳細資訊,請參閱 Distribute an app using TestFlight(使用 TestFlight 分發應用)。

將您的應用釋出到 App Store

#

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

  1. App Store Connect 上您應用的應用程式詳細資訊頁面的側邊欄中選擇 Pricing and Availability(定價和可用性),並填寫所需資訊。
  2. 在側邊欄中選擇狀態。如果這是該應用首次釋出,其狀態為 1.0 Prepare for Submission(1.0 準備提交)。填寫所有必需的欄位。
  3. 點選 Submit for Review(提交稽核)。

Apple 會在應用稽核流程完成後通知您。您的應用將根據您在 Version Release(版本釋出)部分中指定的說明進行釋出。

有關更多詳細資訊,請參閱 Distribute an app through the App Store(透過 App Store 分發應用)。

故障排除

#

Distribute your app(分發您的應用)指南提供了釋出應用到 App Store 流程的詳細概述。