在gerrit环境下创建私有Pods

创建私有pod有两种方式,cocoapods的核心就是podspec文件,这个文件描述项目作者、主页、资源文件、版本等项目信息。
第一种方式是podspec放在spec Repo仓库(相当于索引仓库)中,cocoapod先找到spec repo 中的podspec文件,然后再根据文件中的仓库地址找到项目。

第二种方式是把podspec文件放在自己的项目的主目录中

两种用法的优缺点

第一种方法需要使用者来维护一个spec repo仓库,项目作者可以完全不用管。

第二种方法需要项目作者来维护,需要项目作者知道cocopods的语法等相关知识。

第一种方式的podfile

1
2
3
4
5
6
#官方源
source 'https://github.com/CocoaPods/Specs.git'
#本地私有源
source 'https://YOURHOST/apps/Specs-iOS'

pod 'AlgoLib', '~> 1.0.0'

第二种方式的Podfile

1
2

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'

使用第二种方法创建私有repo不需要阅读全文,只需要阅读 如何制作 podspec文件与podspec文件的语法,然后将podspec文件放入自己的项目主目录里。

在gerrit环境下的特殊性

gerrit的项目的git地址带有邮箱,而私有pod要求同一个git地址能够被大家都能访问。

解决的方法就是

使用Https

利用https地址。例如:https://YOURHOST/apps/Specs-iOS.git
配置密码

在gerrit个人页面-HTTP Password,生成http密码
username和password为git clone 需要的用户名和密码

使用ssh

利用ssh的地址。例如:ssh://YOURHOST/app
编辑~/.ssh/config文件
添加
Host YOURHOST User YOURNAME

创建Pod私有源步骤:

1、创建两个git仓库,一个用来做私有的Spec Repo(相当于索引,用来找到相应的仓库中的代码),一个是我们自己的库
2、制作Podspec,并且推送到你创建的私有repo
3、使用Pod,在Podfile添加私有源来搭建项目

1、创建一个git仓库,用来做私有的Spec Repo

仓库建完后地址为https://YOURHOST/apps/Specs-iOS

1
2
3
4
5

pod repo add Specs-iOS https://YOURHOST/apps/Specs-iOS
//这个操作实际上是git clone 到~/.cocoapods/repos/Specs-iOS里
$ ls ~/.cocoapods/repos
Specs-iOS master

2、制作Podspec文件

1
2
3
4
5
6
7
pod spec create [你的库名称]
pod spec create AlgoLib
//这个命令用来创建Podspec文件,生成了AlgoLib.podspec文件

```

然后编辑,可以按照以下格式
我已经把该省略的都省了

Pod::Spec.new do |s|
s.name = ‘AlgoLib’
s.version = ‘1.0.0’
s.summary = ‘[summary]’
s.homepage = ‘http://www.huami-inc.com
s.description = ‘[s.description]’
s.author = {‘HM’ => ‘HM@smartdevices.com.cn’ }
s.source = { :git => ‘https://YOURHOST/algo/AlgoLib‘ }
s.platform = :ios,’7.0’
s.source_files = ‘src/*’
end

1
2
3
4
5
6
7
其中  

```
s.source = { :git => 'https://YOURHOST/algo/AlgoLib' }
//这个是不需要指定tag的
s.source = { :git => 'https://YOURHOST/algo/AlgoLib', :tag => '0.1.1' }
//这个是需要指定tag的,需要远程仓库有相应tag

3、验证并推送到你的私有repo

在AlgoLib.podspec同目录下执行

1
2
3
pod lib lint   
可添加参数 --allow-warnings来取消warnings
可添加参数 --verbose来获得更详细的信息

首先验证的是AlgoLib.podspec的配置是否正确吗,然后验证仓库

验证的时候实际上会将s.source指定的文件拉下来,取s.source_files指定的文件,然后编译。
如果因为warnings验证不通过,可以添加参数

如果没有错误和警告我们就可以推送到服务器了,推送使用的命令是

pod repo push Specs-iOS AlgoLib.podspec

如果没有错误,但是有警告,我们就将警告解决,也可以加—allow-warnings来提交
普通仓库下这步不会有什么问题,在gerrit下,需要特殊处理

1
2
3
4
5
6
pod repo push Specs-iOS AlgoLib.podspec
//这个操作实际上操作的是~/.cocoapods/repos/Specs-iOS这个本地git目录
//首先git pull
//然后 将AlgoLib.podspec复制到~/.cocoapods/repos/Specs-iOS/1.0.0/下 1.0.0为version号 version号要与tag号一致
//然后 git commit -a -m "add AlgiLib 1.0.0"
//然后 git push origin master

在gerrit下,push这一步会出错

1
2
3
4
5
6
7
8
cd ~/.cocoapods/repos/Specs-iOS/AlgoLib
git reset origin/master
//需要重新提交以下,因为之前的配置不对无法提交
git config user.name "你的gerrit name"
git config user.email "你的gerrit email"
git add .
git commit -m "add AlgiLib 1.0.0"
git push origin HEAD:refs/for/master

到这一步,我们就可以用pod search 来搜索我们的库了

1
2
3
4
5
6
7
8
9
10

$ pod search algolib


-> AlgoLib (1.0.0)
[summary]
pod 'AlgoLib', '~> 1.0.0'
- Homepage: http://www.huami-inc.com
- Source: https://YOURHOST/algo/AlgoLib
- Versions: 1.0.0 [Specs-iOS repo]

4、使用pod,在Podfile添加私有源来搭建项目

使用时,在Podfile文件中添加本地私有源和官方源。如果没有添加本地私有源,它默认是用官方的repo,这样找不到本地的Pod;如果只是设置了本地私有源,就不会再去官方源中查找。 下面是Podfile内容

1
2
3
4
5
6
#官方Cocoapods的源
source 'https://github.com/CocoaPods/Specs.git'
#本地私有源
source 'https://YOURHOST/apps/Specs-iOS'

pod 'AlgoLib', '~> 1.0.0'

如果想每次pod install时更新私有repo ,使用这种格式
pod 'AlgoLib',:head

注意

1、若是需要提交给官方,请使用

1
2
3
4
5
pod trunk register youremail
查看信息
pod trunk me
将对应的pod推送到服务器
pod turnk push

2、使用pod install时,它首先会更新整个官方的源,而Cocoapods每天都有很多人提交,所以更新比较慢。所以,建议每过一段时间更新一下官方库,平常的时候,咱们可以在install或update加一个参数—no-repo-update让它不用更新。

1
2
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update