构建并发布 macOS 应用

本指南分步介绍了将 Flutter 应用发布到 App Store 的过程。

准备工作

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

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

在 App Store Connect 上注册您的应用

App Store Connect(以前称为 iTunes Connect)上管理应用的生命周期。您可以定义应用名称和说明、添加屏幕截图、设置定价,以及管理 App Store 和 TestFlight 的发布。

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

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

注册包 ID

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

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

查看 Xcode 项目设置

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

在 Xcode 中导航到目标设置

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

验证最重要的设置。

标识部分

应用类别
应用将在 Mac App Store 上列出的应用类别。这不能为无。
包标识符
在 App Store Connect 上注册的应用 ID。

部署信息部分

部署目标
你的应用支持的最低 macOS 版本。Flutter 支持 macOS 10.14 及更高版本。

签名和功能部分

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

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

Xcode Project Settings

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

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

更新应用的版本号

应用的默认版本号为 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 开发者网站上阅读有关 iOS 版本控制的更多信息,网址为核心基础键

添加应用图标

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

  1. 查看 macOS 应用程序图标 指南。
  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 工具(在 Flutter 项目目录的终端中执行)创建构建存档并将构建上传到 App Store Connect。

  1. 安装 Codemagic CLI 工具

    pip3 install codemagic-cli-tools
    
  2. 您需要生成一个 App Store Connect API 密钥,并授予其 App 管理器访问权限,以自动执行 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. 您需要导出或创建一个 Mac App 分发证书和 Mac 安装程序分发证书,以执行代码签名并打包构建存档。

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

    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 工具自动创建新的 Mac App 分发证书和 Mac 安装程序分发证书。您可以为每个新证书使用相同的私钥。

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

    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 分发证书私钥或自动生成新证书的新私钥。

  5. 如果您没有 Mac 安装程序分发证书,您可以通过执行以下操作来创建新证书

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

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

  6. 获取 Mac 安装程序分发证书

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

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

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

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

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

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

    flutter build macos --release
    
  13. 打包应用

    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

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

    keychain use-login
    

在 TestFlight 上发布您的应用

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

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

分发到已注册设备

请参阅 分发指南,以准备一个存档,以便分发到指定的 Mac 电脑。

将您的应用发布到 App Store

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

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

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

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

故障排除

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