跳到主要内容

依赖管理

问题

SPM、CocoaPods、Carthage 如何选择?

答案

三大依赖管理对比

SPMCocoaPodsCarthage
维护方Apple 官方社区社区
配置文件Package.swiftPodfileCartfile
集成方式Xcode 原生修改 xcworkspace手动添加 framework
编译源码编译源码编译预编译 framework
二进制缓存✅(Xcode 15+)
生态快速增长最丰富

SPM 使用

// Package.swift
let package = Package(
name: "MyLibrary",
platforms: [.iOS(.v15)],
products: [
.library(name: "MyLibrary", targets: ["MyLibrary"]),
],
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.0.0"),
],
targets: [
.target(name: "MyLibrary", dependencies: ["Alamofire"]),
.testTarget(name: "MyLibraryTests", dependencies: ["MyLibrary"]),
]
)

Xcode 中:File → Add Package Dependencies → 输入仓库 URL。

2024+ 推荐

新项目优先使用 SPM。Apple 官方维护、Xcode 原生集成、无需额外工具。只有极少数老库不支持 SPM 时才考虑 CocoaPods。


常见面试问题

Q1: CocoaPods 的原理?

答案pod install 会生成一个 xcworkspace,包含原项目和 Pods 项目。Pods 项目把所有依赖编译成静态库/动态库,通过 xcconfig 设置 Header Search Paths 和链接选项。

Q2: SPM 的 resolved 文件要提交到 Git 吗?

答案Package.resolved 类似 Podfile.lock,记录精确版本。应该提交到 Git,保证团队成员使用相同版本。

相关链接