Xcode Scheme版本不一致:脚本与GUI生成版本差异排查
解决Xcodeproj脚本生成iOS Scheme版本过低、缺失属性的问题
问题分析
Xcode GUI创建的Scheme版本为1.7(对应LastUpgradeVersion="1430"),包含<MacroExpansion>等完整属性;但通过Xcodeproj脚本生成的Scheme默认是1.3版本(LastUpgradeVersion="1300"),且缺失关键属性,直接设置scheme.last_upgrade_version和scheme.version无法解决。
解决方案
1. 升级Xcodeproj gem到最新版本
旧版Xcodeproj可能未支持高版本Scheme的属性定义,先升级到最新版:
gem update xcodeproj
2. 在脚本中完善Scheme配置
除了设置版本号,还需指定macro_expansion_target来生成<MacroExpansion>节点,示例Ruby代码:
require 'xcodeproj' # 加载项目 project_path = './YourProject.xcodeproj' project = Xcodeproj::Project.open(project_path) target = project.targets.first # 替换为你的目标Target # 创建Scheme scheme = project.new_scheme(target.name) # 设置版本相关属性 scheme.last_upgrade_version = "1430" scheme.version = "1.7" # 关键:指定MacroExpansion关联的Target scheme.macro_expansion_target = target # 保存Scheme scheme.save
3. 手动修正生成后的Scheme文件(兜底方案)
如果上述方法仍不生效,可直接修改生成的.xcscheme文件:
- 找到Scheme文件路径:
./xcuserdata/{你的用户名}.xcuserdatad/xcschemes/{你的Scheme名}.xcscheme - 用
PlistBuddy命令修改属性:
# 设置LastUpgradeVersion /usr/libexec/PlistBuddy -c "Set :LastUpgradeVersion 1430" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme # 添加MacroExpansion节点(需替换对应Target的UUID、名称等信息) /usr/libexec/PlistBuddy -c "Add :BuildAction:MacroExpansion dict" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme /usr/libexec/PlistBuddy -c "Add :BuildAction:MacroExpansion:BuildableReference dict" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme /usr/libexec/PlistBuddy -c "Set :BuildAction:MacroExpansion:BuildableReference:BuildableIdentifier primary" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme /usr/libexec/PlistBuddy -c "Set :BuildAction:MacroExpansion:BuildableReference:BlueprintIdentifier [TARGET_UUID]" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme /usr/libexec/PlistBuddy -c "Set :BuildAction:MacroExpansion:BuildableReference:BlueprintName [TARGET_NAME]" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme /usr/libexec/PlistBuddy -c "Set :BuildAction:MacroExpansion:BuildableReference:ContainerIdentifier container:YourProject.xcodeproj" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme /usr/libexec/PlistBuddy -c "Set :BuildAction:MacroExpansion:BuildableReference:BuildableName [PRODUCT_NAME]" ./xcuserdata/your_user.xcuserdatad/xcschemes/YourScheme.xcscheme
验证
修改后重新打开Xcode,检查Scheme的配置文件,确认LastUpgradeVersion为1430且<MacroExpansion>节点存在。
内容的提问来源于stack exchange,提问作者MetaSnarf
相关产品推荐
相关产品推荐

