目标:将 Flutter App 发布到 App Store 和 TestFlight
准备工作:
1. 一个苹果开发者账号
2. 装有 Xcode 的 mac 电脑
3. 一个 Flutter App 工程
注册一个 Bundle ID
每一个 iOS 应用都与一个在 Apple 登记的唯一的 Bundle ID 关联
- 登录你的开发者号打开 App IDs 页面
- 点击 + 来创建一个新的 Bundle ID
- 选择 App IDs, 点击 continue
- 填写 Bundle ID 和描述
- 点击 Continue, 在下一页点击注册,完成!
在 App Store Connect 上注册你的 App
- 登录你的开发者账号会看到如下界面:
- 点击 + 新建 App
sku 是你的 app 在 App Store 里的唯一标识,一般推荐直接使用 Bundle ID
- 上传 app 图标,并存储
检查 Xcode 项目设置
- 在 Xcode 中,打开你的 App 的 ios 目录中的 Runner.xcworkspace
- 想要看你的 app 设置,在 Xcode 的项目导航栏中选择 Runner
- 选择 General tab
Identity
Display Name
Bundle Identifier
Runner
注意
Flutter 1.18.0-10.0.pre 之前的版本只能将显示名称设定为 Runner,不能命名为其他名字。有关更多信息,请参见 Issue 41793。
Signing & Capabilities
Automatically
Team
勾选 Automatically manage signing。
Automatically manage signing 是否需要 Xcode 自动管理 app 签名和设置。这个默认被设置为 true ,对于绝大多数 App 来说都是适用的。对于更复杂的场景,查看 代码签名指南
你项目的 General tab 应该看起来像是这样的:
更改应用名称
为了避免上传到 App Store coonect 后被驳回,请在 Info.plist 添加如下内容
<key>NSAppleMusicUsageDescription</key>
<string>App需要您的同意,才能访问媒体资料库</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要您的同意,才能访问蓝牙</string>
<key>NSCalendarsUsageDescription</key>
<string>App需要您的同意,才能访问日历</string>
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>
<key>NSContactsUsageDescription</key>
<string>App需要您的同意,才能访问通讯录</string>
<key>NSHealthShareUsageDescription</key>
<string>App需要您的同意,才能访问健康分享</string>
<key>NSHealthUpdateUsageDescription</key>
<string>App需要您的同意,才能访问健康更新 </string>
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要您的同意,才能始终访问位置</string>
<key>NSLocationUsageDescription</key>
<string>App需要您的同意,才能访问位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要您的同意,才能在使用期间访问位置</string>
<key>NSMicrophoneUsageDescription</key>
<string>App需要您的同意,才能访问麦克风</string>
<key>NSMotionUsageDescription</key>
<string>App需要您的同意,才能访问运动与健身</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<key>NSRemindersUsageDescription</key>
<string>App需要您的同意,才能访问提醒事项</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>App需要您的同意,才能访问语音识别</string>
<key>kTCCServiceMediaLibrary</key>
<string>App需要您的同意,才能访问音乐</string>
提示
Infoo.plist 还需添加一项,如图,否则上传上传到 App Store 里的构建版本会显示 缺少合规证明
更新应用版本号
每个应用默认的初始版本号是 1.0.0。若要更新它,请转到 pubspec.yaml 文件并更新以下内容:
version: 1.0.0+1
版本号由三个点分隔的数字组成,例如上面样例中的 1.0.0。然后是可选的构建号,例如上面样例中的 1,以 + 分隔。
版本号与构建号都可以在 Flutter 打包时分别使用 --build-name 和 --build-number 重新指定
添加应用图标
让 UI 切一张(1024x1024)的图片
打开这个网址:一键生成所有尺寸的应用图标 。上传准备好的 1024x1024 的图片,选择你所需要的平台。生成即可。
生成下载好后替换掉 Runner/Assets.xcassets 下的所有文件
替换后应该是这样的效果:
可以运行下 Flutter App 来验证你的图标是否已经被替换
创建一个构建归档 (build archive)
在这一步,你将创建一个构建归档,并上传到 App Store Connect。
在开发过程中,你将会使用 debug 模式来完成构建、调试并测试。当你准备好通过 App Store 或 TestFlight 交付你的 app 给用户时,你需要准备一个 release 构建。这时你也许想要混淆你的 Dart 代码以加大反编译难度。混淆你的代码需要在 build 的时候添加一些标志,并维护其他文件以消除反编译的堆栈跟踪。
- 在你的 Flutter App 应用目录的命令行中执行
flutter build ios
(flutter build 默认指向 --release) - 在 Xcode 中,打开你应用 ios 目录中的 Runner.xcworkspace
- 选择 Product > Scheme > Runner
- 选择 Product > Destination > Generic iOS Device
- 在 Xcode 项目导航栏中选择 Runner,然后在设置界面侧边栏选择 Runner 目标。
- 在 Identity 部分,更新 Version 为你想要发布的用户可见的版本号。
- 在 Identity 部分,更新 Build 标示为一个唯一的 Build 数字,用来在 App Store Connect 上追踪。每一个上传都需要一个独立的 Build 数字。
- 选择 Product > Archive 来生成一个构建归档
- 选择你刚刚的生成的构建归档,点击 Validate App
直接下一步下一步...
- 当这个归档校验成功以后,点击 Distribute App
直接下一步下一步...
上传成功后,你会在 30 分钟内收到一封信来提醒你
发布你的 app 到 TestFlight
- 在 App Store Connect 中,你的应用的详情页面跳转到 TestFlight Tab
为每一个内部测试人员添加邮件。你可以在 App Store Connect 的用户与角色页面添加额外的内部用户,他们将会出现在页面顶部的下拉菜单中