Ruby изменить проект.pbxproj
Я делаю сценарий, который автоматически изменяет проект iOS с помощью ruby. После добавления некоторых файлов мне нужно изменить файл project.pbxproj, чтобы сохранить изменения в проекте.
Я нашел метод для анализа файла pbxproj в json:
json = JSON.parse(`plutil -convert json -o - "#{filename}"`)
Но после изменения json я хотел бы вернуться к процессу, чтобы сохранить изменения в формате pbxproj. Кто-нибудь знает, как это сделать?
1 ответ
Кажется, что нет способа напрямую преобразовать JSON обратно в формат файла pbxproj, но Xcode будет читать xml1
отформатированные данные в качестве допустимого файла проекта.
Вдохновленный принятым ответом на Библиотеку для чтения / записи файлов pbxproj/xcodeproj? Я решил попробовать запустить Xcode с преобразованным JSON проекта. Xcode дал мне сообщение о том, что проект недействителен. Когда я преобразовал JSON в XML, используя plutil
Xcode прочитал это просто отлично. Когда я посмотрел содержимое файла, я увидел, что он остался в XML, когда XCode загрузил его, но в тот момент, когда я изменил любое значение в XCode, он переписал файл, используя формат pbxproj. Казалось, что он переставил порядок фреймворков и библиотек, но это может быть потому, что исходный pbxproj, с которым я имел дело, был сгенерирован Unity3D.
Вот грубый рецепт того, как автоматически конвертировать, манипулировать и впоследствии использовать файл pbxproj:
#!/bin/sh
plutil -convert json -r -o project.json -- project.pbxproj
ruby my_script.rb < project.json > project-modified.json
plutil -convert xml1 -o project-modified.xml -- project-modified.json
cp project-modified.xml project.pbxproj
Я не знаю, есть ли легко-автоматизируемый способ заставить XCode вернуть измененный файл в его первоначальный формат, но это должно быть хорошо, чтобы вызвать xcodebuild
или же xcrun
пока файл в формате XML.