构建并发布 iOS 应用
本指南将分步指导您如何将 Flutter 应用发布到 App Store 和 TestFlight。
准备工作
#构建和发布应用需要 Xcode。您必须使用运行 macOS 的设备才能遵循本指南。
在开始发布应用的过程中,请确保您的应用符合 Apple 的 App Review Guidelines(应用审核指南)。
要将您的应用发布到 App Store,您必须首先注册 Apple Developer Program(Apple 开发者计划)。您可以在 Apple 的 Choosing a Membership(选择会员资格)指南中阅读有关各种会员选项的更多信息。
视频概览
#对于喜欢视频而非文字的学习者,以下视频涵盖了本指南中的相同内容。
在 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,请按照以下步骤操作:
- 在您的开发者账户中打开 App IDs 页面。
- 点击 + 创建新的 Bundle ID。
- 输入应用名称,选择 Explicit App ID(明确的应用 ID),然后输入一个 ID。
- 选择您的应用使用的服务,然后点击 Continue(继续)。
- 在下一页,确认详细信息,然后点击 Register(注册)以注册您的 Bundle ID。
在 App Store Connect 创建应用记录
#在 App Store Connect 注册您的应用
- 在浏览器中打开 App Store Connect。
- 在 App Store Connect 登录页面,点击 My Apps(我的应用)。
- 在“我的应用”页面的左上角,点击 +,然后选择 New App(新应用)。
- 在出现的表单中填写您的应用详细信息。在“Platforms”(平台)部分,确保已勾选 iOS。由于 Flutter 目前不支持 tvOS,请勿勾选该复选框。点击 Create(创建)。
- 导航到您应用的应用程序详细信息,然后从侧边栏选择 App Information(应用信息)。
- 在“General Information”(通用信息)部分,选择您在上一步中注册的 Bundle ID。
有关详细的概述,请参阅 Add an app to your account(将应用添加到您的账户)。
检查 Xcode 项目设置
#此步骤涵盖了检查 Xcode 工作区中最重要的设置。有关详细的步骤和说明,请参阅 Prepare for app distribution(为应用分发做准备)。
导航到 Xcode 中您目标的设置
- 通过在 Flutter 项目目录的终端窗口中运行
open ios/Runner.xcworkspace
来打开项目中的默认 Xcode 工作区。 - 要查看您应用的设置,请在 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(通用)选项卡应如下所示
有关应用签名的详细概述,请参阅 Create, export, and delete signing certificates(创建、导出和删除签名证书)。
更新应用的部署版本
#如果您在 Xcode 项目中更改了 Deployment Target
(部署目标),请打开您 Flutter 应用中的 ios/Flutter/AppframeworkInfo.plist
文件,并将 MinimumOSVersion
(最低操作系统版本)的值更新为匹配。
添加应用图标
#当创建一个新的 Flutter 应用时,会创建一个占位符图标集。此步骤将介绍如何用您应用的图标替换这些占位符图标。
- 请参阅 iOS App Icon(iOS 应用图标)指南,特别是关于 为您的应用创建浅色、深色和彩色图标 的建议。
- 在 Xcode 项目导航器中,在
Runner
文件夹中选择Assets.xcassets
。用您自己的应用图标更新占位符图标。 - 通过运行
flutter run
来运行您的应用,验证图标是否已替换。
添加启动图
#与应用图标类似,您也可以替换占位符启动图。
- 在 Xcode 项目导航器中,在
Runner
文件夹中选择Assets.xcassets
。用您自己的启动图更新占位符启动图。 - 通过热重载您的应用来验证新的启动图。(不要使用
hot reload
。)
创建构建存档并上传到 App Store Connect
#在开发过程中,您一直在使用调试构建进行构建、调试和测试。当您准备将应用发布到 App Store 或 TestFlight 时,您需要准备一个发布构建。
更新应用的构建和版本号
#应用的默认版本号是 1.0.0
。要更新它,请导航到 pubspec.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
的构建名称和数字。
- 打开应用
ios
文件夹中的Runner.xcworkspace
。 - 在 Xcode 项目导航器中选择 Runner,然后在设置视图侧边栏中选择 Runner 目标。
- 在 Identity(标识)部分,将 Version(版本)更新为您希望发布的面向用户的版本号。
- 在 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:
安装并打开 Apple Transport macOS 应用。将
build/ios/ipa/*.ipa
应用包拖放到该应用中。或者,通过运行以下命令从命令行上传应用包:
bashxcrun 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(验证应用)按钮。如果报告任何问题,请解决它们并重新生成构建。在上传存档之前,您可以重复使用相同的构建 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。这使您能够完全控制分发证书,并在与登录钥匙串隔离的临时钥匙串中创建构建存档。
安装 Codemagic CLI 工具
bashpip3 install codemagic-cli-tools
您需要生成一个具有 App Manager 访问权限的 App Store Connect API Key,以便与 App Store Connect 自动执行操作。为了使后续命令更简洁,请从新密钥设置以下环境变量:issuer id、key id 和 API key file。
bashexport 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 Distribution 证书来对构建存档进行代码签名和打包。
如果您有现有的 证书,则可以通过为每个证书执行以下命令来导出私钥:
bashopenssl pkcs12 -in <certificate_name>.p12 -nodes -nocerts | openssl rsa -out cert_key
或者,您可以通过执行以下命令来创建新的私钥:
bashssh-keygen -t rsa -b 2048 -m PEM -f cert_key -q -N ""
稍后,您可以让 CLI 工具从私钥自动创建一个新的 iOS Distribution 证书。
设置一个新的临时钥匙串以用于代码签名
bashkeychain initialize
从 App Store Connect 获取代码签名文件
bashapp-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 中不存在,它将从私钥创建。现在将获取的证书添加到您的钥匙串中
bashkeychain add-certificates
更新 Xcode 项目设置以使用获取的代码签名配置文件
bashxcode-project use-profiles
安装 Flutter 依赖项
bashflutter packages pub get
安装 CocoaPods 依赖项
bashfind . -name "Podfile" -execdir pod install \;
构建 Flutter iOS 项目
bashflutter build ipa --release \ --export-options-plist=$HOME/export_options.plist
请注意,
export_options.plist
是xcode-project use-profiles
命令的输出。将应用发布到 App Store Connect
bashapp-store-connect publish \ --path $(find $(pwd) -name "*.ipa")
如前所述,别忘了将您的登录钥匙串设置为默认值,以避免您的计算机上的应用程序出现身份验证问题。
bashkeychain use-login
您应该在 30 分钟内收到一封电子邮件,通知您您的构建已验证并通过,可发布给 TestFlight 测试人员。此时,您可以选择在 TestFlight 中发布,或直接发布您的应用到 App Store。
在 TestFlight 中发布您的应用
#TestFlight 允许开发者将他们的应用推送给内部和外部测试人员。此可选步骤涵盖在 TestFlight 中发布您的构建。
- 在 App Store Connect 上您应用的应用程序详细信息页面的 TestFlight 选项卡中进行导航。
- 在侧边栏中选择 Internal Testing(内部测试)。
- 选择要发布给测试人员的构建,然后点击 Save(保存)。
- 添加任何内部测试人员的电子邮件地址。您可以在 App Store Connect 的 Users and Roles(用户和角色)页面中添加其他内部用户,该页面可在页面顶部的下拉菜单中找到。
有关更多详细信息,请参阅 Distribute an app using TestFlight(使用 TestFlight 分发应用)。
将您的应用发布到 App Store
#当您准备好向全世界发布您的应用时,请按照以下步骤提交您的应用进行审核并发布到 App Store:
- 在 App Store Connect 上您应用的应用程序详细信息页面的侧边栏中选择 Pricing and Availability(定价和可用性),并填写所需信息。
- 在侧边栏中选择状态。如果这是该应用首次发布,其状态为 1.0 Prepare for Submission(1.0 准备提交)。填写所有必需的字段。
- 点击 Submit for Review(提交审核)。
Apple 会在应用审核流程完成后通知您。您的应用将根据您在 Version Release(版本发布)部分中指定的说明进行发布。
有关更多详细信息,请参阅 Distribute an app through the App Store(通过 App Store 分发应用)。
故障排除
#Distribute your app(分发您的应用)指南提供了发布应用到 App Store 流程的详细概述。