Какао-стручки и Карфаген
У меня был проект с Карфагеном и Кокоаподами. У них обоих есть одна общая зависимость (если быть точным, PureLayout). Странно, но проект прекрасно компилируется без каких-либо ошибок по поводу переопределения класса и т. Д. Итак, вопрос в том, почему он работает и какая версия зависимости фактически используется, когда я вызываю методы PureLayout - методы Карфагена или Кокоапода?
2 ответа
Carthage
а также CocoaPods
очень разные с точки зрения построения зависимостей и интеграции их в проект.
CocoaPods - это централизованный менеджер зависимостей, который будет строить ваши зависимости и интегрировать их непосредственно в проект, создавая новые .xcworkspace
рабочая среда. Это означает, что вы получаете доступ к зависимостям сборки сразу после сборки.
Carthage, с другой стороны, является децентрализованным менеджером зависимостей, и он оставляет вам задачу интеграции зависимостей в ваш проект. Карфаген строит рамки, указанные в Cartfile
и перемещает их в Carthage/Builds
папка. После процесса сборки вы должны интегрировать и управлять зависимостями.
В вашем случае, когда вы строите свой PureLayout
Зависимость от CocoaPods и Carthage, CocoaPods интегрировала его в проект, и Carthage оставил вам сборки в Carthage/Builds
Это означает, что вы использовали только версию сборки CocoaPods PureLayout
,
Также не рекомендуется использовать несколько менеджеров пакетов / зависимостей. Вы должны придерживаться одного и чувствовать себя комфортно с ним.
Когда вы не используете Dependency manager
как разработчик вы несете ответственность за:
- найти зависимость
- разрешение графа зависимостей и управление версиями
- загрузка исходников
- добавить зависимость в Xcode
И когда вы решите обновить зависимость, вы должны начать этот процесс с самого начала.
Dependency manager
это инструмент, который помогает пользователю добавить зависимость в проект с минимальными возможностями
CocoaPods
[О] является открытым исходным кодом,централизованный менеджер зависимостей для Swift и Objective-C проектов какаокоторая записывается на Ruby. ПоддерживаетDynamic Frameworks
а также Static Libraries
[Лента новостей]
Заметки:
- В CocoaPods должно быть рабочее пространство
- Потребительский проект не имеет четкого представления о зависимостях
- Все зависимости перестраиваются каждый раз, когда вы строите проект.
Carthage
[О] является открытым исходным кодом,децентрализована менеджер зависимостей для Swift и Objective-C проектов какаокоторая записывается на Swift. Он поддерживаетDynamic Frameworks
а также Static Libraries
Заметки:
- Как разработчик потребительского проекта вы несете ответственность за настройку Xcode с зависимостью. Он создает дополнительные шаги в IDE
- Как разработчик зависимостей у вас нет некоторых инструментов (например, подспецификации)
CocoaPods против Карфагена
CocoaPods
(по умолчанию) автоматически создает и обновляет рабочую область XCode для вашего приложения и всех зависимостей.
Carthage
создает двоичные файлы фреймворка, используя сборку Xcode, но несет ответственность за их интеграцию до пользователя.
CocoaPods
подход легче использовать, в то время как Carthage’s
гибкий и ненавязчивый.
Carthage
был создан как децентрализованный менеджер зависимостей. Отсутствует централизованный список проектов, который сокращает объем работ по техническому обслуживанию и позволяет избежать какой-либо центральной точки отказа. Тем не менее, обнаружение проекта является более сложным - пользователи должны прибегнуть к страницам GitHub Trending или аналогичным.
CocoaPods
Проекты также должны иметь так называемый файл podspec, который включает метаданные о проекте и определяет, как он должен быть построен.
Carthage
использует сборку XCode для построения зависимостей, вместо того, чтобы интегрировать их в одно рабочее пространство, у него нет аналогичного файла спецификации, но ваши зависимости должны включать в себя собственный проект XCode, который описывает, как создавать свои продукты.
В конечном итоге мы создали Carthage
потому что мы хотели самый простой инструмент - dependency manager
это делает работу, не беря на себя ответственность XCode и не создавая дополнительную работу для авторов платформы.
CocoaPods
предлагает множество удивительных функций, которые Carthage
никогда не будет, за счет дополнительной сложности. Для более подробной информации здесь
package manager
это инструмент, который автоматизирует процесс установки, обновления, настройки и удаления программного обеспечения или, в данном случае, внутри нашего приложения.
CocoaPods
этоcentralized dependency manager
(основан на основном репозитории, который называется Specs и содержит все спецификации инфраструктуры) для проектов Какао Swift и Objective-C. Он с открытым исходным кодом и был построен с Ruby многими волонтерами и сообществом открытого исходного кода.
✓ преимущества
- Вы можете искать зависимость на официальном сайте CocoaPods.
- Поддерживает оба
Dynamic Frameworks
а такжеStatic Libraries
(начиная с версии 1.5.0). - Автоматически управлять зависимостями зависимости. Если зависимость зависит от другой зависимости, CocoaPods будет обрабатывать ее для вас.
- Любой может легко определить, какие зависимости использует ваше приложение.
- Легко проверить, доступна ли новая версия зависимости, с помощью команды
pod outdated
, - Если зависимость поддерживает это, вы можете попробовать зависимость, прежде чем интегрировать ее в свой проект, используя команду
pod try <name>
, - Имеет официальное приложение для Mac, чтобы легко управлять зависимостями приложений.
- Почти каждый фреймворк поддерживает CocoaPods.
✕ Недостатки
- При первой установке ваших зависимостей вам придется долго ждать, даже если она одна, поскольку CocoaPods придется загружать основной репозиторий Specs на ваш Mac. Это также будет происходить с каждой командой pod update, когда вы захотите обновить свои зависимости.
- Ваш основной проект будет изменен, чтобы иметь возможность использовать все ваши зависимости. Также верно, что вы можете удалить интеграцию CocoaPods с помощью команды pod deintegrate.
- Каждый раз, когда вы строите свой проект, все ваши зависимости также будут построены, что приводит к снижению времени сборки.
Carthage
этоdecentralized dependency manager
(В отличие отCocoaPods
у вас нет основного репозитория Specs, и проверка устаревших зависимостей означает проверку каждого репозитория зависимостей вместо единственного централизованного) для проектов Swift и Objective-C Cocoa. Он с открытым исходным кодом и построен с помощью Swift сообществом с открытым исходным кодом.
✓ преимущества
- Поддерживает как]Dynamic Frameworks], так и]Static Libraries] (начиная с версии 0.30.0).
- Автоматически управлять зависимостями зависимости. Если зависимость зависит от другой зависимости, Carthage будет обрабатывать ее для вас.
- Любой, кто находится внутри проекта, легко узнает, какие зависимости использует ваше приложение.
- Легко проверить, доступна ли новая версия зависимости, используя
carthage outdated
команда. - Ваш проект строится быстрее по сравнению с
CocoaPods
Карфаген только строит рамки один раз (когда вы вызываетеcarthage update
или жеcarthage bootstrap
команда). - Ваш проект остается нетронутым, так как вы добавите только фреймворки и новый этап сборки.
✕ Недостатки
- (Слишком) много шагов, из-за которых легко пропустить добавление новой зависимости в фазу сборки Карфагена.
- Не каждый каркас поддерживает Карфаген.