常见的依赖管理器优缺点对比
CocoaPods
优点
- 支持大量的第三方库。
- 简单易用的命令行界面。
- 自动处理库的依赖关系。
缺点
- 可能会遇到一些与 CocoaPods 本身或第三方库的兼容性问题。
- 可能会导致项目构建速度变慢。
Carthage
优点
- 支持多种平台,包括 iOS、macOS 和 tvOS。
- 可以选择使用二进制文件或源代码构建库。
- 不会在项目中引入额外的依赖。
缺点
- 需要手动处理库的依赖关系。
- 可能需要更多的时间来设置和构建项目。
Swift Package Manager
优点
- 是 Apple 官方提供的工具,与 Xcode 深度集成。
- 支持 Swift 和 Objective-C 库。
- 可以通过源代码或二进制文件管理库。
缺点
- 相对较新,可能不支持某些较旧的库。
- 依赖管理功能相对较弱。
Cocoapods
基础使用
最新版安装流程
(首次安装)移除现有Ruby默认源
(首次安装)使用新的源
(首次安装)验证新源是否替换成功
(可选)更新 gem
安装 CocoaPods
Podfile 文件中的一些写法
# 设置镜像源 |
消除 Pod 版本过低的警告
post_install do |installer| |
同理也可以批量对其它字段进行修改,用法很灵活。
发布和使用私有 Pod 库
发布私有 podspec
你需要在 GitHub 或其他 Git 托管服务上创建一个私有仓库,用于存储你的 Podspecs。
在你的项目根目录下创建一个新文件,名为 YourPod.podspec
,其中 YourPod
是你的 Pod 的名称。在这个文件中,你需要填写 Pod 的相关信息,例如名称、版本、作者、源代码等。
在终端中运行以下命令,将你的私有 Specs 仓库添加到 CocoaPods 的源列表中:
pod repo add YourRepoName https://github.com/YourGitHubAccountName/YourSpecsRepo.git |
如果是公司内部使用,也可以使用内部的 git 仓库。
在终端中运行以下命令,验证你的 Podspec 是否有效:
如果一切正常,你应该看到类似以下的输出:YourPod.podspec passed validation. |
在终端中运行以下命令,将你的 Podspec 推送到你的私有Specs 仓库中:
pod repo push YourRepoName YourPod.podspec |
这将把你的 Podspec 上传到你的私有Specs 仓库中。
你需要通过适当的权限设置确保私有 Specs 仓库对团队内部可见,否则其他团队成员无法使用。
使用方法
在你的项目中,你可以使用 CocoaPods 来引入你的私有 Pod。在你的 Podfile 中添加以下内容:
pod 'YourPod', :podspec => 'https://github.com/YourGitHubAccountName/YourSpecsRepo.git' |
然后,在终端中运行以下命令,安装你的私有 Pod:
如何使用本地的 Pod 库
流程和私有 Pod 库相似,但是省略掉了发布过程,Specs 文件放置在某个本地目录就可以。这种方式一般用于本地调试或者通过 git submodule 来引用库。
发布开源库到 CocoaPods 官方平台
准备工作
1. clone 远程仓库到本地
git clone 你的仓库链接 |
2. 注册 trunk
注册的命令
pod trunk register 你的邮箱 你的用户名 |
记得去邮箱里验证,然后可以输入以下命令查看个人信息
pod trunk me |
步骤
1. 创建 .podspec
pod spec create AXKit |
2. 修改 .podspec
并验证
有很多类似的教程,可以参考。
一个小技巧:你可以去GItHub搜索一些热门的第三方库,然后点击查看这些大牛的
.podspec
是怎么写的。
传送门:YYKit的podspec、ReactiveObjC的podspec、BlocksKit的podspec
最容易出错的地方就是资源路径
s.source_files = "AXKit/**/*.{h,m}" |
常见写法
"Directory1/*" 表示匹配所有文件 |
s.source 常见写法
# 推荐写法:与版本号绑定 |
tag => s.version 表示将这个 Pod 版本与 Git 仓库中相同版本的 comit 绑定
注意
如果仓库中对应的tag是 “v1.0.0”
这样以字母开头的,可以在 #{s.version}
前面加上对应的字母。commit => “68defea” 表示将这个 Pod 版本与 Git 仓库中某个 commit 绑定
验证
pod spec lint AXKit.podspec |
3. 上传到远程仓库
修改 .podspec
时指定的版本号,如 0.0.1
。那么远程仓库中必须始终存在这个版本的 branch
或 tag
才能够下载。建议使用 tag。s.source
中的 tag 需要与远程仓库中的 tag 对应起来。
s.version = "0.0.1" |
这里指向的是 "v0.0.1"
这个分支,因为分支我们用完之后习惯把它删掉,所以这里也可以指向 tag,也就是说打一个 "v0.0.1"
的 tag 并推送到远程就可以了。
git tag v0.0.1 |
这样做的好处就是删掉当前分支不影响 CocoaPods 中指向的仓库源码。
4. 发布到 CocoaPods
pod trunk push AXKit.podspec |
n. 删除一个 podspec 版本
删除的命令是:
pod trunk delete 项目名 版本号 |
官方建议使用 deprecate
来弃用
pod trunk deprecate 项目名 |
这两种方法执行完有很大几率会出现一串很长很长的错误,不要着急,这实际上这是一个 html。把它保存到一个 html 文件中,打开,是个404错误页,原因众所周知。
删除之后立即搜索还是能搜到的,因为有一定的延迟,可能要半个小时才能更新。
pod trunk 命令
在终端输入
pod trunk --help |
可以查看帮助
使用脚本
没必要每次都重复每个步骤,如果你已经发布过一个,可以省去注册的步骤,直接把已经发不过的 podspec 复制一份,改一下仓库模块名,验证通过就可以发布了。
我写了一个便于发布更新的脚本,把脚本放在与 podspec 同级目录下,当你更新了项目之后,如果需要更新到 cocoapods,可以执行此脚本。流程是:
输入版本号 -> commit、push tag -> pod spec lint -> 询问是否发布(y/n) -> 发布(y) |
Swift Package Manager
创建 Package
按照下面操作创建:
- 菜单入口:File -> New -> Package
- 快捷键:⌃ + ⇧ + ⌘ + N
项目根目录下会有一个名为 Package.swift 的文件,该文件描述了你的项目的依赖项和设置。> API 文档
如何增加 ObjC 代码
和 Swift 大致相似,但是需要开放的头文件需要放在 include 文件夹中,文件路径参考如下:
Sources/MyLibrary/xxx.swift |
增加图片等素材
以开源库 ProHUD 为例:
// swift-tools-version:5.6 |
相应的 xcassets
文件路径是:
Sources/ProHUD/Resources/ProHUD.xcassets |
为了使用方便,可以封装一下:
extension UIImage { |
如何引用静态库
有时候我们为了提高构建效率,会发布和使用二进制化的静态库:
// swift-tools-version: 5.9 |