我也不得不为CI做这件事。经过大量的挖掘,我不相信这对任何人来说都是非常普遍的,因为他们已经编写了一个工具来帮助他们做。
我得出的唯一结论是直接编辑project.pbxproj文件,这绝不是一件好事。在我找到this stackoverflow answer on editing the project.pbxproj file之前,没有任何声称这样做的工具有任何帮助。基本上,您可以使用plutil -convert json project.pbxproj
将project.pbxproj文件转换为JSON格式,并使用JSON操作工具将这些文件作为标题,然后将它们指向您想要的任何目标的标题。
将project.pbxproj转换为JSON格式时,请注意Xcode将无法再向您显示该项目的项目导航器。但是,它仍然会构建和运行,所以只有在计划在构建之前(例如CI)执行此操作时,这才真正有用。
作为JSON的格式project.pbxproj几乎具有“对象”键下的所有重要数据。您想要成为标题的文件已经有一个条目,其中键为the UUID for the file,以及可用于将UUID与文件相关联的路径值。以下是该格式的示例:
// UUID for your file
"65TYSSDXHSLP4UUOAD9D40C322AAGHM9": {
"path": "MyHeader.h", // Your file's name
"isa": "PBXFileReference",
"includeInIndex": "1",
"lastKnownFileType": "sourcecode.c.h",
"sourceTree": "<group>"
}
还有另一个条目将此文件声明为标头,它具有自己的UUID和对文件的UUID的引用:
// UUID for your file as a header
"YU3BSD39O9PT5RESDFV741D1": {
"isa": "PBXBuildFile",
"fileRef": "65TYSSDXHSLP4UUOAD9D40C322AAGHM9", // UUID for your file MyHeader.h
"settings": {
"ATTRIBUTES": [
"Public" // could also be Project or Private
]
}
}
最后,您的目标有一个头文件列表,您需要UUID作为头引用。
"A82GAE9A5HUIO063IOPQAAQIUFGSNXZ": {
"isa": "PBXHeadersBuildPhase",
"buildActionMask": "2147483647",
"files": [
"YU3BSD39O9PT5RESDFV741D1" // UUID for your file as a header
],
"runOnlyForDeploymentPostprocessing": "0"
}
再次,直接更改project.pbxproj文件绝不是一个好主意,但是直到有一个更好的工具来进行这些更改而不使用Xcode,它是我能找到的最好的。如果其他人知道我不是的话,请告诉我。