Привет. Существует ряд задач, для реализации которых нет необходимости в использовании графического интерфейса Xcode. Время исполнения таких задач может сократиться как минимум на время запуска Xcode. Экономия времени может показаться незначительной при работе с одним проектом, но если проектов много, процесс их редактирования может оказаться очень утомительным. Но самое главное, что такой подход открывает возможности для автоматизации работы с проектами.
Я хочу рассказать о новом инструменте, целью которого является решение описанной проблемы. XcodeProject — это библиотека на языке Ruby которая может быть использована для чтения данных проекта Xcode и их изменения, а так же для сборки проектов, архивирования и выполнения ряда задач по автоматизации работы с ними.
Установка
Библиотека представляет собой gem, его установку можно выполнить из терминала следующей командой:
gem install xcodeproject
Начало работы
Простейший пример использования библиотеки, который отобразит все цели проекта:
require 'rubygems'
require 'xcodeproject'
proj = XcodeProject::Project.new('path/to/example.xcodeproj')
proj.read.targets.each do |target|
puts target.name
end
Для начала необходимо создать объект типа XcodeProject::Project:
proj = XcodeProject::Project.new('path/to/example.xcodeproj')
Или можно найти все проекты Xcode в заданной директории:
projs = XcodeProject::Project.find_projs('path/to/dir')
После того, как объект проекта создан, можно прочитать данные из него:
data = proj.read
p data.target('example').config('Release').build_settings
Или изменить данные:
proj.change do |data|
data.target('example').config('Release').build_settings['GCC_VERSION'] = 'com.apple.compilers.llvmgcc42'
end
Файлы, группы и директории
Отобразим все группы наивысшего уровня:
data.main_group.children.each do |child|
p child.name
end
Отобразим только файлы из заданной группы:
group = data.group('path/from/main_group')
group.files.each do |file|
p file.name
end
В любой момент вы можете получить GroupPath группы. GroupPath — это путь к группе относительно корня проекта (корнем проекта является Main Group, скрытая группа, которая является родителем всех групп проекта) или текущей группы.
group.group_path
Директории — это группы, которые представлены в вашей файловой системе. Для них можно получить FilePath — реальный путь в файловой системе к директории с которой ассоциирован объект.
group.total_path
Вы можете добавить группу к проекту, указав GroupPath к ней, отновительно корня проекта:
data.add_group('path/from/main_group')
Или относительно текущей группы:
group.add_group('path/from/current_group')
Для добавления директории к проекту необходимо указать FilePath к ней:
data.add_dir('group_path/to/parent', '/file_path/to/dir')
group.add_dir('/file_path/to/dir')
Добавить файл к проекту можно аналогичным образом:
data.add_file('group_path/to/parent', '/file_path/to/file')
group.add_file('/file_path/to/file')
Так же вы можете удалять файлы и группы из проекта:
data.remove_file('path/from/main_group')
data.remove_group('path/from/main_group')
group.remove_file('path/from/current_group')
group.remove_group('path/from/current_group')
Цели
Получить объект цели просто:
target = data.target('example')
После того как добавлен файл к проекту, можно использовать его для сборки цели:
file = main_group.add_file('/file_path/to/file')
target.add_source(file)
Исключить файл из сборки можно следующим образом:
target.remove_source(file)
Сборка прокта
XcodeProject использует XcodeBuilder для сборки проектов.
Компиляция проекта:
proj.build
Удаление объектных файлов, созданных в процессе сборки:
proj.clean
Архивирование проекта:
proj.builder.scheme = 'example'
proj.archive
Можно указать параметры сборки:
proj.builder.configuration = 'Debug'
proj.builder.arch = 'armv7'
proj.build
Получить больше информации по XcodeBuilder можно по сылке.
В завершение, пару слов по проекту XcodeProject. Проект находится в стадии разработки и обладает лишь небольшим функционалом представленном в Xcode. Появление новых возможностей будет связана с реальными портебностями в них, в ближайшее время можно ожидать функционал характерный для iOS разработки: сборку универсальных библиотек для симулятора и устройства и постоения псево фрейморков на их базе. Так же функционал сборки deb-пакетов для Cydia репозитория. Проект доступен под лицензией MIT, вы можете использовать код проекта как пожелаете. Любая помощь в развитии проекта приветствуется.
Адрес проекта на github.
Автор: aenesterov