Xcode - как изменить целевое членство файла через командную строку?

Есть ли способ изменить целевое членство файла в проекте Xcode через командную строку?

Вот что я пытаюсь сделать через пользовательский интерфейс Xcode:

целевое членство

0 ответов

Я также должен был сделать это для CI. После многих копаний, я не думаю, что это достаточно распространено, чтобы кто-нибудь написал инструмент, который поможет с этим.

Единственный вывод, к которому я пришел, - это редактировать файл project.pbxproj напрямую, что никогда не было хорошим делом. Ни один из инструментов, которые утверждают, что сделали это, не помог, пока я не нашел этот ответ stackru при редактировании файла project.pbxproj. По сути, вы можете конвертировать файл project.pbxproj в формат JSON, используя plutil -convert json project.pbxproj и используйте инструмент манипулирования JSON, чтобы сделать эти файлы заголовками, а затем укажите, что они являются заголовками того объекта, который вам нужен.

При преобразовании project.pbxproj в формат JSON помните, что Xcode больше не сможет показывать вам навигатор проекта для этого проекта. Однако он все равно будет собираться и запускаться, так что это действительно полезно, только если вы планируете сделать это прямо перед сборкой (например, для CI).

Формат project.pbxproj в формате JSON содержит почти все важные данные в разделе "объекты". Файл, которым вы хотите быть заголовком, уже имеет запись, ключом которой является 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, его лучшее, что я смог найти. Если кто-то знает что-то, чем я не являюсь, пожалуйста, дайте мне знать.

Другие вопросы по тегам