Как работают CocoaPods

Я использовал CocoaPods для некоторых своих проектов. Это круто и легко поддерживать в курсе моих зависимостей / фреймворков с открытым исходным кодом.

Но у меня есть некоторые сомнения относительно внутренней работы CocoaPods.

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

pod "AFNetworking" , "1.3.2"

Затем он правильно находит и клонирует репозиторий AFNetworking. Как это работает? Как Ruby Gems узнают, что реальный репозиторий находится на Github. Поды работают только с Github? (Потому что я видел модули только для фреймворков, доступных на Github). Если мы можем использовать модули для зависимостей не в Github (например, из Bitbuket), как мы можем добавить этот модуль в наш Podfile?


person Johnykutty    schedule 20.09.2013    source источник


Ответы (2)


CocoaPods многое делает за кулисами, чтобы все, о чем вы говорите, работало. На относительно высоком уровне фактические «поды» управляются в репозитории, который находится на Github, здесь. Здесь сторонние поставщики библиотек отправляют свои «поды» для работы с CocoaPods. Вы заметите, что если вы ищете Pod с помощью инструмента командной строки с pod search AFNetworking, вы увидите все доступные Pod, соответствующие вашему поисковому запросу.

Что касается Github по сравнению с другими сайтами, хотя репозиторий, полный спецификаций CocoaPods, живет на Github, сам CocoaPods использует просто старый Git для извлечения исходного кода из данного репозитория. Из-за этого вы можете делать спецификации из любого репозитория git, размещенного на любом сайте. Мы также поддерживаем svn, mercurial и просто старые http (s). Если вас интересует, как работают спецификации в целом, вы можете посмотреть некоторые в репозитории спецификаций, которые можно открыть в ~/.cocoapods/repos/master на своем локальный компьютер или отредактируйте его напрямую с помощью pod spec edit AFNetworking из командной строки.

person Keith Smiley    schedule 20.09.2013
comment
Большое спасибо. Еще одно сомнение. Можете ли вы сказать, как я могу добавить свои фреймворки, доступные через cocoapods? - person Johnykutty; 20.09.2013
comment
Ознакомьтесь с этим Dropbox spec, чтобы узнать, как это сделать. - person Keith Smiley; 20.09.2013
comment
хорошо, но как я могу добавить .podspec в репозиторий spec. Также я видел, что в каждом фреймворке есть файл .podspec. Он автоматически обновляется до спецификации репо? - person Johnykutty; 20.09.2013
comment
Я думал, что под фреймворком вы имели в виду .framework. Вам нужно будет создать свой .podspec файл, используя другие файлы в качестве примеров с помощью документов, и отправить запрос на перенос в репозиторий спецификаций. Тогда вы сможете использовать его в своем Podfile - person Keith Smiley; 20.09.2013

Какао-стручки

CocoaPods - это централизованное управление зависимостями. Он работает Podfile для чтения зависимости и версии. Pod проект будет создан в рабочей области. CocoaPods реализует подход Implicitly dependency [About]:

На стороне клиента у вас есть Podfile. Ядро Podfile - это под:

Когда Podfile считывается (во время pod install или pod update) Cocoapods, создается граф неявных и явных зависимостей. После этого менеджер должен найти каждый источник в .podspec, который обычно размещен на каком-то хосте. Вот почему Cocoapods централизован. Разработчик фреймворка несет ответственность за создание этого файла и его поддержку. .podspec описывает метаинформацию о структуре, такую ​​как зависимости, подспецификации и т. Д. Основная ее часть - это source, которая сообщает Cocoapods, где размещен источник, и эти источники будут загружены в Pod проект. Cocoapods использует рабочее пространство для автоматизации процесса сборки и управления неявными зависимостями. Cocoapods настройте всю необходимую информацию в свой потребительский проект (например, поисковые запросы и т. Д.). Когда вы создаете потребительский проект, Xcode извлекает модули и собирает все вместе.

.podspec

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

Название модуля будет изменено, когда

1. <module_name>.podspec
2. <spec_variable>.name = "<module_name>"
//or
1. <spec_variable>.module_name = '<module_name>'

[Local podspec]
[Версия CocoaPods]
[диспетчер зависимостей iOS]
[исходные_файлы CocoaPods]

person yoAlex5    schedule 06.12.2019