Какие менеджеры зависимостей используются в iOS-разработке?

Ответ

В экосистеме iOS есть три основных менеджера зависимостей:

  1. Swift Package Manager (SPM) – нативный инструмент от Apple, интегрированный в Xcode. Современный стандарт для новых проектов.

    • Преимущества: Не требует дополнительных инструментов, поддерживает семантическое версионирование, удобное управление через Xcode GUI или файл Package.swift.
    • Недостатки: Меньше возможностей для тонкой настройки по сравнению с CocoaPods.
  2. CocoaPods – менеджер зависимостей на Ruby, долгое время был самым популярным.

    • Преимущества: Огромное сообщество, богатая экосистема, мощные возможности настройки через Podfile (хуки, конфигурации для разных целей).
    • Недостатки: Требует установки Ruby и gem, создает workspace, может замедлять сборку.
      # Podfile
      target 'MyApp' do
      pod 'Alamofire', '~> 5.6'
      end
  3. Carthage – легковесный менеджер, который строит зависимости как динамические фреймворки.

    • Преимущества: Децентрализованность, не вмешивается в проект, дает больше контроля. Процесс сборки зависимостей выполняется один раз.
    • Недостарии: Необходимо вручную добавлять скомпилированные фреймворки в проект, менее автоматизирован.
      # Cartfile
      github "Alamofire/Alamofire" ~> 5.6

Рекомендация: Для новых проектов предпочтительно использовать Swift Package Manager. CocoaPods подходит для legacy-проектов или при необходимости специфических плагинов. Carthage выбирают для максимального контроля над процессом сборки.

Ответ 18+ 🔞

Так, слушай сюда, про менеджеры зависимостей на iOS. Ситуация, в общем, как в том анекдоте: есть три стула, но один из них уже почти сломался, а второй — вообще табуретка из прошлого века.

Swift Package Manager (SPM) — это наш родной, от самой Apple. Как будто тебе мама сунула в руку бутерброд с колбасой и сказала: «На, сынок, ешь, не отвлекайся». Современный стандарт, встроен прямо в Xcode, нихуя лишнего ставить не надо. Управляешь через файлик Package.swift или тыкаешь в интерфейсе. Красота, да? Но иногда хочется так тонко настроить, как в том самом старом добром инструменте, а тут — упёртый, как баран, возможностей меньше. Зато нативный, блядь.

CocoaPods — это как дедушкин «Запорожец» в гараже. Ехал долго, гремел, дымил, но довёз-таки дохуя проектов. На Ruby написан, требует установки всякой хуйни, создаёт свой workspace и может так замедлить сборку, что пока всё подтянется, можно сходить, чайку попить, да и поспать немного. Зато, ёпта, сообщество огромное, и в Podfile можно такие пляски с бубном устроить — мама не горюй. Хуки, конфиги под разные таргеты — власть, блядь, почти абсолютная.

# Podfile
target 'MyApp' do
  pod 'Alamofire', '~> 5.6'
end

Carthage — это такой хипстер-минималист. «Я сам всё сделаю, руки есть». Он не лезет в твой проект, он просто берёт и компилирует зависимости в динамические фреймворки. Один раз проебёшься с этим, зато потом просто таскаешь готовые файлы. Контроль полный, но и возни, сука, тоже полные штаны. Вручную всё добавлять, следить за версиями. Для тех, кто любит, чтобы всё было прозрачно, как слёзы ребёнка.

# Cartfile
github "Alamofire/Alamofire" ~> 5.6

Итог, блядь: Если начинаешь новый проект — бери SPM, не мучай себя и других. Если унаследовал старый сарай на CocoaPods — ну, чини, что поделать. Ну а если ты тот самый чувак, который любит всё контролировать и готов ради этого немного пострадать — Carthage твой выбор. Всё, рот меня чих-пых, вопрос закрыт.