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, описаны здесь.
Вот несколько советов, на которые стоит обратить внимание:
- Убедитесь, что версия вашей платформы не ниже, чем у subdepencie.
- Статические библиотеки, которые вы хотите импортировать в проект, должны быть добавлены как 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
Если возникнут проблемы, исправьте ошибки в своем проекте и запустите снова…
Есть несколько моментов, на которые следует обратить внимание:
- Исправьте предупреждение в вашем проекте. Если будет много предупреждений, линт не пройдет. (хотя вы можете пройти, используя "- allow-warnings")
- Если вы не можете понять, в чем проблема, запустите линтер с «- no-clean» и проверьте файл проекта (линтер укажет путь к нему)
- Если у вас есть зависимости от сторонних модулей, вам следует использовать ключевое слово ’- use-libraries’
- Если вы импортируете статические библиотеки, проверьте, поддерживают ли они архитектуры 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
Выполнено !!!
Теперь вы можете отправить свои собственные библиотеки и стать частью мира, который вносит свой вклад. Не бойтесь создавать свои собственные решения и делиться ими с другими разработчиками.
Это первое задание, и если у вас есть какие-либо улучшения или мысли по поводу моих сообщений, пожалуйста, не стесняйтесь делиться ими в разделе комментариев, так как мы все здесь, чтобы получить некоторые ценные знания 🖖
Гуга удачи;)