Как работает 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
[О] подход:
Source code
Closed code
[Пример]
На стороне клиента у вас есть Podfile
. ЯдроPodfile
это стручок:
- название
- version - семантическое управление версиями
когда 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'