Статьи

Создание CocoaPods

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

Для этого урока у меня есть класс, который форматирует телефонные номера, которые я хотел бы превратить в CocoaPod. Моя библиотека форматирования телефона состоит из файлов классов JKEPhoneNumberFormatter.h и JKEPhoneNumberFormatter.m и файла README.md .

Для начала выполните следующую команду, чтобы убедиться, что у вас установлена ​​последняя версия CocoaPods. Команда установит CocoaPods, если он еще не установлен, и обновит, если он установлен и нуждается в обновлении.

 [sudo] gem install cocoapods 

Использование команды sudo зависит от вашей установки Ruby. Подробнее об этом в предыдущем уроке .

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

Чтобы проверить версию CocoaPods, запустите pod --version . На момент написания этой статьи последняя версия 0.33.1.

Существуют различные файлы, которые вам нужно включить в ваш CocoaPod. К ним относятся файлы классов, Podspec, лицензия, ресурсы, используемые в вашей библиотеке, и демонстрационный проект, который показывает использование вашего Pod (запускается, когда пользовательский pod try [LIB_NAME] посмотреть, что он делает, прежде чем использовать его в проекте). ).

Вы можете создать свою собственную структуру каталогов Pod и файлы или использовать команду, которую CocoaPods делает доступной, которая создает структуру библиотеки шаблонов, чтобы быстро начать работу. При этом создается файл Podspec (мы посмотрим, что это будет позже в статье), файл лицензии, readme и демонстрационный проект с тестовыми файлами и Podfile .

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

 pod lib create [pod name] 

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

Ниже приведен пример структуры каталогов, созданной после выполнения команды. После того, как файлы сгенерированы, проект открывается в Xcode.

 Example JKEPhoneNumberFormatter JKEPhoneNumberFormatter.xcodeproj JKEPhoneNumberFormatter.xcworkspace Podfile Podfile.lock Pods Tests JKEPhoneNumberFormatter.podspec LICENSE Pod Assets Classes README.md 

Мы рассмотрим, как вручную создать Pod. Преимущество этого метода в том, что вы получаете компактную структуру библиотеки, содержащую только то, что вам нужно. С генератором вам, возможно, придется просмотреть созданные файлы, удалив ненужные файлы. Разумеется, у генератора есть свои преимущества, например, быстрая настройка структуры библиотеки и предоставление вам информации о том, что обычно ожидается в составе библиотеки Pod. Какой метод использовать, это вопрос предпочтения.

Для начала я поместил мои файлы Classes папку Classes . Это не является обязательным требованием, но для удобства использования и удобства чтения лучше выделить отдельные части модуля в папках. Имя папки также зависит от вас. Другим распространенным соглашением об именах является присвоение папке имени библиотеки, например, в моем случае папка будет помечена как JKEPhoneNumberFormatter .

Я включил демонстрационный проект, который просто показывает, как работает ваша библиотека. Проект представляет собой простое приложение iPhone для одного представления, которое импортирует класс JKEPhoneNumberFormatter и использует его метод для вывода отформатированного номера телефона.

Я также включил файлы README и LICENSE. README дает краткое описание того, что делает класс и как его использовать. Вам необходимо включить лицензию на код в вашу библиотеку, иначе она не будет принята в транк CocoaPods, который используется для публикации блоков (подробнее о транке CocoaPods позже). Если вы не уверены, какую лицензию использовать, вы можете прочитать о различных лицензиях на программное обеспечение на tl; dr Legal . Это полезный веб-сайт, в котором кратко изложены различные условия лицензии на программное обеспечение в понятной форме, без юридических терминов.

Ниже моя структура каталогов.

 Classes JKEPhoneNumberFormatter.h JKEPhoneNumberFormatter.m Demo AddressBook.xcodeproj AddressBook AddressBookTests README.md LICENSE 

Затем мы создаем файл Podspec в корне нашей структуры библиотеки. Это файл, который описывает версию библиотеки Pod. Он содержит подробную информацию о модуле, включая его номер версии, местоположение источника, зависимости и т. Д.

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

 pod spec create JKEPhoneNumberFormatter 

