Ответ
Carthage — это децентрализованный менеджер зависимостей, который компилирует зависимости в бинарные фреймворки, которые вы затем вручную добавляете в проект.
Основные команды и workflow:
- Установка:
brew install carthage - Создание
Cartfile:# Cartfile github "Alamofire/Alamofire" ~> 5.6 github "ReactiveX/RxSwift" "6.5.0" binary "https://example.com/MyFramework.json" >= 2.3 - Загрузка и компиляция:
carthage update --platform iOS- Скачивает исходники и компилирует фреймворки в папку
Carthage/Build/iOS. - Создает файл
Cartfile.resolvedс точными версиями.
- Скачивает исходники и компилирует фреймворки в папку
- Интеграция в Xcode: Вручную перетащите
.frameworkфайлы изCarthage/Build/iOSв General > Frameworks, Libraries, and Embedded Content вашей таргет. На этапе Build Phases добавьте скриптRun Script:/usr/local/bin/carthage copy-frameworksИ укажите пути к фреймворкам в Input Files (например,
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework).
| Сравнение с другими менеджерами: | Особенность | Carthage | CocoaPods | Swift Package Manager (SPM) |
|---|---|---|---|---|
| Подход | Децентрализованный, только фреймворки | Централизованный, интегрирует исходники | Нативный, интегрирован в Xcode | |
| Изменение проекта | Минимальное (ручное добавление фреймворков) | Значительное (создает workspace) | Умеренное (добавляет пакеты) | |
| Скорость обновления | Медленнее (нужна компиляция) | Средняя | Быстрая (есть бинарные зависимости) | |
| Поддержка бинарных зависимостей | Да (через binary) |
Ограниченная | Да (нативно) |
Когда выбирать Carthage?
- Когда нужен полный контроль над процессом сборки и интеграции.
- В больших проектах, где важно избежать «загрязнения» workspace.
- Для использования предкомпилированных бинарных фреймворков (ускоряет CI/CD).
Главный недостаток: Отсутствие автоматического разрешения транзитивных зависимостей на уровне проекта — вы должны вручную добавить все необходимые фреймворки.