如何实现macos/Runner.xcworkspace版本与构建号自动匹配pubspec.yaml?
自动同步Flutter pubspec.yaml与macOS Runner版本号、构建号的方法
方法1:构建时通过Flutter命令自动传入参数
直接在构建macOS应用时,从pubspec.yaml提取版本号和构建号,通过命令行参数传递给构建命令:
flutter build macos --build-name=$(grep 'version:' pubspec.yaml | cut -d ' ' -f 2 | cut -d '+' -f 1) --build-number=$(grep 'version:' pubspec.yaml | cut -d '+' -f 2)
这个命令会自动读取pubspec.yaml中version字段的内容(格式如x.y.z+b),拆分出版本号(x.y.z)和构建号(b),同步到macOS项目的配置中。
方法2:自定义Shell脚本快速同步
如果需要频繁手动同步,可在项目根目录创建一个同步脚本:
- 创建
sync_version.sh文件,写入以下内容:
#!/bin/bash # 提取pubspec.yaml中的版本信息 VERSION_NAME=$(grep 'version:' pubspec.yaml | awk -F ' ' '{print $2}' | awk -F '+' '{print $1}') VERSION_CODE=$(grep 'version:' pubspec.yaml | awk -F '+' '{print $2}') # 同步到macOS项目的Info.plist PLIST_PATH="macos/Runner/Info.plist" /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION_NAME" $PLIST_PATH /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $VERSION_CODE" $PLIST_PATH echo "已同步版本号: $VERSION_NAME,构建号: $VERSION_CODE 到macOS项目"
- 给脚本添加执行权限:
chmod +x sync_version.sh
- 运行脚本完成同步:
./sync_version.sh
方法3:Xcode构建时自动触发同步
配置Xcode在每次构建前自动同步版本信息:
- 打开
macos/Runner.xcworkspace,选中Runner target,进入「Build Phases」标签页 - 点击左上角「+」按钮,选择「New Run Script Phase」
- 在脚本输入框中添加以下内容:
# 从pubspec.yaml提取版本信息 VERSION_NAME=$(grep 'version:' "${SRCROOT}/../pubspec.yaml" | awk -F ' ' '{print $2}' | awk -F '+' '{print $1}') VERSION_CODE=$(grep 'version:' "${SRCROOT}/../pubspec.yaml" | awk -F '+' '{print $2}') # 更新Info.plist中的版本号和构建号 /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION_NAME" "${SRCROOT}/Runner/Info.plist" /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $VERSION_CODE" "${SRCROOT}/Runner/Info.plist"
- 将这个Run Script Phase拖动到「Dependencies」阶段之后,确保构建前先执行同步操作。
内容的提问来源于stack exchange,提问作者Fractale
相关产品推荐
相关产品推荐

