有没有办法通过命令行更改 Xcode 项目中文件的目标成员资格?
这是我试图通过 Xcode 的 UI 做的事情:
我也必须为 CI 做这个。经过大量挖掘,我认为这对于任何人来说都不足以编写一个工具来帮助完成。
我得出的唯一结论是直接编辑 project.pbxproj 文件,这绝不是一件好事。直到我在编辑 project.pbxproj 文件时找到这个 stackoverflow 答案之前,声称这样做的工具都没有任何帮助。本质上,您可以将 project.pbxproj 文件转换为 JSON 格式,plutil -convert json project.pbxproj
并使用 JSON 操作工具将这些文件作为标头,然后将它们指向您想要的任何目标的标头。
将 project.pbxproj 转换为 JSON 格式时,请注意 Xcode 将不再能够向您显示该项目的项目导航器。但是,它仍会构建和运行,因此只有在您计划在构建之前执行此操作(例如 CI)时,它才真正有用。
格式为 JSON 的 project.pbxproj 几乎包含“对象”键下的所有重要数据。您希望作为标头的文件已经有一个条目,其中键是文件的 UUID,还有一个路径值,您可以使用该值将 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 的情况下进行这些更改,否则它是我能找到的最好的。如果其他人知道我不知道的事情,请告诉我。