У меня был проект с Carthage и Cocoapods. У них обоих есть одна общая зависимость (точнее, PureLayout). Странно, но проект компилируется нормально, без ошибок переопределения класса и т. Д. Итак, вопрос: почему он работает и какая версия зависимости фактически используется, когда я вызываю методы PureLayout - метод Карфагена или Кокоапода?
Какао-стручки и Карфаген
Ответы (2)
Carthage
и CocoaPods
очень разные с точки зрения построения зависимостей и их интеграции в проект.
CocoaPods - это централизованный диспетчер зависимостей, который создает ваши зависимости и интегрирует их непосредственно в проект, создавая новое .xcworkspace
рабочее пространство. Это означает, что вы получаете доступ к зависимостям сборки сразу после сборки.
С другой стороны, Carthage - это децентрализованный менеджер зависимостей, который оставляет вам задачу интеграции зависимостей в ваш проект. Carthage создает каркасы, указанные в Cartfile
, и перемещает их в папку Carthage/Builds
. После процесса сборки вам нужно интегрировать и управлять зависимостями.
В вашем случае, когда вы строите свою PureLayout
зависимость с CocoaPods и Carthage, CocoaPods интегрировал ее в проект, и Carthage оставил вам сборки в Carthage/Builds
, что означает, что вы использовали только версию сборки CocoaPods PureLayout
.
Кроме того, использование нескольких менеджеров пакетов / зависимостей - плохая практика. Вы должны придерживаться одного и чувствовать себя комфортно с ним.
Диспетчер зависимостей iOS
Если вы не используете Dependency manager
в качестве разработчика, вы несете ответственность за:
- найти зависимость
- разрешение графа зависимостей и управление версиями
- загрузка исходников
- добавить зависимость в Xcode
И когда вы решите обновить зависимость, вы должны начать этот процесс с самого начала.
Dependency manager
- это инструмент, который помогает пользователю добавить зависимость в проект с минимальными возможностями
CocoaPods
[About] - это с открытым исходным кодом , централизованный менеджер зависимостей для проектов Swift и Objective-C Cocoa, который пишется на Ruby. Он поддерживает Dynamic Frameworks
и Static Libraries
[timeline]
Примечания:
У CocoaPods должно быть рабочее пространство
Потребительский проект не имеет четкого представления о зависимостях ‹Pods_target-name.framework›
Все зависимости перестраиваются каждый раз при сборке проекта.
Невозможно использовать разные версии модулей в одной рабочей области.
CocoaPods could not find compatible versions for pod
Carthage
[About] - это с открытым исходным кодом, децентрализованный менеджер зависимостей для проектов Swift и Objective-C Cocoa, который пишется на Swift . Он поддерживает Dynamic Frameworks
и Static Libraries
Примечания:
- Как разработчик потребительского проекта вы несете ответственность за настройку Xcode с зависимостью. Он создает дополнительные шаги в IDE.
- Как разработчик зависимостей у вас нет некоторых инструментов (например, подспецификации)
Swift Package Manager(SPM)
[About] - это open-source, децентрализованный менеджер зависимостей, который пишется на Swift. Он поддерживает динамическую и статическую библиотеки. .xcodeproj
не используется. Если вы хотите распространять закрытый исходный код (двоичный фреймворк), вы должны использовать XCFramework
[About]
* CocoaPods
по умолчанию каждый раз (после очистки или по неизвестной причине) собирает модули с открытым исходным кодом, что увеличивает время сборки (но вы можете использовать _ 14_), Carthage
и SPM
предварительная сборка фреймворка по умолчанию.
* закрытый исходный код позволяет закрыть исходный код и сэкономить время сборки, но могут возникать проблемы с ABI stability
[About] sup>