CocoaPods 相信开发 iOS 的人都是知道的, 通过 pod 导入第三方库,可以省去手动导入可能遇到的很多步骤和问题, 只需在 podfile 中 pod 'AFNetworking'
, 然后直接pod install
我们即可在项目中使用 AFNetworking。
由于自己在工作过程中需要给别人提供 SDK,自己也有一些组件需要在很多工程中使用, 所以当然是希望自己的 SDK 也能通过 pod 管理, 那么怎么让自己的组件支持 pod 呢?
安装CocoaPods
这步就不多说了吧, 相信都已经安装好了。or 可以直接通过 homebrew 直接安装的
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
将这句代码复制到终端, 即可安装 homebrew, 然后通过brew install cocoapods
即可安装 pod 最新版本
制作 CocoaPod
网上有很多关于创建 podspec 什么的制作 pod 的方法, 当然是可以的, 不过比较麻烦, CocoaPods官方建议使用pod lib create [pod name]
去创建 pod 仓库,这里是官网教程
比如我要让自己的 demo 组件库 YFAPIKit 支持 CocoaPods,在terminal 输入 pod lib create YFAPIKit
, 接下来会有几个问题:
- platform
- iOS/macOS
-
Objective-C or Swift
- 使用什么语言,我这里选 ObjC
- Include a Demo Application
- 模板会为你的库创建一个Xcode工程,这意味着你不用自己去Xcode在新建一个工程
- Choosing a Test Framework
- 测试的库, 可不选, none, 测试框架有Specta/Expecta和Kiwi swift的测试框架:Quick/Nimble
- View-based Testing
- 建议使用FBSnapShotTestCase, 也可不选
- Prefixes for Objective-C
- 类前缀
接下来,pod 会帮你创建一个项目, 目录结构如下(这个目录结构是通过pod lib create MyLib得到的, YFAPIKit 也同理)
1. $ tree MyLib -L 2
2. MyLib
3. ├── .travis.yml //travis-ci的设置文件
4. ├── _Pods.xcproject
5. ├── Example //生成的Demo和测试类
6. │ ├── MyLib
7. │ ├── MyLib.xcodeproj
8. │ ├── MyLib.xcworkspace
9. │ ├── Podfile
10. │ ├── Podfile.lock
11. │ ├── Pods
12. │ └── Tests
13. ├── LICENSE //默认MIT License
14. ├── MyLib.podspec //库的Podspec文件
15. ├── Pod //这里是放你的文件的地方
16. │ ├── Assets
17. │ └── Classes
18. │ └── RemoveMe.[swift/m]
19. └── README.md //默认的MD格式的README文件
创建完成后, 打开 YFAPIKit.xcworkspace
via Xcode
你会发现这里已经有一个pod 工程, 就是平时我们 pod init 并 install 之后的效果, 现在的 podfile 是这样的
use_frameworks!
target 'YFAPIKit_Example' do
pod 'YFAPIKit', :path => '../'
target 'YFAPIKit_Tests' do
inherit! :search_paths
end
end
这里有一行 pod 'YFAPIKit', :path => '../'
这是什么意思呢, 其实这个就是本地的 pod, 做一个本地 pod 仓库是可以用这种方法做的, 这里直接指定了上层文件夹为 pod 的源代码仓库地址。
配置 POD 工程
将我们要做成 pod 的文件(.h .m .bundle .a etc…)放入 YFAPIKit/Classes 中, 或者 Assets 中, 目录自己指定也行, 只需要在配置 podspec 文件时路径正确即可, 我这里放在了这两个文件夹中, 接下来配置下 podspec 文件, 贴上我的 spec
Pod::Spec.new do |s|
s.name = 'YFAPIKit' #pod 仓库名, 制作完成后 pod 'YFAPIKit' 即可集成
s.version = '1.0.0' #版本号
s.summary = 'YFAPIKit.'#简要介绍
#描述
s.description = <<-DESC
Demo Util for my proj
DESC
s.homepage = 'https://github.com/Fynil/YFAPIKit'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Fynil' => 'fynil@qq.com' }
s.source = { :git => 'https://github.com/Fynil/YFAPIKit.git', :tag => s.version.to_s } #这个是指定了仓库的源码地址, 取得是版本号的 tag 值, 所以我们之后需要打个 tag 作为 pod 的源码仓库
s.platform = :ios
s.ios.deployment_target = '7.0'
s.requires_arc = true
s.source_files = 'YFAPIKit/Classes/**/*' #源文件配置
s.resource = 'YFAPIKit/Assets/YFResources.bundle' #bundle 文件配置
s.public_header_files = 'YFAPIKit/**/*.h' #公开头文件配置
s.dependency 'SVProgressHUD' #依赖配置,组件中依赖了 SVProgressHUD, 所以需要加一个 dependency
end
s.source 其实也不一定要是 GitHub, 国内的也都是可以的, 甚至源文件是一个 zip 都行(微信就是这样)
还有很多其他的配置方法, 详见podspec 文件配置官方教程
配置完成后, 我们执行下 pod install, 就可以在Example 文件夹下的 demo 工程中使用 YFAPIKit 了。
发布 CocoaPods
在 demo 中正常运行后, 我们就可以将整个工程放到 GitHub 上了, 或者 gitee, coding 等都行, 发布后打一个 tag, 标签为 s.version, 这样CocoaPods 才能根据 podspec的s.source 找到源文件
publish 后, 通过pod lib lint
检查 pod 是否有错误, 是否找不到源文件什么的 blablabla
Trunk
我们需要使用 trunk 去发布 CocoaPods, trunk 是 CocoaPods 提供的一个网页服务
通过 pod trunk push 将 podspec 文件 push 到 github 的 specs 仓库, 执行 pod install 的时候会通过这个仓库的 podspec 找到 pod 的源文件,并导入工程中
首先注册一个账号
pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
然后到邮箱确认
pod trunk me
// 查看信息
将 podspec push 到 GitHub
cd 到 podspec 所在目录
pod trunk push [NAME.podspec]
即可