跳至主要内容

构建和发布 macOS 应用

本指南提供了一个分步指南,介绍如何将 Flutter 应用发布到 App Store

准备工作

#

在开始发布应用流程之前,请确保您的应用符合 Apple 的 App Review Guidelines

为了将您的应用发布到 App Store,您必须首先加入 Apple Developer Program。您可以在 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

#

每个 macOS 应用程序都与一个 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. 在出现的表单中填写您的应用详细信息。在“平台”部分,确保选中 macOS。由于 Flutter 目前不支持 tvOS,请勿选中该复选框。点击创建
  5. 导航到您的应用的应用详细信息,并从侧边栏中选择应用信息
  6. 在“常规信息”部分,选择您在上一步中注册的 Bundle ID。

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

检查 Xcode 项目设置

#

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

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

  1. 在 Xcode 中,打开应用的 macos 文件夹中的 Runner.xcworkspace
  2. 要查看您的应用设置,请在 Xcode 项目导航器中选择Runner 项目。然后,在主视图侧边栏中,选择Runner 目标。
  3. 选择常规选项卡。

验证最重要的设置。

标识部分

应用类别
您的应用将在 Mac App Store 上列出的应用类别。这不能为“无”。
Bundle ID
您在 App Store Connect 上注册的 App ID。

部署信息部分

部署目标
您的应用支持的最低 macOS 版本。Flutter 支持将应用部署到 macOS 10.14(Mojave)及更高版本。

签名与功能部分

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

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

Xcode Project Settings

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

#

产品标识符的配置集中在 macos/Runner/Configs/AppInfo.xcconfig 中。对于应用名称,设置 PRODUCT_NAME,对于版权信息,设置 PRODUCT_COPYRIGHT,最后设置 PRODUCT_BUNDLE_IDENTIFIER 作为应用的 Bundle ID。

更新应用版本号

#

应用的默认版本号为 1.0.0。要更新它,请导航到 pubspec.yaml 文件并更新以下行

version: 1.0.0+1

版本号由三个用点分隔的数字组成,例如上面示例中的 1.0.0,后跟一个可选的构建编号,例如上面示例中的 1,用 + 分隔。

版本和构建编号都可以在 Flutter 的构建中通过分别指定 --build-name--build-number 来覆盖。

在 macOS 中,build-name 使用 CFBundleShortVersionString,而 build-number 使用 CFBundleVersion。在 Apple 开发者网站上的 Core Foundation Keys 中阅读有关 iOS 版本控制的更多信息。

添加应用图标

#

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

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

使用 Xcode 创建构建归档文件

#

此步骤介绍了如何使用 Xcode 创建构建归档文件并将构建上传到 App Store Connect。

在开发过程中,您一直在使用调试构建进行构建、调试和测试。当您准备好将应用发布到 App Store 或 TestFlight 上的用户时,您需要准备一个发布构建。此时,您可能会考虑 混淆您的 Dart 代码 以使其更难以进行反向工程。混淆代码涉及向构建命令添加几个标志。

在 Xcode 中,配置应用版本和构建

  1. 打开应用的 macos 文件夹中的 Runner.xcworkspace。要从命令行执行此操作,请从您的应用程序项目的基目录运行以下命令。
    open macos/Runner.xcworkspace
  2. 在 Xcode 项目导航器中选择Runner,然后在设置视图侧边栏中选择Runner 目标。
  3. 在“标识”部分,将版本更新为您要发布的用户界面版本号。
  4. 在“标识”部分,将构建标识符更新为用于在 App Store Connect 上跟踪此构建的唯一构建编号。每次上传都需要一个唯一的构建编号。

最后,创建一个构建归档文件并将其上传到 App Store Connect

  1. 创建应用程序的发布归档文件。从应用程序项目的基目录运行以下命令。
    flutter build macos
  2. 打开 Xcode 并选择产品 > 归档以打开上一步中创建的归档文件。
  3. 点击验证应用按钮。如果报告了任何问题,请解决这些问题并生成另一个构建。您可以重复使用相同的构建 ID,直到您上传归档文件。
  4. 归档文件成功验证后,点击分发应用。您可以在 App Store Connect 上的应用详细信息页面的“活动”选项卡中跟踪构建的状态。

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

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

使用 Codemagic CLI 工具创建构建归档文件

#

此步骤介绍了如何使用 Flutter 构建命令和 Codemagic CLI Tools 在 Flutter 项目目录的终端中执行,创建构建归档文件并将构建上传到 App Store Connect。

  1. 安装 Codemagic CLI 工具

    bash
    pip3 install codemagic-cli-tools
  2. 您需要使用 App Manager 访问权限生成一个 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. 您需要导出或创建一个 Mac App Distribution 和 Mac Installer Distribution 证书来执行代码签名和打包构建归档文件。

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

    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 工具自动创建一个新的 Mac App Distribution 和 Mac Installer Distribution 证书。您可以对每个新证书使用相同的私钥。

  4. 从 App Store Connect 获取代码签名文件

    bash
    app-store-connect fetch-signing-files YOUR.APP.BUNDLE_ID \
        --platform MAC_OS \
        --type MAC_APP_STORE \
        --certificate-key=@file:/path/to/cert_key \
        --create

    其中 cert_key 是您导出的 Mac App Distribution 证书私钥或自动生成新证书的新私钥。

  5. 如果您没有 Mac Installer Distribution 证书,您可以通过执行以下操作创建一个新证书

    bash
    app-store-connect certificates create \
        --type MAC_INSTALLER_DISTRIBUTION \
        --certificate-key=@file:/path/to/cert_key \
        --save

    使用您之前创建的私钥的 cert_key

  6. 获取 Mac Installer Distribution 证书

    bash
    app-store-connect certificates list \
        --type MAC_INSTALLER_DISTRIBUTION \
        --certificate-key=@file:/path/to/cert_key \
        --save
  7. 设置一个新的临时密钥链,用于代码签名

    bash
    keychain initialize
  8. 现在将获取的证书添加到您的密钥链中

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

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

    bash
    flutter packages pub get
  11. 安装 CocoaPods 依赖项

    bash
    find . -name "Podfile" -execdir pod install \;
  12. 构建 Flutter macOS 项目

    bash
    flutter build macos --release
  13. 打包应用程序

    bash
    APP_NAME=$(find $(pwd) -name "*.app")
    PACKAGE_NAME=$(basename "$APP_NAME" .app).pkg
    xcrun productbuild --component "$APP_NAME" /Applications/ unsigned.pkg
    
    INSTALLER_CERT_NAME=$(keychain list-certificates \
              | jq '[.[]
                | select(.common_name
                | contains("Mac Developer Installer"))
                | .common_name][0]' \
              | xargs)
    xcrun productsign --sign "$INSTALLER_CERT_NAME" unsigned.pkg "$PACKAGE_NAME"
    rm -f unsigned.pkg
  14. 将打包的应用程序发布到 App Store Connect

    bash
    app-store-connect publish \
        --path "$PACKAGE_NAME"
  15. 如前所述,请勿忘记将您的登录密钥链设置为默认密钥链,以避免机器上应用程序可能出现的身份验证问题

    bash
    keychain use-login

在 TestFlight 上发布您的应用

#

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

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

分发到已注册的设备

#

请参阅 分发指南,以准备用于分发到指定 Mac 计算机的归档文件。

将您的应用发布到 App Store

#

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

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

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

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

疑难解答

#

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

其他资源

#

要了解如何以开源方式打包和分发您的 Flutter 桌面应用以供 macOS 使用,而无需使用付费的 Apple 开发者帐户,请查看分步的 macOS 打包指南