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

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

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

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

pod "AFNetworking" , "1.3.2"

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

3 ответа

Решение

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

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

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

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

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

[Local podspec]
[Версия CocoaPods]
[CocoaPods против Carthage]

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

      pod 'Analytics', :path => '~/your-local-file/Analytics' 

Даже вы можете установить файл модуля из источника git, а также вы можете проверить нужную ветку. Вы можете использовать его так;

      pod 'Analytics', :git => 'https://username@bitbucket.org/username/your-Analytics-repo.git.com/', :branch => 'Prod'
Другие вопросы по тегам