2 在 macOS 电脑上更新 Flutter iOS 应用到 App Store命令行打包 + Xcode Organizer / Transporter 上传

命令行打包 + Xcode Organizer / Transporter 上传

我先帮你把这些命令的关系理清楚,然后给你整理成以后可以直接照抄的版本。


一、你之前这几个命令分别是什么意思?

你贴的命令大概是这些:

cd /Users/peter/code_arvita

xcodebuild \
  -workspace ios/Runner.xcworkspace \
  -scheme Runner \
  -configuration Release \
  -archivePath build/ios/archive/Runner.xcarchive \
  -destination 'generic/platform=iOS' \
  DEVELOPMENT_TEAM=PNK4JN5NFW \
  CODE_SIGN_STYLE=Automatic \
  -allowProvisioningUpdates \
  archive

xcodebuild \
  -exportArchive \
  -archivePath build/ios/archive/Runner.xcarchive \
  -exportPath build/ios/ipa \
  -exportOptionsPlist ios/ExportOptions.plist \
  -allowProvisioningUpdates

flutter build ipa --release --export-options-plist=ios/ExportOptions.plist

open /Users/peter/code_arvita/build/ios/archive/Runner.xcarchive

它们的作用分别是:

命令作用
xcodebuild archive用 Xcode 打 .xcarchive
xcodebuild -exportArchive.xcarchive 导出 .ipa 或直接上传
flutter build ipaFlutter 官方命令,内部会自动帮你做 archive 和 export
open .../Runner.xcarchive打开 Xcode Organizer,然后手动上传到 App Store Connect

二、重点:这些命令其实有重复

你现在其实 不需要同时执行这么多命令

如果你用的是:

flutter build ipa --release --export-options-plist=ios/ExportOptions.plist

它通常已经包含了:

1. 构建 Flutter iOS Release
2. 生成 xcarchive
3. 根据 ExportOptions.plist 导出 ipa 或上传

所以前面的这两个 xcodebuild 命令可以不用每次都跑:

xcodebuild archive
xcodebuild -exportArchive

否则等于重复打包。


三、推荐你以后用这个最简流程

以后更新 App Store,建议你只用这套:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --export-options-plist=ios/ExportOptions.plist

open build/ios/archive/Runner.xcarchive

然后会打开 Xcode Organizer。

在 Organizer 里:

Distribute App

选择:

App Store Connect

再选择:

Upload

一路下一步,上传完成后去 App Store Connect 提交新版本。


四、如果你想在命令里直接指定版本号

每次更新 App Store,必须增加:

Version
Build

例如旧版本是:

1.3.0 (25)

新版本可以是:

1.3.1 (26)

你可以直接改 pubspec.yaml

version: 1.3.1+26

也可以不改文件,直接在命令里指定:

flutter build ipa \
  --release \
  --build-name=1.3.1 \
  --build-number=26 \
  --export-options-plist=ios/ExportOptions.plist

解释:

--build-name=1.3.1   对应 App Store 的 Version
--build-number=26    对应 App Store 的 Build

五、你的 ExportOptions.plist 应该长什么样?

你之前用到了:

--export-options-plist=ios/ExportOptions.plist

这个文件很重要。

如果你是用 自动签名,也就是类似你命令里的:

CODE_SIGN_STYLE=Automatic

那么 ios/ExportOptions.plist 可以这样写:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>

    <key>teamID</key>
    <string>PNK4JN5NFW</string>

    <key>destination</key>
    <string>export</string>

    <key>signingStyle</key>
    <string>automatic</string>

    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>

参数解释

参数含义
method打包方式,上架用 app-store
teamID你的开发者团队 ID
destinationexport 表示导出 .ipaupload 表示直接上传
signingStyleautomatic 表示自动签名
uploadSymbols是否上传 dSYM 符号,建议开启

六、如果你想像以前一样导出 IPA,然后用 Transporter 上传

如果你的 ExportOptions.plist 里是:

<key>destination</key>
<string>export</string>

那么执行:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --export-options-plist=ios/ExportOptions.plist

打包完成后,.ipa 一般在这里:

build/ios/ipa/

你可以打开:

open build/ios/ipa

然后用 Transporter 上传这个 .ipa

Transporter 下载:

https://apps.apple.com/cn/app/transporter/id1450874784

打开后:

登录 Apple ID
选择你的 App
选择 .ipa 文件
上传

上传完成后去 App Store Connect 选择这个 Build。


七、如果你想直接通过命令上传,不手动打开 Organizer

可以把 ExportOptions.plist 改成:

<key>destination</key>
<string>upload</string>

完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>

    <key>teamID</key>
    <string>PNK4JN5NFW</string>

    <key>destination</key>
    <string>upload</string>

    <key>signingStyle</key>
    <string>automatic</string>

    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>

然后执行:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --export-options-plist=ios/ExportOptions.plist

这种方式会尝试直接上传到 App Store Connect。

但是要注意:

  • 你的 macOS 上的 Xcode 需要已经登录有权限的 Apple ID
  • 该账号需要能访问 App Store Connect
  • 有时仍然会弹出认证或需要双重认证

