Flutter 修改 pubspec.yaml 中的 version 字段后,使用Flutter build ipa,编译后版本号没有跟随变化的解决方法。

如果你的 Flutter iOS 项目没有做特殊设置,但版本号和构建号没有自动同步,很可能是以下原因之一导致的。以下是常见问题的分析和解决方法:

  1. 未正确设置 pubspec.yaml Flutter 依赖 pubspec.yaml 中的 version 来更新 iOS 和 Android 的版本号。

检查:

确保 pubspec.yaml 中包含以下内容:

version: 1.0.0+1 如果未设置:

Flutter 会默认使用 1.0.0 和构建号 1,并且不会自动更新到 iOS 的 Info.plist

解决方法:手动添加 version 字段。

  1. 未运行正确的构建命令 Flutter 仅在运行某些构建命令时,会同步 pubspec.yaml 中的版本号到 iOS 项目。

检查:

确认你使用了以下命令之一:

1
2
3
flutter build ios
flutter build ipa
flutter run

如果只是通过 Xcode 打开项目并直接构建,版本号不会自动同步。

解决方法:使用 Flutter 命令构建项目。例如:

1
flutter build ios
  1. Info.plist 手动覆盖了版本信息 Flutter 的同步机制会更新 iOS 项目中的 Info.plist 文件。如果该文件被手动修改或版本字段被硬编码,Flutter 不会覆盖这些设置。

检查:

打开 ios/Runner/Info.plist,查看以下字段:

1
2
3
4
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>

解决方法:删除硬编码值,让 Flutter 接管管理。

  1. iOS 项目未正确初始化 Flutter 初始化 iOS 项目时,会在 ios/Runner.xcodeproj 中设置 CURRENT_PROJECT_VERSIONMARKETING_VERSION,这些值应与 pubspec.yaml 保持一致。

检查:

打开 ios/Runner.xcodeproj,导航到:

1
2
Build Settings > Versioning > Current Project Version
Build Settings > Marketing Version

解决方法:

Current Project Version 设置为 $(FLUTTER_BUILD_NUMBER)。 将 Marketing Version 设置为 $(FLUTTER_BUILD_NAME)。 5. 未正确配置构建脚本 Flutter 会通过 flutter_tools 自动将版本号写入 iOS 项目。如果 iOS 项目缺少 Flutter 的构建脚本,版本信息无法同步。

检查:

打开 ios/Runner.xcodeproj/project.pbxproj,确认是否存在以下构建脚本:

1
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build

解决方法: 如果脚本缺失:

打开 ios/Runner.xcodeproj。 在 Build Phases > Run Script 中添加以下脚本:

1
/bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
  1. Flutter 和 Xcode 工具版本不兼容 Flutter 和 Xcode 版本可能不一致,导致部分自动化流程失效。

检查:

运行以下命令,检查 Flutter 和 Xcode 的兼容性:

1
flutter doctor

解决方法:

确保 Flutter 和 Xcode 是最新版本。 升级 Flutter 和 iOS 工具链:

1
2
flutter upgrade
sudo xcode-select --switch /Applications/Xcode.app

总结 如果没有特殊设置但版本号无法自动同步,建议按照以下步骤排查:

确保 pubspec.yaml 中正确设置了 version。 使用 flutter build iosflutter build ipa 命令进行构建。 检查 ios/Runner/Info.plistios/Runner.xcodeproj 是否存在手动覆盖或缺少构建脚本的情况。 使用 flutter doctor 检查工具链版本是否正常。 这样可以解决大多数版本同步问题!