Est-ce que quelqu'un sait d'une bibliothèque pour lire/écrire les fichiers de projet Xcode .xcodeproj/ .pbxproj? Toute langue est la bienvenue.Bibliothèque pour lire/écrire des fichiers pbxproj/xcodeproj?
Merci d'avance.
Est-ce que quelqu'un sait d'une bibliothèque pour lire/écrire les fichiers de projet Xcode .xcodeproj/ .pbxproj? Toute langue est la bienvenue.Bibliothèque pour lire/écrire des fichiers pbxproj/xcodeproj?
Merci d'avance.
La syntaxe de surface d'un projet Xcode est un "plist à l'ancienne". Vous pouvez facilement le convertir en un plist XML avec la commande
plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj
Notez que cela ne « XML réel », mais la structure Mac OS X plist exprimé dans la syntaxe XML; il se compose presque entièrement de dictionnaires et de tableaux de paires clé-valeur. Xcode lira la représentation XML mais la convertira en "ancienne plist" lors de l'ouverture du projet.
La structure et la relation des articles dans le plist suivent la structure du projet. Les UUID sont utilisés pour faire des références croisées entre les éléments du projet et ses cibles, et entre le projet et les fichiers utilisateur dans l'encapsuleur du projet.
La touche 'isa' identifie chaque type d'objet. Le PBXProject contient les objets PBXFileReference, PBXGroup, PBXNativeTarget et PBXBuildConfiguration.
Les cibles ont des objets PBXBuildPhase qui contiennent des références croisées aux références de fichier; BuildConfigurationLists qui stockent les paramètres de génération pour les cibles et d'autres paramètres de cible, tels que le type et le nom de la cible.
Les buildConfigurationLists renvoient des configurations de construction croisées, qui à leur tour contiennent des dictionnaires de buildSettings.
Je vous recommande de regarder d'abord le texte plist à l'ancienne, car il est beaucoup plus lisible et contient des commentaires en ligne pour vous dire quoi. Ensuite, vous pouvez utiliser des outils XML pour éditer ou écrire les fichiers de projet à votre goût.
Vous pouvez également envisager d'utiliser la commande PlistBuddy: http://developer.apple.com/library/mac/#DOCUMENTATION/Darwin/Reference/ManPages/man8/PlistBuddy.8.html
J'ai fini par créer un, et il est hébergé sur GitHub ici:
https://github.com/jasperblues/XcodeEditor
Permet des en-têtes liste, les fichiers, l'ajout de fichiers source , en définissant le fichier source en tant que membre d'une cible, en ajoutant des images, en créant des groupes, etc.).
Il fonctionne en manipulant le contenu du fichier project.pbxproj. Utilisé dans:
+1 Très cool! Je vais devoir vérifier! –
Essayez celui-ci: https://github.com/sap-production/XcodeProjectJavaAPI
Il peut lire et écrire un fichier liste des propriétés et contient un modèle sémantique pour lire et manipuler des fichiers du projet Xcode. Le modèle sémantique est à un stade précoce mais peut être facilement étendu.
Il est également largement utilisé dans le plugin Xcode Maven de SAP, qui sera publié ce mois-ci.
Je viens de découvrir ceci: https://github.com/alunny/node-xcode Je ne l'ai pas encore utilisé, mais il semble prometteur pour les développeurs Node.js.
Il existe un bon package Python pour cela. La documentation n'est pas géniale, mais le code source est assez organisé et vous pouvez trouver ce dont vous avez besoin.
CocoaPods ont maintenant une bibliothèque Ruby pour manipuler pbxproj fichiers:
https://github.com/CocoaPods/Xcodeproj
En plus d'être utilisé par CocoaPods, ce qui est également utilisé par fastlane, synx, slather et sans aucun doute beaucoup plus.
Pour PHP (facilement porté sur la langue que vous avez besoin), écriture très basique seulement:
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);
}
Merci pour cette réponse. C'est une bonne idée pour me lancer. Je vais être sûr de vous faire savoir comment ça se passe. –
est-ce réversible? xml retour à pbxproj? – thndrkiss
@thndrkiss Xcode se fera un plaisir de lire n'importe lequel des formats de liste (xml, Jason, etc.) et retournera à natif lors de la sauvegarde. Si vous utilisez ObjC/Swift peut-être pas besoin de convertir en XML que vous pouvez lire le fichier directement dans un NSDictionary. –