Qualcuno sa di una libreria per leggere/scrivere i file di progetto Xcode .xcodeproj/ .pbxproj? Qualsiasi lingua è benvenutaLibreria per leggere/scrivere file pbxproj/xcodeproj?
Grazie in anticipo.
Qualcuno sa di una libreria per leggere/scrivere i file di progetto Xcode .xcodeproj/ .pbxproj? Qualsiasi lingua è benvenutaLibreria per leggere/scrivere file pbxproj/xcodeproj?
Grazie in anticipo.
La sintassi di superficie di un progetto Xcode è un "plist vecchio stile". Si può facilmente convertirlo in un plist XML con il comando
plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj
notare che questo non è "reale XML" ma la struttura X plist Mac OS espressa nella sintassi XML; consiste quasi interamente di dizionari e array di coppie di valori chiave. Xcode leggerà la rappresentazione XML ma la convertirà in "plist vecchio stile" quando il progetto verrà aperto.
La struttura e il rapporto degli elementi nelle note seguono la struttura del progetto. Gli UUID vengono utilizzati per il riferimento incrociato di elementi tra il progetto e i relativi target e tra il progetto ei file utente nel wrapper del progetto.
La chiave "isa" identifica ogni tipo di oggetto. PBXProject contiene oggetti PBXFileReference, PBXGroup, PBXNativeTarget e PBXBuildConfiguration.
Gli obiettivi hanno oggetti PBXBuildPhase che contengono riferimenti incrociati ai riferimenti del file; BuildConfigurationLists che memorizzano le impostazioni di compilazione per le destinazioni e altre impostazioni di destinazione come il tipo e il nome di destinazione.
Le buildConfigurationList fanno riferimento a buildConfigurations, che a loro volta contengono dizionari di buildSettings.
Suggerirei di guardare prima il testo plist vecchio stile, poiché è molto più leggibile e contiene effettivamente commenti in linea per dirti cosa è cosa. Quindi puoi utilizzare gli strumenti XML per modificare o scrivere i file di progetto a tuo piacimento.
Si potrebbe anche considerare l'utilizzo del comando PlistBuddy: http://developer.apple.com/library/mac/#DOCUMENTATION/Darwin/Reference/ManPages/man8/PlistBuddy.8.html
ho finito per creare uno, ed è ospitato su GitHub qui:
https://github.com/jasperblues/XcodeEditor
Consente messa in vendita di intestazioni, file, l'aggiunta di file di origine , impostazione del file sorgente come membro di un target, aggiunta di immagini, creazione di gruppi, ecc.).
Funziona manipolando il contenuto del file project.pbxproj. Utilizzato in:
+1 Molto interessante! Dovrò dare un'occhiata! –
provare questo: https://github.com/sap-production/XcodeProjectJavaAPI
Può leggere e scrivere qualsiasi file elenco di proprietà e contiene un modello semantico per leggere e modificare i file di progetto Xcode. Il modello semantico è in una fase iniziale ma può essere facilmente esteso.
Viene anche utilizzato pesantemente nel plug-in Xcode Maven di SAP, che verrà rilasciato questo mese.
Ho appena scoperto questo: https://github.com/alunny/node-xcode Non l'ho ancora usato, ma sembra promettente per gli sviluppatori Node.js.
C'è un bel pacchetto Python per fare questo. La documentazione non è eccezionale, ma il codice sorgente è abbastanza organizzato e puoi trovare ciò di cui hai bisogno.
CocoaPods hanno ora una biblioteca rubino per manipolare file pbxproj:
https://github.com/CocoaPods/Xcodeproj
Oltre ad essere utilizzato da CocoaPods, questo è utilizzato anche da fastlane, synx, slather e senza dubbio molti altri.
Per PHP (facilmente portato su qualsiasi lingua è necessario), scrittura molto di base solo:
function modifyPlistXCodeProject($file_path,$app_name,$bundle_identifier,$latest_version,$bundle_version)
{
$data = file_get_contents($file_path);
$changes = Array();
$changes['PRODUCT_BUNDLE_IDENTIFIER'] = $bundle_identifier;
foreach ($changes as $key => $value){
$data = oldStylePlistReplace($data,$key,$value);
}
file_put_contents($file_path, $data);
}
function oldStylePlistReplace($data,$key,$value){
$e = explode($key,$data);
for ($i=1;$i<count($e);$i++){
$row_i = $e[$i];
$nextline_pos = stripos($row_i,"\n");
$text_i = '= '.$value.';'.substr($row_i, $nextline_pos);
$e[$i] = $text_i;
//var_dump(substr($text_i,0,100));exit();
}
return implode($key,$e);
}
Grazie per questa risposta. Questo è un bel modo di farmi iniziare. Sarò sicuro di farti sapere come va. –
è reversibile? xml torna a pbxproj? – thndrkiss
@thndrkiss Xcode leggerà felicemente qualsiasi formato dell'elenco (xml, Jason, ecc.) E tornerà al formato nativo al salvataggio. Se si utilizza ObjC/Swift forse non è necessario convertire in XML poiché è possibile leggere il file direttamente in un NSDictionary. –