最近搞了一下cocoapods的私有库,发现网上的教程很多都说的不清楚,只是大体讲了个流程,本篇文章将对整个流程的细节方面作出说明,按照我的步骤来,细心一点肯定可以捣鼓出来。
1.首先你得安装好cocoapods,这个不多讲,自行百度
2.准备好需要放进私有库的代码文件,这个代码文件必须和你项目中的类没有关联,没有宏定义、枚举等的引用,是个完全独立的代码文件,可以关联cocoapods上的项目,比如AFNetworking。
3.你得有一个保存私有代码的仓库、这边推荐OSChina或者你自己公司的gitLab等都可以。
4.首先你得在你的git上创建两个project ,我的是MyRepo 和MyExternal两个工程,解释一下,MyRepo是用来存放cocoapods项目的目录索引的文件项目,你创建的所有私有库、每个版本,在你提交的时候都会提交到MyRepo更新目录信息,MyExternal是你的工程文件,cocoapods先去找MyRepo下的目录来获得对应版本的MyExternal的资源位置,从而获得你的私有库文件,创建完文件以后,MyRepo先别急着去创建readme初始化,MyExternal可以先创建readme和MIT,代码先别提交。
5.好了准备工作都做完了,现在可以开始动手了,首先在终端输入以下命令会帮你打开cocoapods官方的一个Xcode项目:(MyExternal是我的私有库名称,你可以用自己的,但是这个项目名称记得别打错字)
pod lib create MyExternal
这里会问你几个问题,你根据情况自由发挥就行,最后一个名字写你要创建的私有库的名称,保证这个私有库名称的唯一性,注意别有拼写错误,注意别有拼写错误,注意别有拼写错误。
6.将代码文件夹放入Xcode工程,cocopods项目pods下的Xcode目录用的是虚拟目录,我们的私有库项目必须要放在pods的Development Pods目录下,请直接show in FInder 在MyExternal/MyExternal/Classes目录下,把你的文件复制进去,然后拉到pods的Development Pods目录下,并确保build success就可以了。
7.在build成功以后,我们可以把代码提交到我们的MyExternal仓库里了,注意在提交到git仓库的时候请在你的代码文件夹外再套两层文件夹,也就是git仓库download下来打开是MyExternal/classes/MyExternal 这样子的路径,保证和Xcode下的文件夹路径一致。(原因:pod提交私有库的时候分为两步pod lib lint 和 pod repo push,pod lib lint校验本地文件夹的文件是否有错误,pod repo push会校验在私有git上的代码仓库,但是他们Xcode下配置文件的source_file文件路径是一个的,所以要保持路径一致,不然会出现pod lib lint校验通过,在push的时候却说 can not find files的问题。)
8.配置podspec文件,podsc是用来保存私有库信息的,这个东西配置出错会导致后面提交不了,必须注意,代码如下:
Pod::Spec.newdo|s|
s.name ='MyExternal'
s.version ='1.0.0'
s.summary ='我的私有库代码'
s.description = <<-DESC
TODO: 我的私有库代码
DESC
s.homepage ='http://192.168.0.1/iOS/MyExternal'
s.license = { :type =>'MIT', :file =>'LICENSE'}#开源协议
s.author = {'iOS'=>'iOS@Apple.com'}#作者
s.source = { :git =>'http://192.168.0.1/iOS/MyExternal.git', :tag => s.version.to_s }
s.ios.deployment_target ='8.0'#最低支持的系统版本
s.frameworks='Foundation','UIKit'
#添加汇总的头文件,可以不需要
s.public_header_files ='MyExternal/Classes/MyExternalHeader.h'
s.source_files ='MyExternal/Classes/MyExternalHeader.h'
#为了创建子文件夹写了一堆,没找到for循环的语法
#添加第三方的依赖,如AFNetworking,请在类似下面的每个子模块里添加
s.subspec'AA'do|ss|
ss.source_files ='MyExternal/Classes/AA/*.{h,m}'
end
s.subspec'BB' do |ss|
ss.source_files ='MyExternal/Classes/BB/*.{h,m}'
end
s.subspec'CC'do|ss|
ss.source_files ='MyExternal/Classes/CC/*.{h,m}'
ss.dependency'YYKit' #依赖的库
end
end
注意1:s.subspec 这种分模块是为一个私有库工程添加子模块和文件夹,如我上面这么写的话,MyExternal包含AA、BB、CC三个子模块,所以有三个文件夹和一个header文件,每个子模块有对应的依赖类库(写子模块的话请对每个子模块单独写依赖库,如果直接在总的里面写依赖会导致每次编译子模块都编译一次依赖模块,非常耗时),但是也可以不需要header文件直接写s.source_files = 'MyExternal/Classes/**/*' 这样子的话所有文件都放在一起,不区分文件夹,适合比较简单的私有库。
9.当你在配置podspec文件的时候肯定会发现一个东西s.version,这个东西非常重要,它是一个私有库的版本号,那它是怎么来的呢? 我们在提交或者更新完我们git的仓库代码后,必须给当前代码打一个tag,这个tag的值就是和s.version保持一致,所以记住,在你push repo之前,请务必确认tag是否是当前最新代码的tag,如果你想在不改变版本号的前提下修复BUG,那么请在提交完tag后删除之前的tag,然后给最新代码打原来的tag。
10.修改好了podspec文件后就可以使用如下命令测试私有库能否通过校验(记得CD到对应目录下在执行命令)
pod lib lint --allow-warnings --verbose
有些error不会在终端最后的时候才显示,你可以全局搜索 error gen 或者 errors gen 来看到随时抛出的代码问题,不写allow-warnings的话有警告也是不能通过校验的。发现问题,修改问题,直到通过校验
11. 校验通过以后就可以将代码放到我们的私有库上托管了(MyRepo是我上面创建的第一个git仓库的名称 第二个是Xcode下的文件名称,记得CD到对应目录下在执行命令)
pod repo push MyRepo MyExternal.podspec --allow-warnings --verbose
12.私有库出问题绝大部分情况下不是代码有问题就是你路径搞错了,附上几个路径结构,对比这你就能发现问题了:
git仓库里的结构 Xcode工程里的结构13.后续有一些补充的内容会增加。
网友评论