建構和釋出為 iOS 應用
這個課程將為你提供關於如何將 Flutter App 釋出到 App Store 和 TestFlight 的說明。
預先準備
建構和釋出一個 macOS 應用需要使用 Xcode,你必須要有一個執行著 macOS 系統的裝置來學習本指南文件。
在開始釋出你的 app 的處理序之前,確保你已經看過了 Apple 的 App Store 稽核指南。
想要釋出你的 app 到 App Store,你需要註冊 Apple Developer Program。你可以在蘋果的 選擇會員資格(開發者型別) 中檢視到關於多種不同會員型別的選擇。
在 App Store Connect 上註冊你的 App
App Store Connect (曾經的 iTunes Connet)是你將會管理應用生命週期的地方。你將會定義應用的名稱和描述以及截圖,設定價格,並管理釋出到 App Store 和 Testflight。
註冊你的 app 需要兩步:登記唯一的套裝 ID(Bundle ID),並在你的 App Store Connect 中建立一個 app。
關於更多 App Store Connect 的細節,檢視 App Store Connect 指南。
登記套裝 ID
每一個 iOS 應用都與一個在 Apple 登記的唯一的套裝 ID 關聯。要為你的應用登記一個套裝 ID,請參考下面的步驟:
-
在你的開發者帳號頁面開啟 App IDs 頁面。
-
點選 + 來建立一個新的套裝 ID。
-
輸入一個 App 名稱,選擇 Explicit App ID,然後輸入一個 ID。
-
選擇你的 App 將要使用的服務,然後點選 繼續
-
在下一頁,確認細節並點選 註冊 來註冊你的 Bundle ID。
在 App Store Connect 建立一個應用記錄
在 App Store Connect 中註冊你的應用:
接下來,你需要在 App Store Connect 註冊你的應用:
-
在你的瀏覽器裡開啟 App Store Connect。
-
在 App Store Connect 的落地頁,點選 My Apps。
-
在我的 app 頁面的頂部左側,點選 + ,然後選擇 New App。
-
在出現的表單中填寫你的 app 細節。在平台部分,確保 iOS 被選中。由於 Flutter 暫時不支援 tvOS,保持該選項為未選。點選 Create。
-
跳轉到你的應用詳情,然後從側邊欄選擇 App Information 。
-
在基礎資訊部分,選擇你在前一步註冊的套裝 ID。
想要獲取更多資訊,可以看這個幫助頁面 新增 App 至您的帳戶。
檢查 Xcode 專案設定
在這一步,你需要在 Xcode 工作空間檢查絕大多數重要設定。關於更多的步驟和描述,檢視 為 App 分發做準備。
在 Xcode 中跳轉到你的目標設定:
-
在 Flutter 工程目錄下執行命令
open ios/Runner.xcworkspace
開啟預設的 Xcode workspace。 -
想要看你的 app 設定,在 Xcode 的專案導航欄中選擇 Runner。
接下來,你需要驗證最重要的配置:
選擇 General 標籤頁,在 Identity 部分:
Display Name
應用的名字。
Bundle Identifier
在 App Store Connect 註冊的 App ID。
在 Signing & Capabilities 部分:
Automatically manage signing
是否需要 Xcode 自動管理 app 簽名和設定。這個預設被設定為 true
,對於絕大多數 App 來說都是適用的。對於更復雜的場景,檢視 程式碼簽名指南。
Team
選擇關聯到你註冊的 Apple 開發者賬戶的團隊。如果需要,選擇 Add Account…, 然後更新選項。
在 Build Settings 標籤頁的 Deployment 部分:
iOS Deployment Target
設定你的應用可以支援到的最低的 iOS 版本。
Flutter 支援 iOS 11 及其之後的版本,如果你的應用包含了 iOS 11 不支援的
Objective-C 或 Swift 程式碼,請將這裡一併設定為相應所需的最高版本。
你專案的 General 標籤頁應該看起來像是這樣的:
更多關於 App 簽名新的介紹,檢視文件 建立, 匯出, 和刪除簽名證書。
更新應用的開發版本
如果你在 Xcode 工程裡更改了 Deployment Target
,你需要開啟 Flutter app 的 ios/Flutter/AppframeworkInfo.plist
檔案並修改 MinimumOSVersion
值與之匹配。
新增應用圖示
當你建立一個新的 Flutter 應用時,則會建立一個預設的圖示。在這一步,你將使用你自己的圖示替換佔位圖示:
-
回顧 iOS 的 App Icon 指南。
-
在 Xcode 專案導航欄,選擇
Runner
目錄中的Assets.xcassets
,更新佔位圖示為你自己的 app 的圖示。 -
透過執行
flutter run
來驗證你的圖示是否已經被替換。
新增啟動畫
與應用圖示類似,你可以透過下面的方法替換佔位的啟動畫:
-
在 Xcode 的工程導航中選擇
Runner
資料夾下的Assets.xcassets
,然後將自己的啟動畫替換掉佔位啟動畫即可。 -
重新啟動你的應用來驗證是否替換成功,不要使用熱重載。
建立一個建構歸檔,並上傳到 App Store Connect
在開發過程中,你將會使用 debug 模式來完成建構、除錯並測試。當你準備好透過 App Store 或 TestFlight 交付你的 app 給使用者時,你需要準備一個 release 建構。
更新應用的建構編號和版本號
預設應用的版本號是 1.0.0
,如果需要更新這個版本號,到 pubspec.yaml
檔案中更新下面這一行:
version: 1.0.0+1
版本號是由三個數字並用半形句號 (點) 隔開的,比如上面顯示的 1.0.0
。後面是一個可選的建構編號,比如這個例子中使用 +
隔開的數字 1
。
建構名稱和建構編號都可以透過在執行命令 flutter build ipa
的時候透過 --build-name
和 --build-number
覆蓋設定。
在 iOS 中,build-name
對應 CFBundleShortVersionString
、
build-number
對應著 CFBundleVersion
。瞭解更多關於 iOS 中的版本資訊,請在 Apple 開發者文件網站檢視
Core Foundation Keys 文件。
在 Xcode 中這樣設定,也可以覆蓋 pubspec.yaml
中的建構名稱和建構編號:
-
在
ios
資料夾中開啟Runner.xcworkspace
。 -
在 Xcode 專案導航欄中選擇 Runner,然後在設定介面側邊欄選擇 Runner 目標。
-
在 Identity 部分,更新 Version 為你想要釋出的使用者可見的版本號。
-
在 Identity 部分,更新 Build 標示為一個唯一的 Build 數字,用來在 App Store Connect 上追蹤,每一個上傳都需要一個獨立的 Build 數字。
建立一個應用套裝 (app bundle)
執行命令列 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:
-
安裝並開啟 Transporter macOS 應用,將
build/ios/ipa/*.ipa
下的應用套裝拖入 Transporter 應用中。 -
也可以在命令列執行下面的命令將應用套裝上傳:
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 金鑰進行認證。 -
在 Xcode 中開啟
build/ios/archive/MyApp.xcarchive
。點選 Validate App 按鈕。如果報告了任何問題,記錄下他們並重新開始一個新的建構。在你上傳一個歸檔前,可以一直使用同一個 Build ID。
當這個歸檔校驗成功以後,點選 Distribute App。
你可以在 App Store Connect 中應用詳情頁面的 Activities 標籤頁檢視你的建構狀態。
當你的建構已經通過了校驗,可以將你的建構透過 TestFlight 釋出給你的測試人員或直接將其釋出到 App Store 的時候,你會在 30 分鐘內收到一封信來提醒你。
更多內容可參考 上傳 App 到 App Store Connect。
使用 Codemagic 命令列工具建立一個建構歸檔
該步驟包含了在 Flutter 專案的目錄下,透過終端使用 Flutter 建構命令和 Codemagic 命令列工具,建構歸檔並上傳至 App Store 的課程。該操作可以讓你完全控制分發證書和臨時鑰匙串,將它們與登入的進行隔離。
-
安裝 Codemagic 命令列工具:
pip3 install codemagic-cli-tools
-
你需要使用包含 App 管理許可權的 App Store Connect 帳號,產生一個 App Store Connect API Key。為了使後續的命令更加簡潔,你可以在環境變數中配置這些內容: issuer id、key id 以及 API key 檔案。
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`
-
你需要匯出或者建立一個 iOS 分發證書,用來簽名及歸檔建構。
如果你已經有可用的 證書,你可以使用以下命令匯出私鑰:
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 ""
之後你便可以用命令列工具基於這個私鑰建立新的 iOS 分發建構了。
-
配置一個用於簽名的臨時鑰匙串:
keychain initialize
-
從 App Store Connect 上獲取簽名檔案:
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 分發證書的私鑰,或者是自動產生新證書的新私鑰。如果 App Store Connect 中不存在這個證書,將會透過私鑰建立。 -
將獲取到的證書新增到你的鑰匙串中:
keychain add-certificates
-
更新 Xcode 專案設定,使用獲取到的簽名配置:
xcode-project use-profiles
-
獲取 Flutter 依賴:
flutter packages pub get
-
獲取 CocoaPods 依賴:
find . -name "Podfile" -execdir pod install \;
-
建構 Flutter 的 iOS 專案:
flutter build ipa --release \ --export-options-plist=$HOME/export_options.plist
注意
export_options.plist
路徑來源於xcode-project use-profiles
命令的輸出。 -
將應用釋出到 App Store Connect:
app-store-connect publish \ --path $(find $(pwd) -name "*.ipa")
-
如前文所示,記得將你的登入鑰匙串設定為預設,避免裝置出現認證問題:
keychain use-login
在 30 分鐘內,你會收到一封郵件,提醒你建構已驗證,可以在 TestFlight 上釋出。這時你可以選擇在 TestFlight 上釋出,或是直接在 App Store 上釋出。
在 TestFlight 釋出你的應用
TestFlight allows developers to push their apps to internal and external testers. This optional step covers releasing your build on TestFlight.
-
在 App Store Connect中,你的應用的詳情頁面跳轉到 TestFlight Tab。
-
在側邊欄選擇 Internal Testing。
-
選擇要釋出給測試人員的建構,然後點選 儲存。
-
為每一個內部測試人員新增郵件。你可以在 App Store Connect 的 使用者與角色 頁面新增額外的內部使用者,他們將會出現在頁面頂部的下拉選單中。
關於更多資訊,請檢視 使用 TestFlight 分發應用 (Distribute an app using TestFlight (iOS, tvOS, watchOS))。
在 App Store 釋出你的應用
當你準備釋出你的 app 到這個世界時,跟隨下面的步驟,來提交你的 App 去稽核,並將其釋出到 App Store。
-
從你的 app 在 App Store Connect 的頁面中的側邊欄中選擇 Pricing and Availability,然後完善所有的必填資訊。
-
從側邊欄選擇狀態。如果這是第一次釋出這個 App,這個狀態將會是 1.0 Prepare for Submission,填寫所有需要填寫的區域。
-
點選 提交稽核
Apple 將會在他們的稽核過程結束後提醒你。你的 app 將會根據 Version Release 部分的介紹進行釋出。
關於更多細節,檢視 透過 App Store 分發一個 App.
故障排除
分發你的應用 指南,提供了詳細的釋出應用到 App Store 過程的內容。