我正在尝试使用从 Python 脚本调用的mod_pbxproj.py修改 Unity3D 生成的 Xcode 项目,该脚本由PostProcessBuild属性触发。由于iOS 9中的新警告中描述的问题,我需要设置ENABLE_BITCODE = NO。
我是一名 Python 新手,对 Xcode PBX 内部结构了解不多。我尝试了很多电话,比如
project.add_flags ('ENABLE_BITCODE=NO')
或数组、字典等变体。我尝试的一切要么没有完成工作,要么在系统日志中抛出错误。最后,我在 mod_pbxproj.py 中得到了一个补丁,它可以满足我的要求:
def add_other_buildsetting(self, flag, value):
build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration']
for b in build_configs:
if b.add_other_buildsetting(flag, value):
self.modified = True
和
def add_other_buildsetting(self, flag, value):
modified = False
base = 'buildSettings'
key = flag
if not self.has_key(base):
self[base] = PBXDict()
self[base][key] = value
modified = True
return modified
现在调用project.add_other_buildsetting ('ENABLE_BITCODE', 'NO')
几乎可以按预期工作。我在 pbxproj 文件中有 5 个条目,而不是在 Xcode 中手动设置选项时注意到的 2 个更改。无论如何,它似乎到目前为止工作。
但是:修补一个众所周知的软件感觉很奇怪,我无法相信使用标准 mod_pbxproj.py在buildSettings树的根目录中添加(或修改)选项是不可能的。
如何做到这一点?
编辑: 我的 mod_pbxproj 分支