Михаил Овчинников

Управляем сторонними библиотеками с CocoaPods

Разработка под iOS Разработка под macOS CocoaPods Менеджер пакетов Xcode

CocoaPods — менеджер пакетов, сделанный по образу и подобию RubyGems, позволяющий легко скачивать и подключать сторонние библиотеки к Swift и Objective-C проектам.

Установка CocoaPods

Менеджер пакетов написан на Ruby и распространяется через RubyGems. В общем случае установка сводится к единственной команде в терминале:

sudo gem install cocoapods --pre

Процесс может занять некоторое (продолжительное) время, не выводя ничего на экран, стоит быть к этому готовым и не прерывать установку до завершения (должна появиться надпись вроде «xx gems installed»).

Далее установим мастер-репозиторий CocoaPods со спецификациями всех доступных проектов. Делается это командой в терминале:

pod setup --verbose

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

Установка и использование библиотек

Чтобы сразу продемонстрировать все возможности создадим новый Swift-проект и установим для него Objective-C компонент под названием BEMCheckBox.

Откроем Xcode и создадим самый простой Single View, Swift-проект, я назову его «CocoaPodsExample». Сохраните его в любое место, закройте Xcode, откройте терминал, перейдите в директорию с проектом и напишите:

pod init

В корне директории должен появиться новый файл: Podfile. Это обычный текстовый файл с конфигурационным кодом на Ruby, в котором мы должны указать требуемые библиотеки. Обычно все солидные opensource-проекты указывают в Readme, что именно нужно прописать в Podfile для установки, и BEMCheckBox здесь не исключение. Откройте его любым текстовым редактором и приведите к следующему виду:

platform :ios, "9.0"

target 'CocoaPodsTest'do
  use_frameworks!

  pod 'BEMCheckBox'
end

Синтаксис должен быть интуитивно понятен: указываем целевую версию платформы, директива use_frameworks! указывает CocoaPods использовать фреймворки вместо статических библиотек (подробности в блоге проекта), а после pod пишем название библиотеки.

Иногда требуется установить не оригинальную библиотеку, а наиболее акутальный форк от другого автора (например, исправление критичного бага, который ещё не успели смерджить) в таком случае можно использовать следующий синтаксис:

pod 'SWRevealViewController', :git => 'git@github.com:safarijv/SWRevealViewController.git', :branch => 'safarijv-additions'

В данном случае мы указываем репозиторий и ветку из которой нужно взять под. Если не указать ветку, то по-умолчанию будет браться master. Аналогично нужно поступать, если вам требуется внести свои изменения в библиотеку: создать форк, закоммитить изменения и сослаться на свой репозиторий в Podfile. Не стоит делать изменения в уже установленных подах, т.к. потом будет очень сложно разобраться (особенно другим разработчикам), почему поведение библиотеки отличается от описанного в оригинальной документации.

Далее запускаем установку командой:

pod install

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

Проверить, что библиотека подключилась легко: перейдите на Storyboard, поместите на ViewController UIView из Object Library и в Identity Inspector поставьте ему класс BEMCheckBox (если не получается, то можно попробовать собрать проект Cmd + B). Запустите проект, и у вас должен появиться работающий чекбокс. Обратите внимание, что мы подключили Objective-C библиотеку к Swift проекту, если вы делали это раньше вручную, то помните, что для этой цели нужно было создавать специальный заголовочный файл Objective-C Bridging Header, но последние версии CocoaPods генерируют его автоматически, поэтому в этом больше нет необходимости.

CocoaPods и системы контроля версий

Обычно хорошим тоном в современной разработке является не добавлять сторонние библиотеки под контроль версий. Однако авторы проекта наоборот, рекомендуют хранить директорию Pods/ вместе с проектом. Преимуществом такого подхода является переносимость проекта и отсутствие зависимости от внешних инфраструктур (например Github, где хранится большинство исходных кодов библиотек). С другой стороны, в крупном проекте со множеством библиотек это может существенно увеличить размер репозитория, а в случае командной разработки добавит головной боли при слиянии веток. Поэтому в небольших проектах, где вы являетесь единственным разработчиком, можно смело оставить директорию Pods/ под контролем версий, а в крупных проектах и при командной разработке, лучше добавить ее в .gitignore.

Homebrew

macOS Homebrew Менеджер пакетов

Homebrew — менеджер пакетов для Mac OS X, который упрощает установку открытого программного обеспечения. Этот проект имеет открытый исходный код, написан на языке Ruby, а его автором является Max Howell.

Зачем нужны менджеры пакетов?

Чтобы понять преимущества использования менеджеров пакетов, рассмотрим типичный процесс сборки из исходников и установки программы в unix-мире на примере Wget.

Сначала потребуется скачать исходный код Wget и распаковать архив. Так как программы пишутся под разные платформы, то перед компиляцией необходимо собрать информацию об используемой операционной системе и подготовить исходники к сборке на ней. Делается это при помощи скрипта конфигурации командой ./configure. Точка и слэш ставятся для того, чтобы указать, что скрипт находится в текущей папке. По умолчанию unix-системы не ищут исполняемые файлы в текущей директории (в целях безопасности).

Компиляция программы осуществляется командой make. Установка, которая заключается (по умолчанию) в перемещении скомпилированного бинарного файла в директорию /usr/local/bin, производится командой make install. После этого можно набрать в консоли wget и увидеть, как запустилась программа.

Нельзя не отметить, что это довольно рутинный процесс, особенно если устанавливать более сложное ПО с большим количеством зависимостей. Чтобы упростить процедуру установки были созданы менеджеры пакетов, которые сводят инсталляцию необходимого ПО к одной команде в консоли. Практически каждый современный дистрибутив Linux поставляется с такой утилитой.

В мире Mac такая практика не столь распространена, так как большинство приложений распространяется через AppStore, либо устанавливается простым «перетягиванием» app-файла в папку Applications. Тем не менее полезно иметь под рукой такой инструмент, особенно если вы перешли на OS X из мира Linux и ощущаете себя некомфортно без привычных утилит вроде mc, wget и т. д.

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

Как установить Homebrew?

Для установки Homebrew нужно лишь выполнить в терминале следующую команду:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew использует версию Ruby, которая идёт в поставке с OS X, поэтому не потребуется устанавливать дополнительных компонентов для запуска скрипта.

Сначала скрипт спрашивает разрешение на продолжение установки, нужно нажать Enter чтобы согласиться. Далее, необходимо будет ввести пароль суперпользователя, для того чтобы разрешить модификацию системных файлов. Затем установщик проверит наличие утилит командной строки разработчика (xcode-select, необходимы для компиляции) и при их отсутствии попытается установить. Последним этапом будет непосредственная установка исполняемых файлов Homebrew.

Процесс установки Homebrew

Проверить, что программа установилась корректно, можно при помощи команды для диагностики brew doctor.

Использование

Обновить Homebrew: brew update.

Показать список установленных приложений: brew list.

Поиск приложений осуществляется командой search.

brew search mc

Установка приложения выполняется командой install.

brew install mc

Удаление приложения - remove.

brew remove mc

Сайт проекта
Репозиторий на GitHub

Альтернативы Homebrew

  • MacPorts — развитие проекта DarwinPorts, инициативы по портированию unix-приложений на платформу Darwin, которая является основой Mac OS X. Используется для сборки и установки приложений с открытым исходным кодом;
  • Fink - ещё один проект по портированию открытых unix-программ на OS X. Использует dpkg и APT.
1 of 1