Подтвердить что ты не робот

Библиотека для чтения/записи файлов pbxproj/xcodeproj?

Кто-нибудь знает библиотеку для чтения/записи файлов проекта Xcode.xcodeproj/.pbxproj? Любой язык приветствуется.

Спасибо заранее.

4b9b3361

Ответ 1

Поверхностный синтаксис проекта 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 для редактирования или записи файлов проекта по своему вкусу.

Ответ 2

В итоге я создал один, и он размещался на github здесь:

https://github.com/jasperblues/XcodeEditor

Позволяет добавлять заголовки, файлы, добавлять исходные файлы, устанавливать исходный файл в качестве объекта цели, добавлять изображения, создавать группы и т.д.).

Он работает, манипулируя содержимым файла project.pbxproj. Используется в:

  • Менее болезненный: автоматическое функциональное тестирование для мобильных приложений. (Изменить: теперь часть инструментов Xamarin).
  • Level Helper: Рамка RAD для разработки 2D-игр на iOS и Android.
  • TextMate
  • Apportable

Ответ 3

Я только что обнаружил это: https://github.com/alunny/node-xcode Я еще не использовал его, но он выглядит многообещающим для разработчиков Node.js.

Ответ 5

Попробуйте следующее: https://github.com/sap-production/XcodeProjectJavaAPI

Он может читать и записывать любой файл списка свойств и содержит семантическую модель для чтения и обработки файлов проекта Xcode. Семантическая модель находится на ранней стадии, но ее можно легко расширить.

Он также широко используется в плагине Xcode Maven SAP, который будет выпущен в этом месяце.

Ответ 6

Теперь у CocoaPods есть рубиновая библиотека для управления файлами pbxproj:

https://github.com/CocoaPods/Xcodeproj

Помимо использования CocoaPods, это также используется fastlane, synx, slather и, несомненно, еще много.

Ответ 7

Там есть хороший пакет Python для этого. Документация невелика, но исходный код довольно организован, и вы можете найти то, что вам нужно.

https://github.com/kronenthaler/mod-pbxproj

Ответ 8

Для 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);
}