前言
每个iOS开发者都听说过CocoaPods。使用它可以很方便地管理各种第三方库。相信大家都有自己的工具库,在团队里面共同使用。如果能用CocoaPods进行管理的话,就方便了,如果不想将工具库公开,那么可以按照本文做一个私有的CocoaPods库。
搭建
安装Jenkins、配置Gogs,可以参考之前写的文章。
iOS+Jenkins+gogs+webhook 自动化集成方案
配置web钩子的时候改为下图,因为我们只需要知道新建标签的事件,其他一律不管。
CocoaPods
私有的库需要建立Spec仓库,用于存放各个工具库的podspec文件,让pod可以寻找我们想要的库;每个工具库的podspec文件用于记录该工具库的信息(如git地址、名字、版本号等)。
建立Specs仓库
specs 仓库结构
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
在gogs上面上面建立一个git仓库,目录结构如上。git是不允许提交空目录的。可以在初始化的时候,在Specs目录下建立一个.gitkeep
文件。Specs目录下的子目录就是每个私有工具库的名字,里面对应着每个版本号。
配置工具库
建立配置文件
使用如下命令可以建立一个示例podspec文件,在里面改一下信息即可。
pod spec create [name]
这里遇到了一个问题,我的工具库使用swift语言,然后要调用一个c文件。如果在同一个工程项目里面的话,一般做法是使用
Bridging Header
,但是使用cocoapods并不是在同一个工程文件中,所以不能使用这个办法。因此用了另一个方法--modulemap
。用法很简单,在工程中新建一个***.modulemap
文件。
module Tool {
header "Tool.h"
export *
}
然后在
Build Setings -> Swift Compiler - Search Paths -> Import Paths
添加该***.modulemap
文件的路径即可通过编译。
然后还需要在**.podspec
文件中添加同样意思的配置信息。
s.pod_target_xcconfig = {
'SWIFT_INCLUDE_PATHS' => '$(PODS_ROOT)/[你的库的名字]/[modulemap文件的相对路径]
}
验证podspec
验证前先添加私有库到本地。使用的命令如下
pod repo add [你喜欢的名字] [specs的git地址]
对应的删除本地私有仓库的命令
pod repo remove [名字]
使用下面的命令进行验证。要求没有error才能是验证成功,可以用--allow-warnings
选项屏蔽xcode的警告。
pod spec lint --sources='[私有仓库repo地址]'
获得如下信息,即为验证通过。如果有什么error就根据提示去更改错误,或者使用--verbose
去获取更多的信息。
-> test (1.0.0)
Analyzed 1 podspec.
test.podspec passed validation
验证通过就可以推送到我们的私有specs仓库,使用下面的命令。这里我是用了jenkins自动帮我做这件事。没有手动推送。
pod repo push [本地repo名] [podspec文件路径] --sources='[私有仓库specs地址]'
配置Jenkins任务
新建任务
填入对应代码的项目名称。
这里可以选择构建一个自由风格的软件项目
去重新配置,也可以选择复制一个已经存在的任务
去配置。然后点击确认。
配置任务
通用
可以勾选丢弃旧的构建。勾选参数化构建可以手动输入版本号进行构建。
源码管理
选择Git,并添加对应的项目的URL,添加对应的git账号。分支名填
refs/tags/$version
。用于区分构建版本。Additional Behaviours
附加行为选择Clean before checkout
。构建触发器
提交标签的时候,Gogs所push的json格式可以在传送门这里查看。部分字段如下。如果不是使用Gogs的话,可以到对应工具的官网寻找。
{ "ref": "1.0.0", "ref_type": "tag", ..... }
其中的
ref
字段就是该push事件的版本号。我们可以根据这个字段去区分需要自动化构建的版本。ref_type
字段用于表示分支类型,tag意味着新建版本标签。令牌填写项目名,用于唯一标识这个job,请记住不能重复。
勾选Generic Webhook Trigger
,添加两个post content parameters,记录版本号和推送类型。Expression
选择Jsonpath,用jsonpath的语法去匹配对应的字段名。Optional filter
用于区分触发构建的。只允许提交标签事件触发。构建
用脚本进行构建,脚本如下。
if [[ ! -n $(pod repo | grep SpecRepo) ]]; then pod repo add [specs的名字] [specs的git地址] else pod repo update [specs的名字] fi pod repo push --allow-warnings [specs的名字] "${WORKSPACE}/default/${JOB_NAME}.podspec"
配置开发电脑的pod
每个开发人员都要添加同一个私有库在本地电脑。
pod repo add [specs的名字] [specs的git地址]
在podfile标明source地址。
source '[specs的git地址]'
然后pod install
就能够使用cocoapods管理使用自己的工具库了。
最后
希望本文能帮到一些同学。