Flutter中Xcode Build Phases脚本执行报错如何解决?
问题分析
你遇到的错误是因为Widget Extension的Info.plist中缺少CFBundleVersion和CFBundleShortVersionString键,而PlistBuddy的Set命令仅能修改已存在的键,无法创建新键,导致脚本执行失败。
修复脚本
将原脚本替换为以下内容,它会先检查目标键是否存在,存在则更新,不存在则自动添加:
generatedPath="$SRCROOT/Flutter/Generated.xcconfig" versionNumber=$(grep FLUTTER_BUILD_NAME $generatedPath | cut -d '=' -f2) buildNumber=$(grep FLUTTER_BUILD_NUMBER $generatedPath | cut -d '=' -f2) # 处理CFBundleVersion /usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$SRCROOT/WidgetHome/Info.plist" > /dev/null 2>&1 if [ $? -eq 0 ]; then /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/WidgetHome/Info.plist" else /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string $buildNumber" "$SRCROOT/WidgetHome/Info.plist" fi # 处理CFBundleShortVersionString /usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$SRCROOT/WidgetHome/Info.plist" > /dev/null 2>&1 if [ $? -eq 0 ]; then /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $versionNumber" "$SRCROOT/WidgetHome/Info.plist" else /usr/libexec/PlistBuddy -c "Add :CFBundleShortVersionString string $versionNumber" "$SRCROOT/WidgetHome/Info.plist" fi
额外验证步骤
- 确认路径正确性:检查你的Widget Extension目标的
Info.plist是否确实在$SRCROOT/WidgetHome/目录下,若Widget Extension名称不是WidgetHome,需对应修改脚本中的路径。 - 手动检查plist文件:直接打开Widget Extension的
Info.plist,确认是否包含Bundle version(对应CFBundleVersion)和Bundle versions string, short(对应CFBundleShortVersionString)字段。如果没有,也可以手动添加后再运行脚本。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