Файл Podspec написан на Ruby и содержит спецификацию Pod. Сгенерированный шаблон имеет список атрибутов с комментариями, объясняющими, для чего они предназначены. Окончательный файл спецификаций будет зависеть от вашей библиотеки и информации, которую вы выбрали для предоставления. Руководства CocoaPods содержат примеры разных спецификаций для разных типов библиотек.

Ниже мой последний файл спецификации.

Я удалил все комментарии и некоторые атрибуты.

 Pod::Spec.new do |s| s.name = "JKEPhoneNumberFormatter" s.version = "0.1.0" s.summary = "NSFormatter subclass for formatting phone numbers." s.homepage = "https://github.com/echessa/JKEPhoneNumberFormatter" s.license = { :type => "MIT", :file => "LICENSE" } s.author = .source = { :git => "https://github.com/echessa/JKEPhoneNumberFormatter.git", :tag => "0.1.0" } s.source_files = "Classes", "Classes/*.{h,m}" s.requires_arc = false end 

Я включил только несколько атрибутов, а именно: имя, версия, сводка, домашняя страница, лицензия, автор, источник, require_arc и source_files. Я перенес библиотеку в Github и добавил тег 0.1.0 чтобы отметить номер версии. Помимо git, поддерживаются также следующие исходные атрибуты: hg, bzr, svn и HTTP. В шаблонах спецификаций перечислены доступные атрибуты, вы можете редактировать их в соответствии со своими потребностями. Используемый синтаксис довольно прост, но если у вас возникнут проблемы, вы можете прочитать больше об используемом синтаксисе Spec .

Как только вы закончите редактирование, запустите команду pod spec lint чтобы проверить, действителен ли ваш spec-файл. Если есть отсутствующий атрибут, который требуется, синтаксическая ошибка, проблема с доступом к исходному репозиторию или любая другая проблема, вы получите сообщение об ошибке.

 pod spec lint JKEPhoneNumberFormatter.podspec 

После того, как спецификация прошла проверку, ваша библиотека готова для публикации в хранилище спецификаций CocoaPods.

До версии 0.33 CocoaPods отправка Pod включала в себя создание запросов на Github. Это оказалось неэффективным, и сопровождающим CocoaPods было трудно управлять репозиториями. Время от времени Podspecs будет представлен без прохождения pint pod lint и должен будет быть отклонен во время проверки командой. Это ручное рассмотрение не было масштабируемым, поскольку CocoaPods стал более популярным. Также было трудно отслеживать несанкционированные коммиты от людей, отличных от первоначального автора (ов) библиотеки.

Ствол CocoaPods был запущен для решения этих проблем. Это веб-сервис, который позволяет разработчикам публиковать Pod прямо из командной строки, без необходимости создавать pull-запрос.

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

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

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

 pod trunk register [email protected] ='Home Desktop' 

На указанный вами адрес электронной почты будет отправлено письмо со ссылкой для подтверждения.

Чтобы опубликовать ваш Pod, выполните следующую команду с именем вашего файла podspec.

 pod trunk push JKEPhoneNumberFormatter.podspec 

Он сначала проверит ваш podspec, прежде чем нажать CocoaPod.

Вот и все. Вы только что создали CocoaPod и сделали его доступным в репозитории Pod для других пользователей. Вы должны отметить, что это будет общедоступный модуль. CocoaPods также позволяет создавать частные стручки . Шаги для создания Pod такие же, но вместо того, чтобы использовать Trunk для передачи в общедоступную спецификацию репозитория, вы перемещаетесь в свой собственный репозиторий. Я не буду вдаваться в подробности этого процесса, но если вам нужна дополнительная информация по этому вопросу, в руководствах по CocoaPods есть отличное описание того, как это сделать. Преимущество частных модулей состоит в том, что вы можете иметь некоторые внутренние библиотеки, которые легко доступны членам вашей организации через CocoaPods.

Вывод

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