因为公司性质的问题,项目之间经常要互相用到一些界面或者模块,所以最近就着手开始拆分项目,并对项目功能进行模块化和组件化的处理。在这里我是将文件作为私有库放在gitlab上的,然后再通过cocoapods进行导入。

1.gitlab上新建组件项目(这里以封装一个网络请求组件为例子)在gitlab上新建一个仓库,名称就是你当前组件的名称即可,比如叫EazyTecNetwork组件。

然后通过sourcetree(我在这里是这样,当然你也可以选择不这样)将空的项目clone到本地指定文件夹下,在这里这个文件夹叫EazyTecNet文件夹。

2.本地建立私有库工会曾目录进入到要建立私有库工程的目录下,在这里可以选择在桌面随便建一个文件夹,然后cd到该文件下(其实无所谓的,这个文件夹只是临时存一下下载的模板,到时候就没用了),在终端执行如下代码

1pod lib create EazyTecNetwork

然后回答几个问题


完成之后,会创建一个私有库工程

将私有库文件中除了.git文件,其他文件剪切,转移到我们从gitlab下clone的空仓库EazyTecNet文件夹下,这样,就等于EazyTecNet这个文件夹已经是一个私有库工程了,然后刚才桌面随便建的那个文件夹就没用了。

将EazyTecNet文件夹下的EazyTecNetwork中的Classes文件夹手动删掉,这个我们不要,我们把自己已经封装好的代码放在和Assets同级文件夹目录下即可。

3.修改podspec配置文件的东西在这里,我们主要注意几点,项目名称是要和我们的组件名称一样是EazyTecNetwork,然后自己设定的版本号,比如为1.0.0,homepage则为gitlab中该项目的地址(没有.git结尾),source则为clone该项目的时候的链接地址(.git结尾)

source_files的内容修改,因为上面我们将Classes给删除了,并且将文件目录放在Assets同级目录下,所以我们在这里要把它默认给的路径中的Classes给删除,也就是

1s.source_files = 'EazyTecNetwork/**/*'

4.校验podspec配置文件,提交源码并打tag包cd到当前私有工程目录下,运行如下代码

1pod lib lint EazyTecNetwork.podspec

当然也可以这样,忽略掉一些没用的东西,要不然他会警告

1pod lib lint EazyTecNetwork.podspec --allow-warnings

注意:如果我们管理的这个三方有用到了别的私有库的文件,这里会报错,因为默认的情况下,它的来源都是从GitHub上找的,所以如果你放在gitlab或者私有库的情况下,他会找不到,这个时候推的时候要加上source来源,包括GitHub的默认来源(这里我们引入的是https://github.com/CocoaPods/Specs.git)

1pod lib lint EazyTecNetwork.podspec --sources='https://gitlab.eazytec-cloud.com/klone/Specs.git,https://github.com/CocoaPods/Specs.git' --allow-warnings

这里第一个是gitlab上我们自定义的Specs.git,这里面有我们在EazyTecNetwork引用的我们自己的私有库,第二个GitHub上的Specs.git,这个是别人维护的,有上万的star,这个库基本囊括了我们能用到的所有开源的第三方。

校验通过后,通过sourcetree提交代码到仓库中。并打个tag为1.0.0版本

5.在gitlab中创建新的仓库,用来管理配置文件

要知道,我们用cocoapods文件导入三方项目的时候,是通过配置文件中的地址去下载的,所以这里我们只需要管理配置文件即可。

创建一个第三方私有库仓库,叫ThirdSpec

服务器配置仓库映射到本地,运行如下代码 (只用做一次,下次再加别的第三方的配置文件时,就不用做了)

1pod repo add ThirdSpec https://gitlab.eazytec-cloud.com/feijunjie/eazyThredSpec.git

这里的add name 是添加到本地用户名下cocopods文件夹中的文件夹名称(有点绕口哈~),所以一般我们取这个文件夹名字会和你后面这个git的名字一样(我这里没取一样。。取一样的话都叫eazyThredSpec)

在终端将上面的配置文件传到这个管理配置文件的仓库中

1pod repo push ThirdSpec EazyTecNetwork.podspec

也可以忽略警告

1pod repo push ThirdSpec EazyTecNetwork.podspec --allow-warnings

这个时候你会发现repo本地已经有了 ,路径运行如下代码即可

1open .cocoapods/repos/

6.在项目里在podfile里添加引用

source 'https://gitlab.eazytec-cloud.com/feijunjie/eazyThredSpec.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.1'
use_frameworks!
target 'ClosureDemo' do
pod 'Masonry'
pod 'EazyTecNetwork'
end

要添加source来源,还要添加官方的source来源,否则会提示你找不到

7.更新维护第三方将EazyTecNet文件夹下的EazyTecNetwork中的代码更改后,然后将配置文件中的版本更新一下,然后提交到远程仓库,并打个tag包,这里的版本号为1.0.1

将配置文件再次提交到配置文件私有仓库中

1pod repo push ThirdSpec EazyTecNetwork.podspec

podfile中指定版本号,否则默认更新为最新版本

source 'https://gitlab.eazytec-cloud.com/feijunjie/eazyThredSpec.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.1'
use_frameworks!
target 'ClosureDemo' do
pod 'Masonry'
pod 'EazyTecNetwork', '~> 1.0.1'
end

8.小结

以后再有别的模块或者组件要以私有库pod的方式导入的话,可以如法炮制,然后将配置文件导入到该配置文件私有库下进行统一管理。这里可以借鉴cocoapods官方自己的


在本地repo目录下,cocoapods本身也是将所有的库的配置文件进行管理的,只不过他这里比较多,所以你第一次下载cocoapods的时候为啥会慢,现在知道了吧。