Какао-стручки и Карфаген

У меня был проект с Carthage и Cocoapods. У них обоих есть одна общая зависимость (точнее, PureLayout). Странно, но проект компилируется нормально, без ошибок переопределения класса и т. Д. Итак, вопрос: почему он работает и какая версия зависимости фактически используется, когда я вызываю методы PureLayout - метод Карфагена или Кокоапода?


person Alexander Doloz    schedule 10.06.2016    source источник
comment
вот хорошее объяснение medium.com/ios-os- x-development /   -  person Sumit singh    schedule 22.11.2017


Ответы (2)


Carthage и CocoaPods очень разные с точки зрения построения зависимостей и их интеграции в проект.

CocoaPods - это централизованный диспетчер зависимостей, который создает ваши зависимости и интегрирует их непосредственно в проект, создавая новое .xcworkspace рабочее пространство. Это означает, что вы получаете доступ к зависимостям сборки сразу после сборки.

С другой стороны, Carthage - это децентрализованный менеджер зависимостей, который оставляет вам задачу интеграции зависимостей в ваш проект. Carthage создает каркасы, указанные в Cartfile, и перемещает их в папку Carthage/Builds. После процесса сборки вам нужно интегрировать и управлять зависимостями.

В вашем случае, когда вы строите свою PureLayout зависимость с CocoaPods и Carthage, CocoaPods интегрировал ее в проект, и Carthage оставил вам сборки в Carthage/Builds, что означает, что вы использовали только версию сборки CocoaPods PureLayout.

Кроме того, использование нескольких менеджеров пакетов / зависимостей - плохая практика. Вы должны придерживаться одного и чувствовать себя комфортно с ним.

person Said Sikira    schedule 10.06.2016
comment
Да, если я не связал проект с фреймворком, созданным Carthage, неудивительно, что версия Cocoapods работает. Но я сделал. Теперь он находится в разделе «Связанные фреймворки и библиотеки». Вот почему я удивлен. - person Alexander Doloz; 10.06.2016

Диспетчер зависимостей 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]

person yoAlex5    schedule 09.12.2019