Статьи

Оптимизация развития какао с помощью CocoaPods

CocoaPods — это простой в использовании инструмент управления зависимостями для разработки под iOS и OS X. Несмотря на то, что CocoaPods довольно понятен и прост в использовании, я чувствую, что многие разработчики какао не хотят его пробовать. В этом уроке я покажу вам, как начать работу с CocoaPods менее чем за пять минут.


CocoaPods — это инструмент управления зависимостями для разработки под iOS и OS X. Это делает управление сторонними библиотеками в проекте Xcode простым и понятным. CocoaPods приобрел значительную популярность в сообществе какао, и в результате сотни библиотек с открытым исходным кодом теперь обеспечивают поддержку CocoaPods. Чтобы понять, какие библиотеки доступны через CocoaPods, посетите веб-сайт CocoaPods и найдите некоторые из ваших любимых сторонних библиотек. Такие компании, как TestFlight, Mixpanel и Google, делают свои библиотеки доступными через CocoaPods.


Работать со сторонними библиотеками в проекте XCode не всегда легко, и это часто может быть проблемой, особенно при интеграции не-ARC библиотек в проект с поддержкой ARC. Элой Дуран начал проект CocoaPods, чтобы облегчить эту боль. Прежде чем перейти на CocoaPods, я сделал то, что делает большинство разработчиков; они вручную копируют исходные файлы сторонних библиотек в проект Xcode и компилируют эти файлы с остальной частью проекта. Хотя этот метод работал нормально, обновление зависимостей проекта было обременительным и подверженным ошибкам процессом.

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


Еще одна замечательная особенность CocoaPods заключается в том, что он распространяется как драгоценный камень Ruby. Это делает установку CocoaPods практически безболезненной. Чтобы установить гем CocoaPods, в вашей системе должны быть установлены Ruby и RubyGems. Не бойтесь, потому что оба Ruby и RubyGems, вероятно, уже установлены на вашем компьютере.

Откройте новое окно терминала и введите gem -v чтобы определить, установлен ли RubyGems в вашей системе. Если вам нужна помощь в установке Ruby или RubyGems, Эндрю Берджесс написал отличный учебник по RubyGems в Nettuts +. В случае, если у вас возникнут проблемы с установкой CocoaPods, есть вероятность, что статья Эндрю найдет решение вашей проблемы.

Перед установкой CocoaPods обязательно обновите RubyGems, выполнив в командной строке следующую команду:

1
gem update —system

В зависимости от конфигурации вашей системы может потребоваться префикс этой команды с помощью sudo .

Если вы хотите узнать больше о Ruby и Rubygems, Джеффри Уэй написал хорошую статью о Ruby в Net Tuts +. Учебное пособие Эндрю Берджесса, о котором я упоминал ранее, является частью углубленной серии под названием Ruby for Newbies . Это определенно стоит проверить.

Установить CocoaPods легко после установки Ruby и RubyGems. Просто запустите следующее:

1
gem install cocoapods

После установки настройте CocoaPods, выполнив команду pod setup . В процессе установки создается среда CocoaPods, и в вашей домашней папке .cocoapods каталог .cocoapods . Эта скрытая папка содержит все доступные спецификации модуля или спецификации модуля.


Вместо объяснения того, как работает CocoaPods, гораздо проще показать вам, создав простой проект Xcode с использованием CocoaPods. Откройте Xcode и создайте новый проект на основе шаблона Пустого приложения . Назовите проект CocoaPods и обязательно включите ARC (автоматический подсчет ссылок) для проекта (рисунок 1).

Оптимизация разработки какао с помощью CocoaPods - настройка проекта
фигура 1

Теперь, когда мы создали проект, нам нужно добавить Podfile. Podfile похож на Gemfile. Это текстовый файл, который содержит информацию о проекте, а также включает в себя зависимости проекта, то есть библиотеки, которые управляются CocoaPods. Закройте проект Xcode и откройте новое окно терминала. Найдите корневой каталог вашего проекта Xcode и создайте новый Podfile, запустив touch Podfile в Терминале. Команда touch обновляет дату изменения файла, но создает файл для вас, если он не существует, а это именно то, что нам нужно. Убедитесь, что вы создали Podfile в корне вашего проекта XCode.

1
touch Podfile

Откройте Podfile в вашем любимом текстовом редакторе. На момент написания этого руководства текущая версия CocoaPods была 0.16. В этой версии требуется указать платформу, iOS или OS X. Это больше не потребуется в следующей версии CocoaPods (0.17). В этом примере мы сообщаем CocoaPods, что мы нацелены на платформу iOS, как показано ниже. Можно указать цель развертывания проекта, но это не обязательно. По умолчанию целью развертывания является 4.3 для iOS и 10.6 для OS X.

1
platform :ios, ‘6.0’

С указанной платформой настало время создать список зависимостей для проекта. Зависимость состоит из ключевого слова pod за которым следует имя зависимости или pod. Модуль — это как гем, зависимость или библиотека, которую вы хотите включить в проект или приложение. При желании вы можете указать версию зависимости, как показано ниже.

1
pod ‘SVProgressHUD’, ‘0.9’

Опуская номер версии модуля, CocoaPods будет использовать последнюю доступную версию (это то, что вы хотите большую часть времени). Вы также можете добавить префикс к номеру версии, чтобы дать CocoaPods больше контроля над тем, какую версию использовать. Спецификаторы в основном говорят сами за себя (>, >= , < , <= ), но один спецификатор ~> может показаться странным, если вы не знакомы с RubyGems. Я объясню, что означает ~> в примере, показанном ниже. Спецификация модуля, показанная ниже, указывает, что версия библиотеки AFNetworking должна быть между 1.0.1 и 1.1 но исключая последнюю. Это очень полезно, если вы хотите дать CocoaPods возможность обновлять зависимости проекта, когда доступны незначительные выпуски (исправления ошибок), но исключать основные выпуски, которые могут включать изменения API, которые могут что-то сломать в вашем проекте.

