Кто-нибудь знает библиотеку для чтения/записи файлов проекта Xcode.xcodeproj/.pbxproj? Любой язык приветствуется.
Спасибо заранее.
Кто-нибудь знает библиотеку для чтения/записи файлов проекта Xcode.xcodeproj/.pbxproj? Любой язык приветствуется.
Спасибо заранее.
Поверхностный синтаксис проекта Xcode - это "старый стиль". Вы можете легко преобразовать его в XML-plist с помощью команды
plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj
Обратите внимание, что это не "реальный XML", а структура plist Mac OS X, выраженная в синтаксисе XML; он состоит почти полностью из словарей и массивов ключевых значений. Xcode прочитает представление XML, но преобразует его обратно в "старый стиль" при открытии проекта.
Структура и взаимосвязь элементов в plist следуют структуре проекта. UUID используются для перекрестных ссылок между проектом и его целями, а также между проектом и пользовательскими файлами в обертке проекта.
Ключ 'isa' идентифицирует каждый тип объекта. PBXProject содержит объекты PBXFileReference, PBXGroup, PBXNativeTarget и PBXBuildConfiguration.
Цели имеют объекты PBXBuildPhase, которые содержат перекрестные ссылки на ссылки на файлы; BuildConfigurationLists, которые хранят настройки сборки для целей и другие целевые настройки, такие как тип и имя цели.
В buildConfigurationLists перекрестные ссылки buildConfigurations, которые, в свою очередь, содержат словари buildSettings.
Я бы рекомендовал сначала взглянуть на текст в стиле старого стиля, так как он более читабельный и на самом деле имеет встроенные комментарии, чтобы рассказать вам, что. Затем вы можете использовать инструменты XML для редактирования или записи файлов проекта по своему вкусу.
В итоге я создал один, и он размещался на github здесь:
https://github.com/jasperblues/XcodeEditor
Позволяет добавлять заголовки, файлы, добавлять исходные файлы, устанавливать исходный файл в качестве объекта цели, добавлять изображения, создавать группы и т.д.).
Он работает, манипулируя содержимым файла project.pbxproj. Используется в:
Я только что обнаружил это: https://github.com/alunny/node-xcode Я еще не использовал его, но он выглядит многообещающим для разработчиков Node.js.
Вы также можете использовать команду PlistBuddy: http://developer.apple.com/library/mac/#DOCUMENTATION/Darwin/Reference/ManPages/man8/PlistBuddy.8.html
Попробуйте следующее: https://github.com/sap-production/XcodeProjectJavaAPI
Он может читать и записывать любой файл списка свойств и содержит семантическую модель для чтения и обработки файлов проекта Xcode. Семантическая модель находится на ранней стадии, но ее можно легко расширить.
Он также широко используется в плагине Xcode Maven SAP, который будет выпущен в этом месяце.
Теперь у CocoaPods есть рубиновая библиотека для управления файлами pbxproj:
https://github.com/CocoaPods/Xcodeproj
Помимо использования CocoaPods, это также используется fastlane, synx, slather и, несомненно, еще много.
Там есть хороший пакет Python для этого. Документация невелика, но исходный код довольно организован, и вы можете найти то, что вам нужно.
Для PHP (легко переносимого на любой язык, который вам нужен), очень простая запись:
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);
}