步骤一:创建私有的pod索引仓库:
- 在公司的git服务器上创建私有远程索引仓库。克隆地址。
如:http://gitlab.yuwantech.com/clientgroup/ioslibrarygroup/jhchainableanimationsspec
- 新建pod spec索引仓库(将私有的远程仓库copy到本地)。命令如下:
pod repo add LibraryPodSpecs http://gitlab.yuwantech.com/clientgroup/ioslibrarygroup/jhchainableanimationsspec
LibraryPodSpecs:为pod spec索引仓库名称
- 执行完毕后,在目录:/Users/admin/.cocoapods/repos 下会多出来一个TestPodSpecs文件夹,可使用pod repo命令查看。如下:
至此,私有远程索引仓库LibraryPodSpecs生成完成
步骤二:创建私有组件库:
在公司的 git 服务器上面创建 组件 的 git 远程仓库,克隆地址是:http://gitlab.yuwantech.com/clientgroup/ioslibrarygroup/jhchainableanimations
创建私有的pod组件库(如JHChainableAnimations动画组件),执行如下命令:
pod lib create JHChainableAnimations
。过程中需要填一些选项,按需选择即可。如下:
1 | 1. 什么平台? iOS |
删除ReplaceMe文件,将需要封装的文件(如网络组件相关文件)复制到PrivatePermissionTools/PrivatePermissionTools/Classes中。如下:将LeelenNetworkManager复制到Classes中。(注意:需要cd到Example文件下 然后更新 pod update –no-repo-update)
修改 JHChainableAnimations.podspec 文件如下:
1 | # |
- 校验本地索引文件 JHChainableAnimations.podspec
cd到PrivatePermissionTools.podspec所在文件夹下,执行pod lib lint –allow-warnings,该命令是检查本地索引文件是否符合推送规则。成功了会打印PrivatePermissionTools.podspec passed validation。如下:
pod lib lint参数解析:
–sources:需要引⽤的spec,默认只依赖master,如果当前pod依赖了私有库,需要将其对应的spec包含进来,不然会报找不到对应库的问题。参数可以是本地spec的名称,也可以是git地址。
–allow-warnings:有警告会通过不了,如果警告是⽆关紧要的,可以加上,让检测通过。
–verbose:打印详细的检验过程
–use-libraries:⼯程或者依赖⾥⾯了静态库(*.a⽂件)或者是framework
备注:
pod lib lint 表示在本地校验索引文件
pod spec lint 表示在本地和远程都校验索引文件
6、将JHChainableAnimations本地组件库与远程的仓库git关联起来
- 上传 JHChainableAnimations.podspec 索引文件到我们的私有远程索引仓库 LibraryPodSpecs,命令如下:(进入到JHChainableAnimations.podspec目录)
pod repo push LibraryPodSpecs JHChainableAnimations.podspec --allow-warnings
上面命令对 JHChainableAnimations.podspec 文件做了两个操作:一个是将其推送到私有的远程索引仓库,可以去公司的 git 上面 LibraryPodSpecs 索引仓库中查看;另一个是将其 copy 到私有的本地索引仓库,这个可以去目录:/Users/admin/.cocoapods/repos/TestPodSpecs 下查看到。
至此私有的组件库JHChainableAnimations就创建完成了,可以在终端执行 pod search JHChainableAnimations来查询它。
使用:
pod 'JHChainableAnimations', :git => "http://gitlab.yuwantech.com/clientgroup/ioslibrarygroup/jhchainableanimations.git", :tag => '1.0.1'
注意事项
操作的时候,先cd到对应的文件夹下
注意操作顺序
- 在develop分支开发、修改JHChainableAnimations代码,修改 JHChainableAnimations.podspec版本号,提交。
- 将develop分支合并到master。
- 在master打tag(如:1.0.1),注意这边的tag应与 JHChainableAnimations.podspec中的s.version 版本号一致。
- 远程私有库的更新:(cd 到本地仓库的位置,执行以下操作)
一、更新远程仓库
- 代码更新
- 版本更新(版本更新 这一步非常重要,为更新索引库做准备)
版本升级
查看远程仓库,标签数已经有2个了,点进去就可以看到0.2.0,这里我们就不去看了
二、修改描述文件并更新索引库
- 修改Sepc
2.验证远程Spec
cd到xxxx.podspec所在文件夹下,执行pod lib lint –allow-warnings
3.更新索引库
pod repo push 索引库名称 xxx.podspec –allow-warnings
依赖第三方库:
当我们的私有库需要依赖其它第三方才可以正常使用时,我们就需要在spec文件中开启依赖,例如下面所示代码,表明当前仓库需要依赖AFN和SDWebImage
s.dependency ‘AFNetworking’, ‘~> 3.2.0’
s.dependency ‘SDWebImage’, ‘~> 4.3.3’
问题:但是这里存在一个问题,如果来了一位新的小伙伴,他所负责的部分只需要LXFBase下的Category,而LXFBase下的Cache才需要依赖SDWebImage,此时他若是pod一整个LXFBase岂不是平白无故安装了第三方依赖库,那应该怎么做呢?
答案:方案就是可以通过子库Subspecs来解决因需要一个小小的工具而依赖整个基础组件的问题
子库Subspecs:
什么是Subspecs?这里我们可以搜索一下SDWebImage。
Subspecs:
可以看到,如果我们只需要用到SDWebImage中的GIF功能,那么并不需要将整个SDWebImage都下载下来,在Podfile中将pod ‘SDWebImage’ 改为 pod SDWebImage/GIF即可单独使用这一功能
那接下来我们就来看看怎么描述一个子库吧
子库格式:
因为这里已经分离出子库了,所以s.source_files和s.dependency就不能这么使用了,需要我们在子库里分别指定,所以我们直接把原来的s.source_files和s.dependency都注释掉。写法参考如下:
修改后再按之前的步骤更新索引库和组件库就可以了。
ps: 在添加第三方依赖描述后做验证或者上传操作可能会很慢,因为它在克隆第三方库如SDWebImage,有兴趣的可以在命令后面加入–verbose来查看详情情况
使用子库:
组件库中带有图片资源:
将LoginImage文件夹放入/LeelenNetwork/Assets中,其中LoginImage文件夹内有login_logo@2x.png图片;
修改LeelenNetwork.podspec索引文件
修改完spec索引文件之后,执行pod lib lint –allow-warnings检查本地索引文件是否符合推送规则。校验没问题后,SourceTree提交代码,打tag(tag注意与LeelenNetwork.podspec文件内的s.version一致)。执行pod repo push LeelenIotPodSpecs LeelenNetwork.podspec –allow-warnings操作,上传 LeelenNetwork.podspec 索引文件到我们的私有远程索引仓库 LeelenIotPodSpecs。
修改工程中的Podfile文件,cd到工程Podfile文件所在位置,执行pod install
pod install成功后,可以看到工程中多了一个Resources文件夹,里面有login_logo@2x.png图片,路径如下:Pods/LeelenNetwork/LeelenNetwork/Assets/LoginImage/login_logo@2x.png。以及Products文件夹下多了一个NetworkLog.bundle,查看包内容,发现里面也有login_logo@2x.png图片。
使用时,先拿到最外面的bundle,然后再去找下面指定名字的bundle对象,再搜索具体资源。如下:
1 | NSBundle * currentBundle = [NSBundle bundleForClass:self.class]; |