1
pod ‘AFNetworking’, ‘~> 1.0.1’

Объявление зависимостей имеет гораздо больше опций конфигурации, которые можно установить в Podfile. Например, если вы хотите работать с новейшей версией библиотеки, вы можете заменить номер версии модуля на :head как показано ниже. Вы даже можете указать CocoaPods, какой источник использовать, указав репозиторий git или указав CocoaPods на локальную копию библиотеки. Это более продвинутые функции CocoaPods.

1
2
3
pod ‘AFNetworking’, :head
pod ‘SVProgressHUD’, :git => ‘https://github.com/samvermette/SVProgressHUD’
pod ‘ViewDeck’, :local => ‘~/Development/Library/ViewDeck’

С указанным списком зависимостей пришло время продолжить процесс установки. Обновите Podfile, как показано ниже, и запустите pod install в Терминале. Обязательно запустите эту команду в корневом каталоге вашего проекта XCode, где вы также создали Podfile проекта.

1
2
3
4
5
6
platform :ios, ‘6.0’
 
pod ‘ViewDeck’, ‘~> 2.2.2’
pod ‘AFNetworking’, ‘~> 1.1.0’
pod ‘SVProgressHUD’, ‘~> 0.9.0’
pod ‘HockeySDK’, ‘~> 3.0.0’
1
pod install

CocoaPods проверяет список зависимостей и устанавливает каждую зависимость, как указано в Podfile проекта. Вывод в командной строке показывает вам, что CocoaPods делает под капотом. Последние две строки особенно интересны для нас; CocoaPods создает рабочую область Xcode и добавляет наш проект в эту рабочую область. Он также создает новый проект с именем Pods , добавляет перечисленные зависимости в этот проект и статически связывает его с библиотекой. Вновь созданный проект Pods также добавляется в ту же рабочую область (рисунок 2).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
Resolving dependencies of<code>./Podfile’
Updating spec repositories
 
Cocoapods 0.17.0.rc7 is available.
 
Resolving dependencies for target<code>default’ (iOS 6.0)
Downloading dependencies
Installing AFNetworking (1.1.0)
Installing HockeySDK (3.0.0)
Installing SVProgressHUD (0.9)
Installing ViewDeck (2.2.5)
Generating support files
2013-03-28 11:13:54.663 xcodebuild[1352:1207] XcodeColors: load (v10.1)
2013-03-28 11:13:54.665 xcodebuild[1352:1207] XcodeColors: pluginDidLoad:
 
[!] From now on use<code>CocoaPods.xcworkspace’.
Integrating<code>libPods.a’ into target<code>CocoaPods’ of Xcode project<code>./CocoaPods.xcodeproj’.
Оптимизация разработки какао с помощью CocoaPods - Xcode Workspace
фигура 2

При запуске команды pod install , CocoaPods говорит нам, что теперь мы должны использовать CocoaPods.xcworkspace . Рабочие пространства XCode являются ключевым компонентом работы CocoaPods. Рабочая область Xcode — это контейнер, который группирует один или несколько проектов Xcode, что упрощает работу с несколькими проектами. Как мы видели ранее, CocoaPods создает для вас новый проект с именем Pods и автоматически добавляет этот проект в новое рабочее пространство Xcode. Проект, с которого мы начали, также добавляется в это рабочее пространство. Основным преимуществом является то, что ваш код и зависимости проекта строго разделены. Зависимости в проекте Pods статически связаны с библиотекой, которую вы можете увидеть на вкладке Build Phases нашего проекта (рисунок 3). Важно помнить, что нужно использовать рабочее пространство, созданное CocoaPods, вместо проекта, с которого мы начали. Наш проект теперь готов для нас, и мы можем начать использовать библиотеки, указанные в Podfile проекта.

Оптимизация развития какао с помощью CocoaPods - этапы сборки
Рисунок 3

Очевидно, что CocoaPods облегчает быструю настройку проекта с несколькими зависимостями. Тем не менее, обновление зависимостей также становится проще. Если одна из зависимостей вашего проекта получила серьезное обновление, и вы хотите использовать это обновление в своем проекте, тогда все, что вам нужно сделать, это обновить Podfile вашего проекта и запустить pod update в командной строке. CocoaPods обновит зависимости вашего проекта для вас.


У драгоценного камня CocoaPods есть еще много уловок в рукаве. Несмотря на то, что вы можете использовать веб-сайт CocoaPods для просмотра списка доступных модулей, самоцвет CocoaPods также позволяет перечислять ( list ) и искать ( search ) доступные спецификации модулей. Откройте новое окно терминала и введите команду pod search progress для поиска библиотек, которые содержат слово progress . Преимущество поиска модулей с помощью командной строки заключается в том, что вы видите только ту информацию, которая важна для вас, например, источник модуля и доступные версии.

Запустите команду pod (без каких-либо опций), чтобы увидеть полный список доступных опций. Руководство CocoaPods превосходно, поэтому обязательно прочитайте его, если у вас возникнут проблемы или у вас возникнут вопросы.


Теперь у вас должно быть общее представление о CocoaPods, чтобы вы могли использовать CocoaPods в своей разработке. Как только вы начнете использовать CocoaPods, есть вероятность, что вы не сможете жить без него. Несмотря на то, что я слышал о CocoaPods много раз, мне потребовалось некоторое время, чтобы осуществить переход. Однако, как только я начал использовать CocoaPods, я не создал ни одного проекта без него. Я уверен, что вам понравится, как только вы попробуете. Это не только сэкономит ваше время, но и облегчит вашу жизнь разработчика.