构建并发布 iOS 应用程序

本指南提供了将 Flutter 应用发布到 App StoreTestFlight 的分步演练。

准备工作

构建并发布你的应用需要 Xcode。你必须使用运行 macOS 的设备来遵循本指南。

在开始发布你的应用之前,请确保它符合 Apple 的 应用审核指南

要在 App Store 上发布你的应用,你必须首先注册 Apple 开发者计划。你可以在 Apple 的 选择会员资格指南中阅读有关各种会员选项的更多信息。

视频概述

对于那些喜欢视频而不是文字的人来说,以下视频涵盖了与本指南相同的内容。

使用 Flutter 在 7 个步骤中发布 iOS 应用

在 App Store Connect 上注册你的应用

App Store Connect(前身为 iTunes Connect)上管理你的应用生命周期。你可以定义你的应用名称和描述,添加屏幕截图,设置定价,并管理在 App Store 和 TestFlight 上发布。

注册您的应用涉及两个步骤:注册唯一的包 ID,并在 App Store Connect 上创建应用记录。

有关 App Store Connect 的详细概述,请参阅 App Store Connect 指南。

注册包 ID

每个 iOS 应用都与包 ID 相关联,包 ID 是向 Apple 注册的唯一标识符。要为您的应用注册包 ID,请执行以下步骤

  1. 打开开发者帐户的 应用 ID 页面。
  2. 单击 + 创建新的包 ID。
  3. 输入应用名称,选择 显式应用 ID,并输入 ID。
  4. 选择您的应用使用的服务,然后单击 继续
  5. 在下一页上,确认详细信息并单击 注册 以注册您的包 ID。

在 App Store Connect 上创建应用记录

在 App Store Connect 上注册你的应用

  1. 在浏览器中打开 App Store Connect
  2. 在 App Store Connect 着陆页上,单击 我的应用
  3. 单击我的应用页面左上角的 +,然后选择 新应用
  4. 在出现的表单中填写您的应用详细信息。在平台部分,确保已选中 iOS。由于 Flutter 当前不支持 tvOS,因此请取消选中该复选框。单击 创建
  5. 导航到您的应用的应用详细信息并从侧边栏中选择 应用信息
  6. 在常规信息部分,选择您在前一步中注册的包 ID。

有关详细概述,请参阅 将应用添加到您的帐户

查看 Xcode 项目设置

此步骤涵盖了 Xcode 工作区中最重要的设置的查看。有关详细步骤和说明,请参阅 为应用分发做准备

在 Xcode 中导航到您的目标设置

  1. 通过在 Flutter 项目目录中的终端窗口中运行 open ios/Runner.xcworkspace 在您的项目中打开默认的 Xcode 工作区。
  2. 要查看应用设置,请在 Xcode 导航器中选择Runner目标。

验证最重要的设置。

常规选项卡的标识部分中

显示名称
应用的显示名称。
包标识符
你在 App Store Connect 中注册的应用 ID。

签名和功能选项卡中

自动管理签名
Xcode 是否应自动管理应用签名和供应。默认情况下,此项设置为true,这对于大多数应用来说应该足够了。对于更复杂的情况,请参阅代码签名指南
团队
选择与你注册的 Apple 开发者帐户关联的团队。如果需要,请选择添加帐户...,然后更新此设置。

构建设置选项卡的部署部分中

iOS 部署目标
应用支持的最低 iOS 版本。Flutter 支持 iOS 12 及更高版本。如果你的应用或插件包含使用 iOS 12 以上 API 的 Objective-C 或 Swift 代码,请将此设置更新为所需最高版本。

项目设置的常规选项卡应类似于以下内容

Xcode Project Settings

有关应用签名的详细概述,请参阅创建、导出和删除签名证书

更新应用的部署版本

如果你在 Xcode 项目中更改了部署目标,请在 Flutter 应用中打开ios/Flutter/AppframeworkInfo.plist,并将MinimumOSVersion值更新为匹配值。

添加应用图标

创建新的 Flutter 应用时,会创建一个占位符图标集。此步骤介绍如何用应用图标替换这些占位符图标

  1. 查看iOS 应用图标指南。
  2. 在 Xcode 项目导航器中,在Runner文件夹中选择Assets.xcassets。用你自己的应用图标更新占位符图标。
  3. 使用flutter run运行应用来验证图标是否已替换。

添加启动图片

与应用图标类似,您还可以替换占位启动图片

  1. 在 Xcode 项目导航器中,选择 Runner 文件夹中的 Assets.xcassets。使用您自己的启动图片更新占位启动图片。
  2. 通过热重启应用来验证新的启动图片。(不要使用 热重载。)

