Менеджеры зависимостей: CocoaPods, SPM, Carthage?
Swift Package Manager (стандарт)
Официальный инструмент Apple и Swift, встроен в Xcode и в toolchain (swift build). Зависимости описываются в Package.swift (манифест на Swift), точные версии фиксируются в Package.resolved — его коммитят. Xcode добавляет ссылки на пакеты в project.pbxproj, но не генерирует workspace и не требует внешних инструментов. Возможности: исходные и binary targets (XCFramework), ресурсы (Bundle.module), build-плагины и command-плагины (SwiftLint, генерация кода), package traits (Swift 6.1) для условной компиляции фич, локальные пакеты для модуляризации приложения. Линковка по умолчанию статическая.
// swift-tools-version: 6.0
import PackageDescription
let package = Package(
name: "Networking",
platforms: [.iOS(.v17)],
products: [
.library(name: "Networking", targets: ["Networking"])
],
dependencies: [
.package(url: "https://github.com/apple/swift-log.git",
from: "1.6.0")
],
targets: [
.target(
name: "Networking",
dependencies: [.product(name: "Logging", package: "swift-log")],
swiftSettings: [.swiftLanguageMode(.v6)]
),
.testTarget(name: "NetworkingTests", dependencies: ["Networking"])
]
)
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep