2012-10-11 12 views
5

Robię skrypt, który automatycznie modyfikuje projekt iOS za pomocą ruby. Po dodaniu niektórych plików potrzebuję zmodyfikować plik project.pbxproj, aby zapisać zmiany w projekcie.Ruby Modyfikuj project.pbxproj

mam znaleźć sposób, aby przeanalizować pliku pbxproj do json:

json = JSON.parse(`plutil -convert json -o - "#{filename}"`) 

Ale po zmodyfikowaniu json, chciałbym przywrócić proces, aby zapisać zmiany w formacie pbxproj. Czy ktoś wie, jak to zrobić?

Odpowiedz

1

Nie ma sposobu na bezpośrednią konwersję JSON z powrotem do formatu pliku pbxproj, ale Xcode odczyta sformatowane dane w postaci xml1 jako prawidłowy plik projektu.

Zainspirowany zaakceptowaną odpowiedzią na Library to read/write pbxproj/xcodeproj files?, postanowiłem spróbować uruchomić Xcode z konwertowanym JSON projektu. Xcode dał mi błąd, mówiąc, że projekt był nieważny. Kiedy przekonwertowałem JSON na XML używając plutil, Xcode odczyta go w porządku. Kiedy obserwowałem zawartość pliku, zobaczyłem, że pozostało ono w formacie XML po wczytaniu go przez Xcode, ale w chwili, gdy zmieniłem jakąkolwiek wartość w Xcode, przepisałem ten plik w formacie pbxproj. Wydawało się, że zmieniło kolejność frameworków i bibliotek, ale może tak być dlatego, że oryginalny pbxproj, z którym miałem do czynienia, został wygenerowany przez Unity3D.

Oto przepis na szorstki jak automatycznie konwertować, manipulować, a następnie użyć pliku 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 

nie wiem, czy jest łatwo automatible sposób mieć Xcode Doprowadzić zmodyfikowana powrócić do oryginalnego formatu, ale powinno być w porządku wywołanie xcodebuild lub xcrun, gdy plik jest w formacie XML.

+0

Odkryłem także, że 'plutil' jest wybredny w stosunku do' -convert' i '-o'. Spowoduje to zgłoszenie błędu, jeśli najpierw wprowadzisz "-o". – amacleod