所以我更推荐你用下面这种稳定方式:

destination = export

然后用:

Organizer 上传

或者:

Transporter 上传

八、推荐你保存成固定命令

你可以把下面这段保存成笔记。

日常更新命令

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --export-options-plist=ios/ExportOptions.plist

open build/ios/archive/Runner.xcarchive

执行后:

Organizer 打开
点击 Distribute App
选择 App Store Connect
选择 Upload
上传

如果要指定新版本号

例如这次要发:

1.3.1
Build 26

执行:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --build-name=1.3.1 \
  --build-number=26 \
  --export-options-plist=ios/ExportOptions.plist

open build/ios/archive/Runner.xcarchive

九、如果你习惯用你原来的 xcodebuild 命令,也可以这样整理

你原来的方式可以整理成:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

xcodebuild \
  -workspace ios/Runner.xcworkspace \
  -scheme Runner \
  -configuration Release \
  -archivePath build/ios/archive/Runner.xcarchive \
  -destination 'generic/platform=iOS' \
  DEVELOPMENT_TEAM=PNK4JN5NFW \
  CODE_SIGN_STYLE=Automatic \
  -allowProvisioningUpdates \
  archive

xcodebuild \
  -exportArchive \
  -archivePath build/ios/archive/Runner.xcarchive \
  -exportPath build/ios/ipa \
  -exportOptionsPlist ios/ExportOptions.plist \
  -allowProvisioningUpdates

open build/ios/archive/Runner.xcarchive

这个流程也是可以的。

但如果你用了:

flutter build ipa --release --export-options-plist=ios/ExportOptions.plist

就不需要再手动执行前面两个 xcodebuild 命令。


十、上传后还要去 App Store Connect 操作

上传成功不等于自动提交审核。

你还需要打开:

https://appstoreconnect.apple.com/

进入:

我的 App

选择你的 App。

然后:

iOS App

创建新版本,例如:

1.3.1

在版本页面:

选择构建版本 / Build

选择刚上传的:

1.3.1 (26)

填写:

版本说明 / What's New in This Version

例如:

1. 修复已知问题
2. 优化性能
3. 更新隐私说明

然后:

提交审核

十一、你以后只需要记住这个版本

我建议你以后就用这一套:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --build-name=新版本号 \
  --build-number=新构建号 \
  --export-options-plist=ios/ExportOptions.plist

open build/ios/archive/Runner.xcarchive

例如:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --build-name=1.3.1 \
  --build-number=26 \
  --export-options-plist=ios/ExportOptions.plist

open build/ios/archive/Runner.xcarchive

然后:

Organizer -> Distribute App -> App Store Connect -> Upload

最后:

App Store Connect -> 选择新 Build -> 提交审核

十二、你的 ExportOptions.plist 推荐配置

建议放在:

/Users/peter/code_arvita/ios/ExportOptions.plist

内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>

    <key>teamID</key>
    <string>PNK4JN5NFW</string>

    <key>destination</key>
    <string>export</string>

    <key>signingStyle</key>
    <string>automatic</string>

    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>

这样会导出 .ipa,也方便你以后用 Transporter。


十三、如果你发现 build/ios/ipa 里没有 IPA

检查 ExportOptions.plist 里的:

<key>destination</key>

如果是:

<string>upload</string>

它会直接上传,可能不会给你留下 .ipa

如果你想要 .ipa,改成:

<string>export</string>

十四、常见报错


1. 提示 Build 号已经存在

比如你之前上传过:

1.3.0 (25)

这次不能再用:

1.3.1 (25)

必须改成:

1.3.1 (26)

命令:

--build-number=26

2. App Store Connect 里看不到构建

先等:

10 - 30 分钟

然后检查:

  • 邮箱有没有 Apple 发来的构建失败邮件
  • Build 号是否重复
  • Bundle ID 是否一致
  • 是否上传到正确的 App
  • 是否使用了正确的开发者团队

3. 签名失败

确保你的 ExportOptions.plist 里是:

<key>signingStyle</key>
<string>automatic</string>

并且 Xcode 里登录了开发者账号。

打开:

Xcode -> Settings -> Accounts

确认有你的 Apple ID。


4. 找不到 ios/ExportOptions.plist

确认文件路径:

/Users/peter/code_arvita/ios/ExportOptions.plist

你也可以用命令打开:

open ios/ExportOptions.plist

如果文件不存在,就新建一个。


十五、最终推荐流程

你可以直接照这个做:

cd /Users/peter/code_arvita

flutter clean
flutter pub get

flutter build ipa \
  --release \
  --build-name=1.3.1 \
  --build-number=26 \
  --export-options-plist=ios/ExportOptions.plist

open build/ios/archive/Runner.xcarchive

然后:

Distribute App
App Store Connect
Upload

上传完成后:

App Store Connect
创建新版本
选择新 Build
填写更新说明
提交审核

这就是你之前那套命令的简化版,也是以后最稳的更新方式。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值