Carthage – это менеджер зависимостей для проектов iOS и macOS, который позволяет разработчикам просто и эффективно интегрировать сторонние библиотеки в свои приложения. В отличие от других инструментов, таких как CocoaPods, Carthage делает ставку на минимализм и ненавязчивость: он не меняет структуру проекта и требует лишь простого текстового файла Cartfile со списком зависимостей. Это сделало его популярным выбором среди разработчиков, которые хотят сохранить контроль над настройкой своего проекта, пользуясь при этом преимуществами сторонних библиотек и фреймворков.
Carthage работает, собирая бинарные фреймворки, которые затем можно интегрировать непосредственно в проекты Xcode. Такой подход позволяет разработчикам выиграть за счет более быстрой сборки и более оптимизированного процесса разработки. С Carthage зависимости можно легко добавлять, обновлять и управлять ими без сложных конфигурационных файлов и нежелательных изменений в проекте. Взамен собранные фреймворки добавляются в Xcode вручную. Это делает Carthage хорошим инструментом для тех, кому нужно простое, но мощное решение для управления зависимостями в проектах разработки под iOS и macOS.
Carthage – это децентрализованный менеджер зависимостей для проектов iOS и macOS. Он получает и собирает сторонние библиотеки в виде фреймворков, которые разработчик затем сам добавляет в свой проект Xcode, без автоматического изменения файла проекта. Это дает полный контроль над структурой проекта и может ускорить сборку, поскольку зависимости собираются только при их обновлении. Carthage в основном используется как более простая альтернатива CocoaPods, тогда как Swift Package Manager – встроенное решение Apple для управления пакетами.
More about Carthage
Carthage – это менеджер зависимостей для iOS и macOS, который предлагает простой и гибкий способ интеграции сторонних библиотек в проекты. В отличие от других инструментов, которые автоматически меняют настройку проекта, Carthage делает ставку на минимальную настройку и дает разработчикам свободу управлять своими проектами без лишних ограничений.
С технической точки зрения Carthage работает, собирая бинарные фреймворки из исходного кода или загружая готовые, что позволяет разработчикам включать эти фреймворки непосредственно в свои проекты Xcode. Это означает, что Carthage не меняет файлы проекта, а вместо этого создает папку «Carthage/Build», в которой хранятся скомпилированные фреймворки. Такой подход дает разработчикам полный контроль над структурой проекта и зависимостями.
Carthage поддерживает три основные функции, каждая из которых предлагает свой способ работы с зависимостями:
Сборка зависимостей: Carthage может автоматически собрать все зависимости, указанные в «Cartfile». Это позволяет разработчикам сосредоточиться на собственном коде, пока Carthage занимается компиляцией внешних библиотек. Эта функция идеально подходит для проектов, которым нужно несколько сторонних библиотек.
Обновление зависимостей: Одной командой Carthage может обновить все зависимости до новейших версий, удовлетворяющих требованиям к версиям в Cartfile. Это упрощает поддержание библиотек в актуальном состоянии, включая исправления безопасности, что важно для сохранения совместимости и безопасности.
Интеграция фреймворков: Carthage генерирует фреймворки, которые разработчик сам добавляет в проект Xcode, как правило в раздел «Frameworks, Libraries, and Embedded Content». Это требует ручного шага, но дает полное понимание того, какие именно библиотеки входят в проект, и позволяет легко пользоваться новыми функциями и улучшениями сторонних библиотек.
Одна из главных сильных сторон Carthage – простота и гибкость. Избегая автоматических изменений проекта, Carthage позволяет разработчикам сохранять контроль над своими проектами. Это снижает риск конфликтов в файле проекта и упрощает интеграцию новых зависимостей без нарушения существующих структур проекта.
Подход Carthage к управлению зависимостями также экономит время в повседневной работе. Собирая зависимости только при их добавлении или обновлении и избегая лишних изменений проекта, Carthage сводит к минимуму время и ресурсы, необходимые для сопровождения проекта. Это делает его хорошим инструментом для разработчиков, которые хотят оптимизировать свои рабочие процессы и сосредоточиться на поставке качественного программного обеспечения.
На практике Carthage оказал значительное влияние на то, как разработчики управляют зависимостями в проектах iOS и macOS. Его использовали как небольшие, так и крупные команды разработки, чтобы поддерживать свои проекты актуальными, безопасными и простыми в сопровождении. Однако сегодня развитие Carthage значительно замедлилось, и большинство библиотек теперь ориентируются в первую очередь на Swift Package Manager.
В целом Carthage – это инструмент, который сочетает простоту, гибкость и эффективность в решении, делающем управление зависимостями более прозрачным как для отдельных разработчиков, так и для больших команд. Простая настройка и минимальное вмешательство в структуру проекта сделали его полезным инструментом в разработке приложений, где необходимы быстрые и безопасные интеграции.
Frequently asked questions about Carthage
Что такое Carthage и как он работает на практике?
Carthage – это децентрализованный менеджер зависимостей для проектов iOS, macOS, tvOS и watchOS, написанных на Swift и Objective-C. Центрального реестра пакетов нет. Вместо этого каждая зависимость указывает непосредственно на Git-репозиторий, как правило на GitHub.
Зависимости указываются в текстовом файле Cartfile в корневой папке проекта. При выполнении команды carthage update Carthage находит подходящие версии, загружает исходный код в папку Carthage/Checkouts и собирает каждую библиотеку собственными инструментами сборки Xcode. Готовые фреймворки помещаются в Carthage/Build.
Carthage не меняет файл проекта Xcode. Разработчик добавляет собранные фреймворки в раздел Frameworks, Libraries, and Embedded Content соответствующего таргета. Это дает полный контроль над настройкой проекта, но требует немного больше ручной работы, чем инструменты с автоматической интеграцией.
Как установить Carthage и добавить библиотеку?
Чаще всего Carthage устанавливается через Homebrew командой brew install carthage. Кроме того, установочный пакет можно загрузить из релизов проекта на GitHub.
Библиотека обычно добавляется в четыре шага:
- В корневой папке проекта создается файл
Cartfileсо строкой вродеgithub "Alamofire/Alamofire" ~> 5.0. - Команда
carthage update --use-xcframeworks --platform iOSзагружает и собирает библиотеку. - Готовый
.xcframeworkизCarthage/Buildперетаскивается в Frameworks, Libraries, and Embedded Content в таргете приложения. - Для динамических фреймворков выбирается Embed & Sign.
Оператор ~> означает, что более новые версии принимаются, пока мажорная версия остается прежней. После этого библиотеку можно использовать в коде с помощью import Alamofire.
В чем разница между Cartfile и Cartfile.resolved?
Cartfile описывает, какие зависимости нужны проекту и каким требованиям к версиям они должны соответствовать, например ~> 5.0, >= 2.1 или определенная ветка. Файл редактируется вручную и выражает намерение.
Cartfile.resolved генерируется автоматически и содержит точные версии или коммиты, которые были фактически выбраны, в том числе для собственных зависимостей зависимостей. Файл работает как блокировка, так что каждый участник команды и каждый сервер сборки получает в точности один и тот же код.
Разница проявляется в командах:
carthage updateнаходит новейшие версии, соответствующиеCartfile, и записывает результат вCartfile.resolved.carthage bootstrapзагружает и собирает именно те версии, которые указаны вCartfile.resolved.
Поэтому оба файла следует хранить в системе контроля версий. Зависимости, используемые только во время разработки, например тестовые библиотеки, можно поместить в Cartfile.private.
Как Carthage собирает XCFrameworks и почему это важно?
Раньше Carthage собирал так называемые fat-фреймворки, в которых код для физических устройств и симулятора объединялся в один файл с помощью инструмента lipo. С выходом Xcode 12 это перестало работать, поскольку и устройства, и симуляторы на Apple Silicon используют архитектуру arm64, а одна и та же архитектура не может встречаться в одном fat-фреймворке дважды.
Решение – XCFrameworks, которые Apple представила в Xcode 11. XCFramework – это пакет с отдельным бинарным файлом для каждой платформы и варианта, например для устройства iOS и симулятора iOS. Начиная с Carthage 0.37, XCFrameworks собираются с флагом --use-xcframeworks, например carthage bootstrap --use-xcframeworks.
Результат помещается в виде папок .xcframework в Carthage/Build. Они добавляются непосредственно в таргет приложения, и прежняя фаза сборки с carthage copy-frameworks больше не нужна.
В чем разница между Carthage, CocoaPods и Swift Package Manager?
Все три инструмента решают одну и ту же задачу, но по-разному:
- Carthage децентрализован и получает зависимости непосредственно из Git-репозиториев, указанных в
Cartfile. Библиотеки собираются как бинарные фреймворки, а проект Xcode не меняется. Интеграция выполняется вручную. - CocoaPods использует центральный реестр библиотек и
Podfile. Командаpod installсоздает рабочее пространство и меняет настройку проекта, поэтому интеграция происходит автоматически, но менее прозрачно. CocoaPods сейчас находится в режиме поддержки. - Swift Package Manager (SPM) – собственный инструмент Apple, встроенный в Xcode. Пакеты добавляются непосредственно в Xcode или описываются в
Package.swift, и никакой дополнительной установки не требуется.
Carthage полезен, когда нужен полный контроль над файлом проекта и более короткое время сборки, поскольку зависимости собираются только при обновлении. Для новых проектов SPM сейчас самый распространенный выбор, так как его поддерживает большинство библиотек.
Как сократить время сборки с Carthage?
Поскольку Carthage по умолчанию собирает зависимости из исходного кода, первая сборка может занять много времени. Сократить время помогают несколько опций:
--platform iOSограничивает сборку платформами, которые проект действительно использует.--cache-buildsпропускает зависимости, которые уже были собраны в той же версии, так что пересобираются только измененные библиотеки.- Отдельные зависимости можно обновлять по одной, например с помощью
carthage update Alamofire, вместо обновления всех сразу. - Многие библиотеки предоставляют готовые фреймворки в своих релизах на GitHub, которые Carthage загружает автоматически. SDK с закрытым исходным кодом можно указать с помощью
binaryи URL-адреса JSON-спецификации.
На серверах сборки папку Carthage/Build также можно кэшировать между запусками. Многие команды исключают эту папку из Git через .gitignore и воссоздают ее с помощью carthage bootstrap.
Carthage for dummies
Carthage – это инструмент, который помогает упорядочивать небольшие строительные блоки, из которых состоят приложения, и управлять ими; они называются «зависимостями». Представьте создание приложения, которому нужны готовые детали, уже созданные другими, чтобы оно работало лучше. Carthage помогает получить эти детали и следить за ними, чтобы их не приходилось делать с нуля. Это работает немного похоже на библиотекаря, который следит за всеми книгами, нужными для проекта, чтобы писатель мог сосредоточиться на собственной истории. Это делает разработку приложений проще и быстрее, потому что чужую работу можно использовать повторно, следя за тем, чтобы все сочеталось друг с другом.