Flutter iOS包语义化版本设置异常问题求助
解决Flutter iOS构建版本号被自动清理的问题
问题根源
Apple对iOS应用的CFBundleShortVersionString(对应Flutter的--build-name)有格式限制,默认仅允许数字和点分隔的结构。Flutter的flutter build ios命令会自动清理--build-name中的非数字/点字符,导致1.2-feature.2被转成1.2.2。
解决方案
方案1:构建后手动修改Info.plist
在Flutter构建完成后,用系统工具PlistBuddy直接修改iOS项目的Info.plist,强制设置目标版本号:
# 执行Flutter构建(无需传递--build-name,避免自动处理) flutter build ios --build-number "202312001" --no-codesign # 进入iOS项目目录 cd ios # 修改CFBundleShortVersionString为目标值 /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString '1.2-feature.2'" Runner/Info.plist
之后再执行Xcode打包或上传到App Center的步骤。
方案2:跳过Flutter版本设置,直接用xcodebuild指定版本
完全绕过Flutter的版本号自动处理逻辑,直接通过xcodebuild命令指定版本参数:
# 仅编译Flutter代码,不处理版本号和签名 flutter build ios --no-codesign # 用xcodebuild打包,直接指定版本号 xcodebuild archive \ -workspace ios/Runner.xcworkspace \ -scheme Runner \ -configuration Release \ -archivePath build/Runner.xcarchive \ CURRENT_PROJECT_VERSION="202312001" \ MARKETING_VERSION="1.2-feature.2"
CURRENT_PROJECT_VERSION对应Flutter的--build-number(即CFBundleVersion)MARKETING_VERSION对应CFBundleShortVersionString(即你需要的带特性标识的版本号)
方案3:修改Xcode项目配置,固定版本号
- 打开iOS项目的
ios/Runner.xcodeproj - 进入
RunnerTarget的Build Settings - 搜索
Versioning相关配置:- 设置
MARKETING_VERSION为1.2-feature.2 - 设置
CURRENT_PROJECT_VERSION为202312001
- 设置
- 构建时不再传递
--build-name和--build-number参数,直接执行:
flutter build ios --no-codesign
若需要动态生成版本号,可在Azure Pipeline中用变量替换Xcode配置文件中的对应值。
内容的提问来源于stack exchange,提问作者Rafał Głębocki
相关产品推荐
相关产品推荐

