CocoaPods - это менеджер зависимостей для собственных проектов iOS / macOS. Он имеет тысячи библиотек и может помочь вам элегантно масштабировать ваши проекты, разделяя не весь набор библиотек вашего проекта, а только один файл Pod, содержащий всю информацию о зависимостях. В конечном итоге его цель - улучшить обнаружение и участие в сторонних библиотеках с открытым исходным кодом за счет создания более централизованной экосистемы.

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

Во-первых, давайте посмотрим, что такое коконады:

Здесь вы можете видеть, что cocoapods хранит все зависимости где-то еще (например, код на GitHub, gitlab и т. Д.), А также информацию о подах в репозиториях cocoapods.

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

Информация о подах - это фактически файл .podspec, содержащий всю информацию о библиотеке (см. Ниже). Итак, в основном podspec выглядит так:

Pod::Spec.new do |s|
 s.name = ‘MyLibrary’
 s.version = ‘0.1.0’
 s.summary = ‘Its awesome’
 s.description = <<-DESC
 Helps you fly.
 DESC
 s.homepage = ‘http://example.com’
 s.screenshots = ‘www.example.com/screenshots_1’
 s.license = { :type => ‘MIT’, :file => ‘LICENSE’ }
 s.author = { ‘Maxud’ => ‘[email protected]’ }
 s.source = { :git => ‘http://github.com', :tag => s.version.to_s }
 s.social_media_url = ‘https://twitter.com/<TWITTER_USERNAME>'
 s.ios.deployment_target = ‘7.0’
 s.platform = :ios, ‘7.0’
 # s.public_header_files = ‘Pod/Classes/**/*.h’
 s.dependency ‘AFNetworking’
end

Все ключи, доступные для podspec, описаны здесь.

Вот несколько советов, на которые стоит обратить внимание:

  1. Убедитесь, что версия вашей платформы не ниже, чем у subdepencie.
  2. Статические библиотеки, которые вы хотите импортировать в проект, должны быть добавлены как vendored_libraries и быть подзависимостями:
s.subspec ‘StaticLib’ do |dss|
 dss.preserve_paths = ‘<PATH_TO_LIB_HEADER>/*.h’
 dss.vendored_libraries = ‘Project/Classes/crypto_libs_DSS/libdss_mobile_dyn_fat.a’
 dss.libraries = ‘dss_mobile_dyn’
 end

3. Если у вас есть настройки окружения в файле префикса вашего проекта - добавьте путь к файлу префикса:

s.prefix_header_file = ‘Project-Prefix.pch’

4. Если у вас есть какие-либо ресурсы, такие как модели CoreData, или любой нужный вам файл (не изображения), используйте подспек s.resources.

5. Подподы могут быть импортированы как:

s.dependency ‘AFNetworking’

Это было краткое описание файла podspec. Но как это создать? В CocoaPods есть хороший набор инструментов для создания собственных подов. Во-первых, давайте установим cocoapods:

sudo gem install cocoapods

Затем давайте загрузим шаблон для вашего коконапода:

cd ~/<Path to library where pod will exist>
pod lib create MyPodTools

Он задаст несколько вопросов:

What language do you want to use?? [ ObjC / Swift ]
> ObjC
 
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
 
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
 
Would you like to do view based testing? [ Yes / No ]
> No
 
What is your class prefix?
> AK

Отвечайте на них, исходя из ваших планов.

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

В папке Pods- ›Development pods вы можете увидеть файл RepleceMe.m. Итак, делайте то, что он говорит, удалите это :-) И добавьте туда файлы вашего проекта (или создайте их, если вы только начали). Дважды проверьте, не добавлена ​​ли статическая библиотека в комплект. Также не забудьте изменить файл podspec, чтобы указать подходящие пути для ваших библиотек и файлов проекта.

Далее, один из самых интересных и важных шагов - это… линтинг. Да, вы должны линтовать вашу библиотеку и спецификацию, прежде чем отправлять их в cocoapods (cocoapods отклонят библиотеки, которые не проходят линтинг).

pod lib lint MyPodTools.podspec

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

Есть несколько моментов, на которые следует обратить внимание:

  1. Исправьте предупреждение в вашем проекте. Если будет много предупреждений, линт не пройдет. (хотя вы можете пройти, используя "- allow-warnings")
  2. Если вы не можете понять, в чем проблема, запустите линтер с «- no-clean» и проверьте файл проекта (линтер укажет путь к нему)
  3. Если у вас есть зависимости от сторонних модулей, вам следует использовать ключевое слово ’- use-libraries’
  4. Если вы импортируете статические библиотеки, проверьте, поддерживают ли они архитектуры x86_x64 и i386, потому что ваша библиотека будет построена на симуляторе.

Если все в порядке, поздравляю. 80% позади.

Теперь вам нужно поработать с git.

Сделайте фиксацию и отметьте последнюю (это будет указывать на версию вашего модуля)

git commit
git tag 0.1.0 (#or any version number you want)`
git push origin 0.1.0 (#number here and tag number above should be same)

Теперь сделайте линзы на своей спекуляции. Он проверяет настройки версии, репозиторий и т. Д.

pod spec lint MyPodTools.podspec

Это будет немного сложно. Но вы представляете библиотеку миру. Вы хотите видеть отчеты об ошибках на github каждую секунду?)

А теперь вуала. Продвиньте свою библиотеку:

pod trunk push MyPodTools.podspec

Если вы сделаете это в первый раз, вас попросят зарегистрироваться:

pod trunk register [email protected] ‘nuves101’ — description=’Mac’

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

После регистрации попробуйте еще раз:

pod trunk push MyPodTools.podspec

Выполнено !!!

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

Это первое задание, и если у вас есть какие-либо улучшения или мысли по поводу моих сообщений, пожалуйста, не стесняйтесь делиться ими в разделе комментариев, так как мы все здесь, чтобы получить некоторые ценные знания 🖖

Гуга удачи;)