Статьи

CocoaPods: для чего он хорош?

Не совсем ничего, это точно.

Прежде чем мы рассмотрим, почему вы хотите использовать CocoaPods и как его использовать, мы должны посмотреть, что это такое.

CocoaPods — это инструмент управления зависимостями для разработки под iOS и OS X, который получил широкое распространение в сообществе Cocoa. При использовании CocoaPods вы определяете зависимости вашего проекта в файле, который CocoaPods использует для определения и разрешения зависимостей между библиотеками перед загрузкой необходимого исходного кода и связыванием его в рабочем пространстве Xcode.

Зачем использовать CocoaPods?

Начну с гипотетического сценария.

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

Вы запускаете репозитории проектов на Github (или там, где они размещены), чтобы отслеживать обновления. Когда библиотека обновляется, вы вручную обновляете ее в своем проекте. Время от времени библиотека может нарушить вашу сборку, вынудив вас вернуться к совместимой версии. Вы должны найти его и скопировать в свой проект. Добавьте больше библиотек, и вы начнете замечать, что время поддержки ваших проектных зависимостей сокращается

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

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

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

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

Чтобы получить конкретную версию модуля, укажите номер версии, и CocoaPods загрузит эту конкретную версию, чтобы вы не искали ее в коммитах.

С CocoaPods обновление ваших зависимостей легко выполняется с помощью команды pod update .

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

Еще одним преимуществом CocoaPods является то, что он генерирует файл подтверждения с информацией о лицензии всех используемых вами модулей. Без этого вам нужно будет скопировать лицензионные документы всех библиотек с открытым исходным кодом, которые вы используете, и собрать их где-нибудь в вашем проекте.

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

Установка CocoaPods

CocoaPods распространяется как гем Ruby, поэтому в вашей системе должны быть установлены Ruby и RubyGems (менеджер пакетов Ruby). Последние версии Mac OS X поставляются с установленным Ruby, поэтому вам, вероятно, не потребуется его устанавливать. Вы также можете использовать менеджер версий Ruby, например RVM, для установки Ruby в своей системе.

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

Перед установкой CocoaPods сначала обновите свой RubyGems.

 [sudo] gem update --system 

Чтобы установить CocoaPods, выполните следующую команду.

 [sudo] gem install cocoapods 

Для обеих приведенных выше команд команда sudo является необязательной и зависит от используемой установки Ruby. Если вы используете установленную по умолчанию систему Ruby, то для установки гемов вам потребуются привилегии суперпользователя, поэтому вам нужно будет включить команду sudo. Если вы используете менеджер версий Ruby, такой как RVM или rbenv , это не потребуется, и вы можете просто запустить gem install cocoapods .

Во время установки вы можете получить предупреждение с вопросом, хотите ли вы перезаписать исполняемый файл rake. Это связано с тем, что в процессе обновляется гем rake, поэтому подтвердите перезапись, набрав y .

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

Затем запустите следующее, чтобы настроить CocoaPods в вашей системе.

 pod setup 

Это создаст ~/.cocoapods/ который будет содержать все доступные спецификации общедоступных модулей, клонированные из репо с основными спецификациями CocoaPods .

Теперь мы все настроены и готовы использовать CocoaPods в нашем проекте.

Использование CocoaPods в проекте

Мы создадим простой проект, чтобы продемонстрировать, как использовать CocoaPods. Я создал простое приложение под названием TestApp. Это приложение для iPhone с одним просмотром. Я включу стручок, который форматирует числа.

Вы можете искать стручки на веб-сайте CocoaPods . Я искал «Форматтер» и получил несколько результатов для форматеров чисел, форматеров адресов, форматеров телефонов и т. Д. Список результатов включает ссылки на сайт каждого модуля, документацию и файл спецификаций.

Я буду использовать библиотеку AKNumericFormatter .

Чтобы определить зависимости для вашего проекта, вы создаете Podfile и перечисляете все библиотеки, которые вы хотите использовать, с необязательным номером версии.

Чтобы создать Podfile, с помощью Terminal перейдите в корень созданного вами приложения.

 cd /Path/to/Project/TestApp 

Запустите следующую команду, которая создаст Podfile по указанному пути к файлу.

 pod init 

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

 # Uncomment this line to define a global platform for your project # platform :ios, "6.0" target "TestApp" do end target "TestAppTests" do end 

Раскомментируйте оператор, который указывает цель вашего проекта и отредактируйте номер версии. Платформа может быть ios или osx .

 platform :ios, "7.0" 

Внутри целевого блока TestApp добавьте следующее.

 pod 'AKNumericFormatter' 

Если номер версии не указан, как в примере выше, будет выбрана последняя версия модуля.

Вы можете указать точную версию, указав конкретный номер версии. Например, pod 'AFNetworking', '1.0'

Также могут использоваться логические операторы, например, «> 0,1», «> = 0,1», «<0,1», «<= 0,1».

Пессимистический оператор ~> также можно использовать для управления разрешенными обновлениями. Например, с ~> 0.1.2 вы получите наивысшую выпущенную версию pod между v0.1.2 и v0.2, не включая 0.2.

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

Также возможно использовать модуль на вашем локальном компьютере.

 pod 'ExamplePod', :path => '~/Documents/ExamplePod' 

Или из репозитория git. Mercurial и SVN также поддерживаются.

 pod 'ExamplePod', :git => 'https://github.com/eguser/ExamplePod.git', :branch => 'dev' 

Возвращаясь к нашему примеру, после редактирования Podfile сохраните его и выполните следующую команду.

 pod install 

CocoaPods проанализирует зависимости, перечисленные в Podfile, и загрузит библиотеки в новый проект с именем Pods, который находится в созданном рабочем пространстве Xcode с именем TestApp.xcworkspace . В Терминале вы получите сообщение о том, что вам нужно использовать новое рабочее пространство.

Если ваш проект был открыт в Xcode, закройте его и вместо этого откройте рабочую область. Если вы попытаетесь запустить старый проект, он не будет построен. Вы получите сообщение об ошибке связывания.
В рабочей области будет два проекта — ваш проект (TestApp) и проект Pods. В проекте Pods есть групповая папка с вашими загруженными модулями. Теперь вы можете использовать библиотеки в вашем приложении. Не забудьте добавить импорт перед вызовом любого из методов фреймворка.

 #import "<AKNumericFormatter/AKNumericFormatter.h" 

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

Чтобы обновить зависимости вашего проекта, запустите pod update .

CocoaPods и контроль источника

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

Пробовать стручки

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

Используйте команду pod try [LIB_NAME] чтобы попробовать Pod.

 pod try AFNetworking 

Вывод

CocoaPods — это инструмент, который делает управление вашим проектом намного проще. Это может сэкономить вам много сил и времени при работе с зависимостями в вашем проекте, поскольку это значительно упрощает добавление, удаление и обновление библиотек. Чтобы узнать больше об использовании и устранении неполадок CocoaPods, ознакомьтесь с руководствами CocoaPods .