iOS组件化开发之路(CTMediator),涉及到cocoapods本地库、远程私有库、远程公开库(一)
二、远程私有仓库 + 组件化
其实页面的跳转方法和本地库的跳转方法是一样的,麻烦就麻烦在配置远程私有仓库这里,今天我细致板牙的给喃们讲讲远程私有仓库的创建。
今天我们这个教程就以淘宝和天猫为例。
1. 首先我们还是新建一个大文件夹,命名为AlibabaProject,一会项目都放进这里看着立整

2. 新建工程,命名为Taobao

3. 设置一下证书和版本号还有一些基本代码,让项目可以跑起来


运行起来应该是这样婶儿的

主工程到此为止先告一段落,下面我们要开始远程私有库的创建了,每一步都是关键
划重点
4. 首先需要索引的文件创建一个远程的私有库,好多博客有的用代码创建、有的创建时机在后面,总之就是乱七八糟的看的一头雾水,这里我就简单粗暴,能点的就不用代码
在码云创建仓库

解释一下这个仓库是用来做什么的:这个仓库不是用来存储我们每次开发的代码的,当我们想把自己封装好的类给外界分享时就好比pod "AFNetworking"会将AFN的包引进来而不是引进来整个项目,那么你抽出去的那部分代码需要打一个tag版本且有唯一的tag版本号,索引库会关联上这个打上了tag版本号的包,在你搜索pod search或安装的时候才会下载指定路径下的包文件。
5. 打开Finder,进入.cocoapods文件夹

看到这个master文件夹没,这个就是Cocoapods公共的索引库,你搜索的那些三方库的索引都在这里面呢,如果你做的是公共的三方依赖库那么你的索引就会加到这个文件夹中,但是我们现在要做的是私有的依赖库,所以我们要为自己的依赖库创建一个索引文件夹
打开终端
$ pod repo add TmallOpenSpec https://gitee.com/moment_forever/TmallOpenSpec.git
在你的目录中会多出这样一个文件夹

使用pod repo命令可以查看你本地存在的索引库

6. 开始准备天猫工程
先为天猫工程开一个私有仓库

新建天猫工程,并与仓库关联上,配置好证书什么的让项目可以跑起来,记得修改工程支持的系统版本10.0,此时文件应该是这样的

简单配置一下工程,配置出我们的天猫商品详情页还有Targets,是不是忘记Targets是什么了?这个是我们路由跳转需要用到的关联文件,照着我的图配好你们的工程
AppDelegate.m

Targets/Target_TmallDetail.h

Targets/Target_TmallDetail.m

TmallDetailViewController/TmallDetailViewController.m

7. 工程已经准备好,下面为工程创建索引依赖文件
进入工程的目录,就在仓库的那层跟目录就行
$ pod spec create Tmall
创建出来就这样的

8. 配置Tmall.podspec文件,这个地方要注意我红框圈起来的位置

9. 配置好文件后,将所有文件提交到远程仓库上面
10. 为你的工程打上tag(此处的tag版本号是要和你podspec文件里面的spec.version字段相对应的)
$ git tag 0.0.1
将tag推到远端
$ git push --tags

11. 验证spec文件的有效性(本地和远程)
本地
$ pod lib lint Tmall.podspec --allow-warnings
远程
$ pod spec lint Tmall.podspec --allow-warnings
验证通过的示例

如果没通过验证怎么办,不要慌
如果验证出错需要修改spec文件(如何修改spec文件呢,看提示你的ERROR里面的内容,不要看WARN,在各种地方查询错误,尝试修改,在这个过程总你会开始更深入的理解这个文件的用法,这才是让你成长的地方)
重新提交文件,并重新打tag
删除之前的tag命令
git tag -d 0.0.1
git push origin :refs/tags/0.0.1
12. 验证都通过了之后将项目spec文件与本地索引库文件关联
$ pod repo push TmallOpenSpec Tmall.podspec --allow-warnings

检验一下
$ pod search Tmall
13. 在主工程Taobao中新建Podfile文件并pod 'Tmall'
source 'https://gitee.com/moment_forever/TmallOpenSpec.git'
platform :ios, '10.0'
target 'Taobao' do
pod 'Tmall', '0.0.1'
end
上面的source就是用我们自己创建的索引库去查找依赖框架的
这个source是哪里来的呢,就是我们pod repo时如下图中红框中的内容

14. 执行pod install打开Taobao工程,查看引入的私有组件库

组件工程准备好了之后,我们使用同样的方法创建组件工程的分类工程
15. 新建Tmall_Cagetory的私有仓库

16. 关联到本地,新建工程,关联进仓库,配置工程版本号、证书


17. 为Tmall_Category工程添加CTMediator三方依赖库
platform :ios, '10.0'
target 'Tmall_Category' do
pod 'CTMediator'
end
安装好之后应该是这样的

18. 新建分类的文件夹及文件


还记得怎么映射的吗

19. 配置Tmall_Category的podspec文件
新建
$ pod spec create Tmall_Category
配置
Pod::Spec.new do |spec|
spec.name = "Tmall_Category"
spec.version = "0.0.1"
spec.summary = "A short description of Tmall_Category."
spec.homepage = "https://gitee.com/moment_forever/Tmall_Category"
spec.author = { "Cloud" => "haohao10987@163.com" }
spec.platform = :ios, "10.0"
spec.source = { :git => "https://gitee.com/moment_forever/Tmall_Category.git", :tag => "#{spec.version}" }
spec.subspec 'Tmall_Category' do |sub|
sub.source_files = "Tmall_Category/Tmall_Category/Tmall_Category/*.{h,m}"
end
spec.dependency "CTMediator"
end
20. 全部提交到仓库,打上tag
$ git tag 0.0.1
$ git push --tags
21. 本地和远程的验证
本次的验证由于CTMediator用了一些系统底层的库,所以在验证时要加--use-libraries参数
$ pod lib lint Tmall_Category.podspec --allow-warnings --use-libraries
$ pod spec lint Tmall_Category.podspec --allow-warnings --use-libraries

22. 为Tmall_Category.podspec文件与索引文件关联,但是目前我们还没有为Tmall_Category创建索引关联文件,接下来创建
23. 创建Tmall_CategoryOpenSpec的远程私有仓库

23. 将托管平台的索引库地址添加到本地的repo仓库中去
$ pod repo add Tmall_CategoryOpenSpec https://gitee.com/moment_forever/Tmall_CategoryOpenSpec.git
在我们本地的.cocoapods文件夹中会多出Tmall_Category的索引文件夹

24. 将项目spec文件与本地索引库文件关联
$ pod repo push Tmall_CategoryOpenSpec Tmall_Category.podspec --allow-warnings --use-libraries
搜索一下检查
$ pod search Tmall_Category
25. 在我们的主工程Taobao的Podfile文件里面添加内容

26. 安装
$ pod install

安装好后应该是这样的

27. 配置ViewController

网友评论