Библиотека для чтения / записи файлов pbxproj/xcodeproj?
Кто-нибудь знает библиотеки для чтения / записи файлов проекта Xcode .xcodeproj /.pbxproj? Любой язык приветствуется.
Заранее спасибо.
8 ответов
Поверхностный синтаксис проекта Xcode - "старый стиль". Вы можете легко преобразовать его в XML-лист с помощью команды
plutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj
Обратите внимание, что это не "настоящий XML", а структура списков 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. Используется в:
- Менее болезненно: Автоматическое функциональное тестирование для мобильных приложений. (Изменить: теперь часть инструментов Xamarin).
- Level Helper: RAD-фреймворк для разработки 2D-игр на iOS и Android.
- TextMate
- Apportable
Я только что обнаружил это: https://github.com/alunny/node-xcode Я еще не использовал его, но он выглядит многообещающим для разработчиков Node.js.
Попробуйте это: https://github.com/sap-production/XcodeProjectJavaAPI
Он может читать и записывать любой файл списка свойств и содержит семантическую модель для чтения и управления файлами проекта Xcode. Семантическая модель находится на ранней стадии, но может быть легко расширена.
Он также активно используется в плагине Xcode Maven SAP, который будет выпущен в этом месяце.
Вы также можете рассмотреть возможность использования команды PlistBuddy:
CocoaPods теперь имеет библиотеку ruby для управления файлами 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);
}