【问题标题】:Xcode - how to change file's target membership via command line?Xcode - 如何通过命令行更改文件的目标成员资格?
【发布时间】:2019-03-27 15:16:09
【问题描述】:

有没有办法通过命令行在 Xcode 项目中更改文件的目标成员资格?

这是我试图通过 Xcode 的 UI 执行的操作:

【问题讨论】:

  • 一个有趣的想法...

标签: objective-c xcode cocoa cocoa-touch xcode-command-line-tools


【解决方案1】:

我也必须为 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 几乎包含“objects”键下的所有重要数据。您想成为标题的文件已经有一个条目,其键为 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 的情况下进行这些更改,否则它是我能找到的最好的。如果其他人知道我不知道的事情,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2013-05-22
    • 2016-09-02
    • 2011-03-15
    相关资源
    最近更新 更多