¿Alguien sabe de una biblioteca para leer/escribir los archivos del proyecto Xcode .xcodeproj/ .pbxproj? Cualquier lenguaje es bienvenidoBiblioteca para leer/escribir archivos pbxproj/xcodeproj?
Gracias de antemano.
¿Alguien sabe de una biblioteca para leer/escribir los archivos del proyecto Xcode .xcodeproj/ .pbxproj? Cualquier lenguaje es bienvenidoBiblioteca para leer/escribir archivos pbxproj/xcodeproj?
Gracias de antemano.
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.
También podría considerar el uso del comando PlistBuddy: http://developer.apple.com/library/mac/#DOCUMENTATION/Darwin/Reference/ManPages/man8/PlistBuddy.8.html
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:
+1 ¡Muy bueno! ¡Tendré que echarle un vistazo! –
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.
Acabo de descubrir esto: https://github.com/alunny/node-xcode No lo he usado todavía, pero parece prometedor para los desarrolladores de Node.js.
Hay un buen paquete de Python para hacer esto. La documentación no es excelente, pero el código fuente está bastante organizado y puede encontrar lo que necesita.
CocoaPods ahora tienen una biblioteca de rubí para manipular pbxproj archivos:
https://github.com/CocoaPods/Xcodeproj
Además de ser utilizado por CocoaPods, esto también es utilizado por fastlane, synx, slather y sin duda mucho mas.
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);
}
Gracias por esta respuesta. Este es un buen ejemplo para ayudarme a comenzar. Me aseguraré de dejarte saber cómo va. –
¿es esto reversible? xml a pbxproj? – thndrkiss
@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. –