codecamp

Flutter iOS构建发布

准备

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

为了将您的应用发布到App Store,您需要注册Apple开发者计划。您可以在Apple的Choosing a Membership中阅读更多关于各种会员选项的信息。

在iTunes Connect上注册您的应用程序

iTunes Connect是您管理应用程序生命周期的地方。您将定义您的应用程序名称和说明,添加屏幕截图,设置价格并管理版本到App Store和TestFlight。

注册您的应用程序涉及两个步骤:注册唯一的Bundle ID,并在iTunes Connect上创建应用程序记录。

有关iTunes Connect的详细概述,请参阅iTunes Connect开发者指南

注册一个 Bundle ID

每个iOS应用程序都与一个Bundle ID关联,这是一个在Apple注册的唯一标识符。要为您的应用注册一个Bundle ID,请按照以下步骤操作:

  1. 打开开发者帐户的App IDs页.
  2. 点击 + 创建一个 Bundle ID.
  3. 输入应用程序名称, 选择 Explicit App ID, 然后输入一个 ID.
  4. 选择您的应用将使用的服务,然后点击”Continue”
  5. 在下一页中,确认详细信息,然后点击 Register 注册你的Bundle ID

在iTunes Connect上创建应用程序记录

接下来,您将在iTunes Connect上注册您的应用程序:

  1. 在浏览器中打开iTunes Connect.
  2. 在iTunes Connect登陆页上, 点击 My Apps.
  3. 点击My App页面左上角的 + ,然后选择New App.
  4. 填写您的应用详细信息。在Platforms部分中,确保已选中iOS。由于Flutter目前不支持tvOS,请不要选中该复选框。点击Create
  5. 导航到您app的应用程序详细信息,App Information 。
  6. 在 General Information 部分, 选择您在上一步中注册的软件包ID。

有关详细的概述,请参阅 Creating an iTunes Connect Record for an App.

查看Xcode项目设置

在这一步中,您将回顾Xcode工作区中最重要的设置。有关详细的过程和说明,请参阅Configuring Your Xcode Project for Distribution]distributionguide_config

在Xcode中导航到您的target设置:

  1. 在Xcode中, 在你的工程目录中的ios文件夹下打开Runner.xcworkspace.
  2. 要查看您的应用程序的设置,请在Xcode项目导航器中选择Runner项目。然后,在主视图边栏中,选择Runnertarget
  3. 选择 General 选项卡.

接下来,您将验证最重要的设置:

在 Identity 部分:

  • Display Name: 要在主屏幕和其他地方显示的应用程序的名称
  • Bundle Identifier: 您在iTunes Connect上注册的App ID.

在 Signing 部分:

  • Automatically manage signing: Xcode是否应该自动管理应用程序签名和生成。默认设置为true,对大多数应用程序来说应该足够了。对于更复杂的场景,请参阅Code Signing Guide
  • Team: 选择与您注册的Apple Developer帐户关联的团队。如果需要,请选择Add Account…,然后更新此设置

在 Deployment Info 部分:

  • Deployment Target: 您的应用将支持的最低iOS版本。Flutter支持iOS 8.0及更高版本。如果您的应用程序包含使用iOS 8中不可用的API的Objective-C或Swift代码,请适当更新此设置。

项目设置的General选项卡应该类似于以下内容:

Xcode Project Settings

有关应用程序签名的详细概述,请参阅 Certificates]appsigning.

添加应用程序图标

当创建新的Flutter应用程序时,会创建一个占位图标集。在这一步中,您将用应用图标替换这些占位图标:

  1. 查看iOS App Icon 指南.
  2. 在Xcode项目导航器中,在Runner文件夹中选择Assets.xcassets。使用您自己的应用程序图标更换占位图标
  3. 运行flutter run, 验证应用图标已被替换

创建一个构建档案

在这一步中,您将创建一个构建档案并将您的构建上传到iTunes Connect:

在开发过程中,您一直在构建、调试、测试debug版本。当您准备将应用发布到App Store或TestFlight上时,您需要准备release 版本:

在命令行上,在您的应用程序目录中执行以下步骤:

  1. 运行flutter build ios以创建release版本(flutter build默认为--release)
  2. 为确保Xcode刷新release模式配置,关闭并重新打开Xcode workspace。对于Xcode 8.3和更高版本,这一步不是必需的

在Xcode中,配置应用程序版本并构建:

  1. 在Xcode中,在您工程目录下的ios文件夹中打开Runner.xcworkspace.
  2. 选择 Product > Scheme > Runner.
  3. 选择 Product > Destination > Generic iOS Device.
  4. 在Xcode项目导航器中选择 Runner , 然后在设置视图边栏中选择选择 Runner target .
  5. 在Identity部分中,将Version更新为您希望发布的面向用户的版本号
  6. 在Identity部分中,将Build标识更新为用于跟踪iTunes Connect上的此版本的唯一版本号。每次上传都需要一个唯一的build号

最后,创建一个构建档案并将其上传到iTunes Connect:

  1. 选择 Product > Archive 以生成构建档案.
  2. 在Xcode Organizer窗口的边栏中,选择您的iOS应用程序,然后选择您刚刚生成的build档案
  3. 点击Validate… 按钮. 如果报错,请解决它们并生成另一个build。您可以重复使用相同的build ID,直到您上传档案
  4. 档案已成功验证后,单击Upload to App Store…,您可以在iTunes Connect的应用详情也的“Activities”选项卡中查看构建状态

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

有关更多详细信息,请参阅 Uploading Your App to iTunes Connect.

在TestFlight上发布您的应用程序

TestFlight许开发人员将他们的应用程序推送给内部和外部测试人员。在这个可选步骤中,您将在TestFlight上发布build:

  1. iTunes Connect上导航到应用程序详细信息页面的TestFlight选项卡
  2. 在侧边栏选择 Internal Testing.
  3. 选择要发布到测试人员的build,然后单击 Save.
  4. 加任何内部测试人员的电子邮件地址。您可以在iTunes Connect的用户和角色页面添加更多的内部用户,可从页面顶部的下拉菜单中获得.

有关更多详细信息,请参阅 Distributing Your App Using TestFlight.

将您的应用发布到App Store

当您准备将应用发布到全世界时,请按照以下步骤将您的应用提交给App Store进行审查和发布:

  1. 从iTunes应用程序的应用程序详情页的边栏中选择Pricing and Availability,然后填写所需的信息。
  2. 从边栏选择状态。如果这是该应用的第一个版本,则其状态将为1.0 Prepare for Submission。完成所有必填字段
  3. 点击 Submit for Review.

Apple会在应用程序审查过程完成时通知您。您的应用将根据您在Version Release部分指定的说明进行发布:

有关更多详细信息,请参阅将 Submitting Your App to the Store.

故障排除

App Distribution Guide提供了发布应用程序到App Store的详细介绍。它包含一个Troubleshooting guide,其中包含针对应用程序分发常见问题的解决方案。

Flutter Android构建发布
升级安装的Flutter
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }