В чем разница между CocoaPods и Swift Package Manager (SPM) для iOS?

Ответ

CocoaPods — менеджер зависимостей на Ruby, использующий централизованный репозиторий. Swift Package Manager (SPM) — нативный инструмент Apple, интегрированный в Xcode и Swift.

Основные различия:

Критерий CocoaPods SPM
Язык/Платформа Ruby, требует отдельной установки Встроен в Swift и Xcode
Конфигурация Podfile Package.swift
Интеграция Создает .xcworkspace Работает напрямую с .xcodeproj
Поддержка языков Objective-C и Swift Преимущественно Swift
Ресурсы Полная поддержка (assets, xibs) Поддержка с Swift 5.3+
Производительность Медленнее из-за генерации workspace Быстрее, нативная интеграция

Пример Package.swift для SPM:

// swift-tools-version:5.7
import PackageDescription

let package = Package(
    name: "MyApp",
    dependencies: [
        .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")
    ]
)

Когда использовать:

  • CocoaPods: Для legacy-проектов, смешанных Objective-C/Swift кодовых баз, или когда нужны специфичные pod-хаки.
  • SPM: Для современных Swift-проектов, где важны скорость, надежность и нативная интеграция с инструментами Apple.

Ответ 18+ 🔞

Давай разберём этот цирк с менеджерами зависимостей, а то голова пухнет, как у Герасима после Муму.

Вот сидишь ты, такой, в Xcode, думаешь: "Ну надо мне библиотечку прикрутить, чтоб всё красиво было". И тут на тебе — выбор, блядь. А выбор, как известно, это пиздец.

С одной стороны — CocoaPods. Это такой старый, проверенный дед на Ruby. Сидит себе в углу, ворчит, но своё дело знает. Установить его — это отдельный квест, ёпта. Рубины, гемы, бандлеры... Чувствуешь себя не разработчиком, а каким-то ебучим шахтёром, который копается в недрах терминала. Конфигурируется через Podfile, потом он генерирует этот ваш .xcworkspace — ещё одну сущность, за которой надо следить. Но зато, блядь, он ВСЁ умеет. Objective-C? Легко! Ресурсы, xib'ы, asset-каталоги? Да хуй с горы, не вопрос! Правда, работает со скоростью пьяного Герасима, который тащит бочку с водой.

А с другой стороны — Swift Package Manager (SPM). Это уже наш, родной, доморощенный. Встроен прямо в Xcode и Swift, как совесть в того же Герасима. Ничего ставить не надо — открыл и ты уже в деле. Конфиг — это просто Package.swift, обычный свифтовый файл. Никаких лишних воркспейсов, всё прямо в проект интегрируется. Работает быстро, чётко. Но, сука, молодой ещё! Раньше ресурсы не умел, только код таскал. Сейчас вроде научили, но осадочек, как говорится, остался. И со старыми обжектив-сишными библиотеками может быть нюансов овердохуища.

Так когда что брать?

CocoaPods — это когда у тебя проект старый, как мамонтово говно. Всё вперемешку: Swift, Objective-C, ещё какая-нибудь дичь. Или когда тебе нужен какой-нибудь специфичный pod-хак, который только там и работает. Типа "почеши мне здесь, но не трогай там".

SPM — это когда ты делаешь всё на Swift, живешь в 2024 году и не хочешь ебаться с лишней мишурой. Скорость, надёжность, всё под рукой. Будущее, блядь. Как сказал бы Тургенев: "Мууу... (в смысле, нативно)".

Вот смотри, как просто это выглядит в SPM:

// swift-tools-version:5.7
import PackageDescription

let package = Package(
    name: "MyApp",
    dependencies: [
        .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")
    ]
)

Никаких лишних телодвижений. Добавил строку, нажал кнопку — и библиотека уже твоя. Красота, ёпта!

А в CocoaPods ты бы ещё полчаса ждал, пока pod install выполнится, и молился, чтобы не вылезла какая-нибудь ошибка про кеш или версии руби.

В общем, если можешь — бери SPM. Не создавай себе лишнюю головную боль. CocoaPods оставь для легаси, которое без него просто взвоет, как та самая собачка на дне речки.