Как стать автором
Обновить

Автоматизируем работу с проектами Xcode средствами Ruby

Время на прочтение3 мин
Количество просмотров3.8K
Привет, хабр. Существует ряд задач, для реализации которых нет необходимости в использовании графического интерфейса Xcode. Время исполнения таких задач может сократиться как минимум на время запуска Xcode. Экономия времени может показаться незначительной при работе с одним проектом, но если проектов много, процесс их редактирования может оказаться очень утомительным. Но самое главное, что такой подход открывает возможности для автоматизации работы с проектами.

Я хочу рассказать о новом инструменте, целью которого является решение описанной проблемы. XcodeProject — это библиотека на языке Ruby которая может быть использована для чтения данных проекта Xcode и их изменения, а так же для сборки проектов, архивирования и выполнения ряда задач по автоматизации работы с ними.

image


Установка


Библиотека представляет собой 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('path/to/dir')


Или по заданному шаблону:

projs = XcodeProject::Project.find('*/**')


После того, как объект проекта создан, можно прочитать данные:


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 для сборки проектов.

Для начала, необходимо создать rakefile. В простом случае, он может выглядеть так:

require 'rubygems'
require 'xcodeproject'

proj = XcodeProject::Project.new('path/to/example.xcodeproj')
XcodeProject::Tasks::BuildTask.new(proj)


Теперь доступен ряд задач, в том числе, сборка проекта. Полный список задач можно получить, выполнив rake -T.

$ rake -T
rake example:archive            # Creates an archive build of the specified target(s).
rake example:build              # Builds the specified target(s).
rake example:clean              # Cleans the build using the same build settings.
rake example:cleanbuild         # Builds the specified target(s) from a clean slate.


Изменяйте параметры сборки:

XcodeProject::Tasks::BuildTask.new(proj) do |t|
    t.target = "libexample"
    t.configuration = "Release"
end


Получить больше информации по XcodeBuilder можно по сылке.

В завершение, пару слов по проекту XcodeProject. Проект находится в стадии разработки и обладает лишь небольшим функционалом представленном в Xcode. Появление новых возможностей будет связана с реальными портебностями в них. Проект доступен под лицензией MIT, вы можете использовать код проекта как пожелаете. Любая помощь в развитии проекта приветствуется.

Адрес проекта на github.
Теги:
Хабы:
+17
Комментарии5

Публикации

Изменить настройки темы

Истории

Работа

Ruby on Rails
10 вакансий
Программист Ruby
8 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн