2012-10-11 12 views
5

sto creando uno script che modifica automaticamente un progetto iOS con ruby. Dopo aver aggiunto alcuni file, ho bisogno di modificare il file project.pbxproj per salvare le modifiche nel progetto.Ruby modifica project.pbxproj

Ho trovare un metodo per analizzare il file pbxproj a JSON:

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

Ma dopo aver modificato il JSON, vorrei tornare il processo per salvare le modifiche nel formato pbxproj. Qualcuno conosce un modo per farlo?

risposta

1

Non sembra essere un modo per convertire direttamente il JSON nel formato di file pbxproj, ma Xcode leggerà i dati in formato xml1 come file di progetto valido.

Ispirato dalla risposta accettata allo Library to read/write pbxproj/xcodeproj files?, ho deciso di provare a eseguire Xcode con il JSON convertito del progetto. Xcode mi ha dato un errore dicendo che il progetto non era valido. Quando ho convertito il JSON in XML usando plutil, Xcode lo leggeva bene. Quando ho osservato il contenuto del file, ho visto che è rimasto in XML quando Xcode lo ha caricato, ma nel momento in cui ho cambiato qualsiasi valore in Xcode, ha riscritto il file usando il formato pbxproj. Sembrava riorganizzare l'ordine dei framework e delle librerie, ma ciò potrebbe essere dovuto al fatto che l'originale pbxproj con cui avevo a che fare era generato da Unity3D.

Ecco una ricetta di massima per come convertire automaticamente, manipolare, e successivamente utilizzare il file 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 

Non so se c'è un modo facile-automatible avere Xcode portare il modificata file di nuovo al suo formato originale, ma dovrebbe essere bene per invocare xcodebuild o xcrun mentre il file è in formato XML.

+0

Ho anche scoperto che 'plutil' è schizzinoso sull'ordine di' -convert' e '-o'. Ci sarà un errore se si mette '-o' prima. – amacleod

Problemi correlati