Xcode - 如何通过命令行更改文件的目标成员资格?

5

你能否通过命令行的方式更改Xcode项目中文件的目标成员身份?

下面是我希望通过Xcode界面完成的操作:

target membership


1
一个有趣的想法... - BonanzaDriver
1个回答

5

我也必须为CI做这个。经过大量挖掘,我认为这不够常见,没有人写工具来帮助做这件事。

我得出的唯一结论是直接编辑project.pbxproj文件,但这绝非明智之举。在找到这个有关编辑project.pbxproj文件的stackoverflow回答之前,声称能够这样做的工具都没有帮助。基本上,您可以使用plutil -convert json project.pbxproj将project.pbxproj文件转换为JSON格式,并使用JSON操作工具将这些文件作为头文件,然后将它们指向您想要的任何目标的头文件。

在将project.pbxproj转换成JSON格式时,请注意Xcode将无法再为该项目显示项目导航器。但是它仍然能够构建和运行,因此只有在计划立即构建(例如用于CI)时才有用。

(编辑:截至2022年7月,Xcode现在可以正确读取其.pbxproj的JSON版本,以使您能够在项目导航器中查看文件。我不确定是哪个版本引入了这一功能,但最新版本的Xcode至少已实现。)

将project.pbxproj格式化为JSON后,几乎所有重要数据都在"objects"键下。您想要成为头文件的文件已经具有一个条目,其键是文件的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的情况下进行这些更改的情况下,这是我能找到的最好方法。如果还有其他人知道比我更好的解决方案,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接