写在前面
Cocoapod可以管理SDK的代码进行组件化开发也可以将开发完成的SDK托管到Cocoapods,采用pod'xxxSDK'的方式自动集成SDK,本文是将开发好的SDK打包好上传到cocoapods,通过pod 'XXXSDK'的方式将SDK集成到项目中,告别手动集成,并且生成私人repo,让pod的速度向飞一样。
一、创建仓库
1.在github上或者码云(这里建议码云,因为码云是国内的速度快)上创建两个仓库,一个代码仓库用来存放打包好的SDK和SDK需要的资源文件,一个spec仓库负责存放podSDK需要的索引。
两个仓库全部设为开源,需要创建完成后去管理修改,LICENSE选择MIT
截屏2022-02-23 下午8.44.10.png
创建好如图所示
仓库截屏2022-02-23 下午8.30.17.png
2.将存放SDK的仓库clone下来
git clone https://gitee.com/allook/YLUISDK.git
YLUISDK文件中创建Lib文件夹存放SDK,Resources文件存放资源文件,如图所示。
截屏2022-02-23 下午9.04.37.png
二、开始创建并配置.podspec文件
cd到YLUISDK文件中
pod spec create YLUISDK
会生成YLUISDK.podspec文件,将文件打开方式更改为Xcode,开始编辑,关于.podspec文件的语法可自行百度查看,以下配置仅适用于开发好的SDK上传到Cocoapods。
Pod::Spec.new do |s|
# ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
#
# These will help people to find your library, and whilst it
# can feel like a chore to fill in it's definitely to your advantage. The
# summary should be tweet-length, and the description more in depth.
#
s.name = "YLUISDK"
s.version = "3.4.5"
s.summary = "yllan of YLUISDK."
s.description = " 这是一个短视频、小视频的SDK"
s.homepage = "https://gitee.com/JabneCode/YLUISDK"
s.license = { :type => "MIT", :file => "LICENSE" }
s.author = { "zhangbin" => "github@yilan.tv" }
s.platform = :ios, "9.0"
s.source = { :git => "https://gitee.com/JabneCode/YLUISDK.git", :tag => "3.4.5" }
// 将打包好的SDK放到对应目录,pod 'YLUISDK'执行后,SDK就乖乖到pod里面去了
s.vendored_frameworks = "Lib/YLUISDK.framework"
// 表明支持的架构模式
s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' }
// 这个是SDK需要的资源文件,这样写到时候会生成一个YLUISDKResource.bundel文件放到.app的包里面,这样SDK直接就能读取了。
s.resource_bundles = {
'YLUISDKResource' => ['Resources/*']
}
三、开始验证.podspec的合法性,并上传SDK到Cocoapods。
每次编辑更新完.podspec文件和Lib、Resources以后和,需要做以下操作,需要注意的是这里可能没有权限进行push,需要编辑隐藏文件.git中的config文件,这样就有权限push了。
截屏2022-02-23 下午9.15.12.png
git add .
git commit -am "版本号之类的描述"
git push
git tag 3.4.5 // 这个版本号要和.podspec文件中的一一对应。
git push --tags
pod spec lint --skip-import-validation --allow-warnings
不出意外应该会出现以下结果,如果发生错误需要仔细检查.podspec文件的内容。
截屏2022-02-23 下午9.24.13.png
注意:每次发布新版本都要进行以上几步。
一切具备,开始上传SDK到Cocoapods。
// 注册cocoapods作者
pod trunk register 自己的邮箱 "SDK的作者"
// 查看注册好的用户
pod trunk me
// cd到存放.podspec文件的YLUISDK中执行上传
pod trunk push ./YLUISDK.podspec --skip-import-validation --allow-warnings
四、开始使用
现在就可以在自己的podfile文件中添加pod 'YLUISDK'来测试成果了。
五、生成私人repo
上面发布完成后,索引默认是在这个地址https://github.com/CocoaPods/Specs。本地索引会下载到~/.cocoapods/repos/master,这也是cocoapods默认的索引地址
截屏2022-02-23 下午9.38.51.png
因为github是国外的网站,访问会很慢,所以我们需要建立一个自己的索引仓库。还记得开始建立的仓库吗。现在你需要这个仓库clone到~/.cocoapods/repos,将之前编辑好的YLUISDK.podspec文件copy到这里面。cd到这个仓库目录下然后执行
git add .
git commit -am "提交信息"
git push
// yilan-spec是你索引仓库的名字 YLUISDK.podspec是你刚才copy的文件
pod repo push yilan-spec YLUISDK.podspec --skip-import-validation --allow-warnings
截屏2022-02-24 上午9.59.56.png
执行完成后你去~/.cocoapods/repos中查看自己创建的索引库和自己码云上创建的spec仓库就已经有当前版本的信息了。
[图片上传中...(截屏2022-02-24 上午10.02.24.png-dfabee-1645668161718-0)]
截屏2022-02-24 上午10.02.24.png
下面开始测试自己的仓库
// 记得添加自己的源文件
source 'https://gitee.com/allook/yilan-spec.git'
pod 'YLUISDK'
六、总结Cocoapods原理(个人理解)
cocoapods是怎么将SDKpod到项目中的呢?执行pod install以后,cocoapods会根据podfile中的source(也就是.spec文件存放的仓库)去下载索引到电脑的/.cocoapods/repos文件中,让后根据索引中的SDK仓库地址去下载SDK并集成到项目中。所以Cocoapods遇到各种找不到最新版的的库或者pod不下来等问题全是本地的索引有问题,需要提示客户直接去/.cocoapods/repos中找到你自己创建的source(我这里创建的就是yilan-spec),cd到这个目录下执行git pull
这样客户就能拉取到最新的索引了,在到项目中执行pod install
就能正常的pod下来我们库了。这就是为啥开头推荐大家用码云,因为码云是国内的网站,push、pull操作都很流畅,这样会打打提高工作效率,github就不好说了,即使用了VPN也可能发个版本卡半天。这就是我最近工作中的心得分享给大家,希望能帮助到一些新手开发人员少走一些弯路,欢迎大佬指正。