Flutter App 上架 Apple App Store 完整流程教學

第一次把 Flutter App 送上 Apple App Store 的時候,我花了整整一個週末在搞各種設定和憑證。蘋果的上架流程確實比 Google Play 繁瑣不少,但只要走過一次,後面就會順很多。這篇文章把我踩過的坑都整理出來,希望能幫大家少走一些冤枉路。

註冊 Apple Developer Program

要上架 App Store,你必須加入 Apple Developer Program,年費是 USD $99(大約台幣三千出頭)。註冊流程:

  1. Apple Developer 用你的 Apple ID 登入
  2. 選擇「Enroll」加入開發者計畫
  3. 填寫個人或公司資訊
  4. 用信用卡付費

個人帳號的審核通常在 24 到 48 小時內完成。如果是公司帳號,需要 D-U-N-S 編號,流程會更久。

我自己是用個人帳號,審核蠻快的,隔天就通過了。在台灣辦的話,付款部分直接用台灣發行的信用卡就可以。

建立 App ID 與憑證

App ID

到 Apple Developer 後台的「Certificates, Identifiers & Profiles」,建立一個新的 App ID:

  • 選擇「App IDs」→「Register an App ID」
  • Bundle ID 用 Explicit 類型,格式建議是 com.yourcompany.appname
  • 勾選你需要的 Capabilities(如 Push Notifications、In-App Purchase 等)

簽署憑證

你需要建立兩種憑證:

  • Development Certificate:用於開發測試
  • Distribution Certificate:用於送審上架

在 Mac 上打開 Keychain Access,從選單「Certificate Assistant」→「Request a Certificate From a Certificate Authority」產生 CSR 檔案,然後上傳到 Apple Developer 後台就能取得憑證。

Provisioning Profile

還需要建立 Distribution 的 Provisioning Profile,綁定你的 App ID 和 Distribution Certificate。下載後雙擊安裝到 Xcode。

Flutter 專案設定

更新 Bundle Identifier

在 Xcode 中打開 ios/Runner.xcworkspace,到 Runner target 的「Signing & Capabilities」,確認:

  • Bundle Identifier 和你在 Apple Developer 建立的一致
  • Team 選擇你的開發者帳號
  • 勾選「Automatically manage signing」(建議先用自動簽署,減少麻煩)

設定版本號

pubspec.yaml 中設定版本:

version: 1.0.0+1

1.0.0 是顯示給使用者看的版本號,+1 是 build number。每次送審 build number 都要遞增。

App Icon

準備一個 1024x1024 的 App Icon(不能有透明通道、不能有圓角,蘋果會自動處理)。推薦用 flutter_launcher_icons 套件來自動產生各尺寸:

dev_dependencies:
  flutter_launcher_icons: ^0.14.3

flutter_launcher_icons:
  ios: true
  image_path: "assets/icon/app_icon.png"

然後執行:

dart run flutter_launcher_icons

啟動畫面

iOS 的啟動畫面在 ios/Runner/Assets.xcassets/LaunchImage.imageset/ 裡面。你可以直接替換圖片,或是用 Xcode 的 LaunchScreen.storyboard 自訂。

打包與上傳

建置 Release 版本

flutter build ipa

這個指令會產生一個 .ipa 檔案,路徑在 build/ios/ipa/ 底下。

如果你需要更細緻的控制,可以用:

flutter build ipa --release --export-options-plist=ios/ExportOptions.plist

上傳到 App Store Connect

上傳 .ipa 有幾種方式,我最常用的是 Xcode 內建的 Organizer 或是用命令列工具 xcrun altool。不過現在 Apple 推薦用 Transporter app,從 Mac App Store 免費下載就好。

打開 Transporter,登入你的 Apple ID,把 .ipa 拖進去就會開始上傳。上傳完成後,通常要等 10 到 30 分鐘,App Store Connect 才會處理完畢。

在 App Store Connect 設定商店資訊

App Store Connect 建立一個新的 App,然後填寫以下資訊:

基本資訊

  • App 名稱:會顯示在 App Store 上的名稱,最多 30 個字
  • 副標題:簡短描述,最多 30 個字
  • 類別:選擇主要和次要類別
  • 隱私政策 URL:這是必填的!確保你有一個公開可存取的隱私政策頁面

螢幕截圖

這是最花時間的部分。你需要準備不同尺寸的截圖:

  • 6.7 吋(iPhone 15 Pro Max):1290 x 2796 px
  • 6.5 吋(iPhone 15 Plus):1284 x 2778 px
  • 5.5 吋(iPhone 8 Plus):1242 x 2208 px
  • iPad Pro 12.9 吋:2048 x 2732 px(如果支援 iPad 的話)

每種尺寸最多可以放 10 張截圖。我的建議是至少準備 5 張,把 App 最重要的功能都展示出來。

描述文字

  • 描述:最多 4000 個字,好好介紹你的 App 功能
  • 關鍵字:最多 100 個字,用逗號分隔
  • 宣傳文字:可以隨時更新,不需要重新送審

送審注意事項

年齡分級

Apple 會問你一系列問題來決定年齡分級。如果你的 App 是給兒童使用的(Kids Category),有額外的規範要遵守,包括不能有第三方登入、不能有外部連結等。

審查指南重點

蘋果的審查比較嚴格,以下是常見的退件原因:

  • 缺少隱私政策連結
  • App 有明顯的 bug 或 crash
  • 截圖與實際功能不符
  • 包含未完成的功能或測試用的內容
  • 使用了私有 API

我第一次送審就因為隱私政策頁面打不開被退件了。所以一定要確認你的隱私政策 URL 是穩定可存取的。

送審時間

提交審查後,通常 24 到 48 小時會收到結果。不過碰到年底假期或是大型發表會前後,審查時間可能會拉長到一週以上。

常見問題排解

簽署錯誤

如果遇到 No signing certificate "iOS Distribution" found 錯誤,檢查一下你的 Distribution Certificate 有沒有正確安裝到 Keychain,以及 Provisioning Profile 有沒有包含正確的 Certificate。

Archive 失敗

記得先執行 flutter clean 清除舊的建置檔案,然後重新 build。有時候是暫存檔案衝突造成的問題。

flutter clean
flutter pub get
flutter build ipa

上傳後看不到 Build

上傳成功但在 App Store Connect 看不到 Build,通常是因為 Apple 還在處理中。可以去信箱檢查有沒有收到 Apple 寄來的錯誤通知。常見的原因是 Info.plist 缺少某些必要的 key,例如 NSCameraUsageDescription

結語

Apple App Store 的上架流程雖然比 Google Play 複雜,但整個生態系的品質確實比較高,使用者付費意願也比較強。對獨立開發者來說,iOS 市場仍然是不可忽視的平台。

整個流程走一遍大概是:註冊帳號 → 設定憑證 → 準備素材 → 打包上傳 → 填寫商店資訊 → 送審。第一次確實要花不少時間,但之後更新版本就快多了。

下一篇我會分享 Google Play 的上架流程,相對來說簡單一些,敬請期待!