创建构建存档并上传到 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 开发者网站上阅读有关 iOS 版本控制的更多信息,网址为 Core Foundation Keys

您还可以在 Xcode 中覆盖 pubspec.yaml 构建名称和编号

  1. 在应用的 ios 文件夹中打开 Runner.xcworkspace
  2. 在 Xcode 项目导航器中选择Runner,然后在设置视图侧边栏中选择Runner目标。
  3. 在“标识”部分中,将版本更新为要发布的用户版本号。
  4. 在“标识”部分中,将版本标识符更新为用于在 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. 或通过运行从命令行上传应用包:

    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

    点击验证应用按钮。如果报告任何问题,请解决这些问题并生成另一个版本。在上传存档之前,你可以重复使用相同的版本 ID。

    在存档成功验证后,点击分发应用

你可以在 App Store Connect 上应用详情页面的活动选项卡中跟踪版本的状态。你应该会在 30 分钟内收到一封电子邮件,通知你版本已通过验证,并且可以向 TestFlight 上的测试人员发布。此时,你可以选择在 TestFlight 上发布,或继续将应用发布到 App Store。

有关更多详细信息,请参阅 将应用上传到 App Store Connect

使用 Codemagic CLI 工具创建版本存档

此步骤涵盖使用 Flutter 构建命令和 Codemagic CLI 工具(在 Flutter 项目目录中的终端中执行)创建版本存档并将版本上传到 App Store Connect。这使你能够完全控制临时钥匙串(与登录钥匙串隔离)中的分发证书,从而创建版本存档。

  1. 安装 Codemagic CLI 工具

    pip3 install codemagic-cli-tools
    
  2. 你需要生成一个 App Store Connect API 密钥,并拥有应用管理器访问权限,以便自动执行 App Store Connect 操作。为了使后续命令更简洁,请从新密钥设置以下环境变量:颁发者 ID、密钥 ID 和 API 密钥文件。

    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 分发证书来对版本存档进行代码签名和打包。

    如果你有现有的 证书,则可以通过为每个证书执行以下命令来导出私钥

    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 ""
    

    稍后,你可以让 CLI 工具自动从私钥创建新的 iOS 分发证书。

  4. 设置一个新的临时钥匙串,用于代码签名

    keychain initialize
    
  5. 从 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 中不存在证书,则会从私钥创建证书。

  6. 现在将获取的证书添加到您的钥匙串

    keychain add-certificates
    
  7. 更新 Xcode 项目设置以使用获取的代码签名配置文件

    xcode-project use-profiles
    
  8. 安装 Flutter 依赖项

    flutter packages pub get
    
  9. 安装 CocoaPods 依赖项

    find . -name "Podfile" -execdir pod install \;
    
  10. 构建 Flutter iOS 项目

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

    请注意,export_options.plistxcode-project use-profiles 命令的输出。

  11. 将应用发布到 App Store Connect

    app-store-connect publish \
        --path $(find $(pwd) -name "*.ipa")
    
  12. 如前所述,不要忘记将您的登录钥匙串设置为默认值,以避免机器上的应用出现身份验证问题

    keychain use-login
    

您应该在 30 分钟内收到一封电子邮件,通知您您的构建已通过验证,并且可以在 TestFlight 上向测试人员发布。此时,您可以选择在 TestFlight 上发布,或继续将您的应用发布到 App Store。

在 TestFlight 上发布您的应用

TestFlight 允许开发者将他们的应用推送到内部和外部测试人员。此可选步骤涵盖在 TestFlight 上发布您的构建。

  1. 导航到 App Store Connect 上应用的应用程序详细信息页面的 TestFlight 选项卡。
  2. 在侧边栏中选择内部测试
  3. 选择要发布给测试人员的构建,然后单击保存
  4. 添加任何内部测试人员的电子邮件地址。您可以在 App Store Connect 的用户和角色页面中添加其他内部用户,该页面可从页面顶部的下拉菜单中获取。

有关更多详细信息,请参阅 使用 TestFlight 分发应用

将您的应用发布到 App Store

当您准备向全世界发布您的应用时,请按照以下步骤提交您的应用以供审核并发布到 App Store

  1. App Store Connect 上应用的应用程序详细信息页面的侧边栏中选择定价和可用性并填写所需信息。
  2. 从侧边栏中选择状态。如果这是此应用程序的第一个版本,其状态为1.0 准备提交。填写所有必填字段。
  3. 点击提交审核

当 Apple 的应用审核流程完成后,会通知您。您的应用将根据您在版本发布部分中指定的说明发布。

有关更多详细信息,请参阅通过 App Store 分发应用

故障排除

分发您的应用指南详细概述了将应用发布到 App Store 的流程。