Skip to main content

构建和发布 iOS 应用

本指南逐步介绍如何将 Flutter 应用发布到 App StoreTestFlight

预备工作

#

构建和发布应用需要 Xcode。您必须使用运行 macOS 的设备才能遵循本指南。

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

要将您的应用发布到 App Store,您必须首先注册 Apple Developer Program。您可以在 Apple 的 选择会员资格 指南中阅读有关各种会员选项的更多信息。

视频概述

#

对于更喜欢视频而不是文本的用户,以下视频涵盖了与本指南相同的材料。


Release an iOS app built with Flutter in 7 steps

在 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. 输入应用名称,选择 显式 App ID,然后输入 ID。
  4. 选择您的应用使用的服务,然后点击 继续
  5. 在下一页上,确认详细信息,然后点击 注册 以注册您的 Bundle ID。

在 App Store Connect 上创建应用记录

#

在 App Store Connect 上注册您的应用:

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

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

检查 Xcode 项目设置

#

此步骤介绍如何检查 Xcode 工作区中最重要的设置。有关详细步骤和说明,请参阅 准备应用分发

导航到 Xcode 中的目标设置:

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

验证最重要的设置。

常规 选项卡的 标识 部分:

显示名称
应用的显示名称。
Bundle Identifier
您在 App Store Connect 上注册的 App ID。

签名与功能 选项卡中:

自动管理签名
Xcode 是否应自动管理应用签名和配置文件。默认情况下此设置为 true,这对于大多数应用来说应该足够了。对于更复杂的场景,请参阅 代码签名指南
团队
选择与您注册的 Apple Developer 帐户关联的团队。如有必要,请选择 添加帐户...,然后更新此设置。

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

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

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

Xcode 项目设置

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

更新应用的部署版本

#

如果您更改了 Xcode 项目中的 Deployment Target,请打开 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 文件并更新以下行:

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. 或者通过运行以下命令从命令行上传应用包:

    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

    点击 验证应用 按钮。如果报告了任何问题,请解决这些问题并生成另一个构建。您可以重复使用相同的构建 ID,直到您上传存档。

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

您可以在 App Store Connect 上的应用详细信息页面的“活动”选项卡中跟踪构建的状态。您应该会在 30 分钟内收到一封电子邮件,通知您您的构建已验证并可发布给 TestFlight 上的测试人员。此时,您可以选择是否在 TestFlight 上发布,或者继续将您的应用发布到 App Store。

更多详情,请参阅 将应用上传到 App Store Connect

使用 Codemagic CLI 工具创建构建存档

#

此步骤介绍如何使用 Flutter 构建命令和在 Flutter 项目目录的终端中执行的 Codemagic CLI 工具 创建构建存档并将构建上传到 App Store Connect。这使您可以完全控制分发证书在与登录密钥链隔离的临时密钥链中的构建存档。

  1. 安装 Codemagic CLI 工具:

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

    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 分发证书来代码签名和打包构建存档。

    如果您有现有的 证书,您可以导出

    为每个证书执行以下命令以导出私钥:

    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 分发证书。

  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 分发证书私钥或自动生成新证书的新私钥。如果 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. 选择侧边栏中的 内部测试
  3. 选择要发布给测试人员的构建,然后点击 保存
  4. 添加任何内部测试人员的电子邮件地址。您可以在 App Store Connect 的 用户和角色 页面中添加其他内部用户,该页面可从页面顶部的下拉菜单中访问。

更多详情,请参阅 使用 TestFlight 分发应用

将您的应用发布到 App Store

#

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

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

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

更多详情,请参阅 通过 App Store 分发应用

故障排除

#

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