2009-09-21 8 views

Répondre

28

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.

+0

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. –

+2

est-ce réversible? xml retour à pbxproj? – thndrkiss

+0

@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. –

21

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:

  • Moins douloureux: test fonctionnel automatisé pour les applications mobiles. (Edit: fait maintenant partie des outils de Xamarin). Level Helper: un framework RAD pour développer des jeux 2D sur iOS & Android.
  • TextMate
  • Apportable
+0

+1 Très cool! Je vais devoir vérifier! –

3

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.

-1

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); 
} 
Questions connexes