2009-09-21 13 views

Respuesta

28

La sintaxis superficial de un proyecto de Xcode es una "plist de estilo antiguo". Se puede convertir fácilmente a un plist XML con el comando

plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj 

cuenta que esto no es "XML real" pero la estructura X plist Mac OS expresado en sintaxis XML; consiste casi por completo en matrices y diccionarios de pares clave-valor. Xcode leerá la representación XML pero la convertirá de nuevo a "plist de estilo antiguo" cuando se abra el proyecto.

La estructura y la relación de los elementos en el plist siguen la estructura del proyecto. Los UUID se utilizan para hacer referencias cruzadas entre el proyecto y sus objetivos, y entre el proyecto y los archivos del usuario en el contenedor del proyecto.

La tecla 'isa' identifica cada tipo de objeto. PBXProject contiene objetos PBXFileReference, PBXGroup, PBXNativeTarget y PBXBuildConfiguration.

Los objetivos tienen objetos PBXBuildPhase que contienen referencias cruzadas a las referencias de archivos; BuildConfigurationLists que almacenan la configuración de compilación para los objetivos y otras configuraciones de destino, como el tipo de destino y el nombre.

buildConfigurationLists referencia cruzada buildConfigurations, que a su vez contienen diccionarios de buildSettings.

Yo recomendaría mirar primero el texto plist antiguo, ya que es mucho más legible y en realidad tiene comentarios en línea para decirte qué es qué. Luego puede usar las herramientas XML para editar o escribir los archivos del proyecto a su gusto.

+0

Gracias por esta respuesta. Este es un buen ejemplo para ayudarme a comenzar. Me aseguraré de dejarte saber cómo va. –

+2

¿es esto reversible? xml a pbxproj? – thndrkiss

+0

@thndrkiss Xcode estará feliz de leer cualquiera de los formatos de lista (xml, Jason, etc.) y volverá a ser original al guardar. Si utiliza ObjC/Swift, tal vez no necesite convertirlo a XML, ya que puede leer el archivo directamente en un NSDictionary. –

21

terminé creando uno, y es alojado en GitHub aquí:

https://github.com/jasperblues/XcodeEditor

Permite lista de cabeceras, archivos, añadiendo archivos de origen , configurar el archivo fuente como miembro de un objetivo, agregar imágenes, crear grupos, etc.).

Funciona manipulando el contenido del archivo project.pbxproj. Usado en:

  • Menos doloroso: pruebas funcionales automatizadas para aplicaciones móviles. (Editar: ahora parte de las herramientas de Xamarin).
  • Level Helper: un marco RAD para desarrollar juegos 2D en iOS & Android.
  • TextMate
  • Apportable
+0

+1 ¡Muy bueno! ¡Tendré que echarle un vistazo! –

3

prueba este: https://github.com/sap-production/XcodeProjectJavaAPI

Puede leer y escribir cualquier archivo de lista de propiedades y contiene un modelo semántico para leer y manipular archivos de proyecto Xcode. El modelo semántico está en una etapa inicial, pero se puede extender fácilmente.

También se usa mucho en el complemento Xcode Maven de SAP, que se lanzará este mes.

-1

Para PHP (fácilmente portado a cualquier idioma que necesita), de escritura muy básico solamente:

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); 
} 
Cuestiones relacionadas