zoukankan      html  css  js  c++  java
  • 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管理使用自己的工具库了。

    最后

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

  • 相关阅读:
    期末作业验收
    SDN第五次上机作业
    个人作业——软件工程实践总结作业
    SDN第四次作业
    SDN第四次上机作业
    SDN第三次作业
    SDN第三次上机作业
    SDN第二次上机作业
    SDN第二次作业
    个人作业——软件产品案例分析
  • 原文地址:https://www.cnblogs.com/en815/p/8243599.html
Copyright © 2011-2022 走看看