You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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项目配置,固定版本号

  1. 打开iOS项目的ios/Runner.xcodeproj
  2. 进入Runner Target的Build Settings
  3. 搜索Versioning相关配置:
    • 设置MARKETING_VERSION为1.2-feature.2
    • 设置CURRENT_PROJECT_VERSION为202312001
  4. 构建时不再传递--build-name和--build-number参数,直接执行:
flutter build ios --no-codesign

若需要动态生成版本号,可在Azure Pipeline中用变量替换Xcode配置文件中的对应值。

内容的提问来源于stack exchange,提问作者Rafał Głębocki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:12:26