iOS+Jenkins+CocoaPods 管理私有库

前言

每个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管理使用自己的工具库了。

最后

希望本文能帮到一些同学。

原文地址:https://www.cnblogs.com/en815/p/8243599.html