美文网首页
基于GitLab搭建CocoaPods组件化管理

基于GitLab搭建CocoaPods组件化管理

作者: 程序媛的程 | 来源:发表于2021-10-29 20:14 被阅读0次

    基本概念

    • CocoaPods
      CocoaPods是一个非常强大的管理iOS项目第三方依赖库的工具,它可以解决库与库之间的依赖关系,下载库的源码,同时通过创建一个 Xcode 的 workspace 来将这些第三方库与我们的工程连接起来。关于CocoaPods的安装和使用网络资源很多,可以自行搜索和了解。

    • GitLab组件索引库(spec仓库)
      说到GitLab都不陌生,主要用来存放和管理我们的代码。它也可以作为我们的CocoaPods私有组件的资源索引库,通过CocoaPods把这些组件关联到我们的iOS工程中。

    创建spec仓库

    和创建新的项目一样,在git上创建一个spec索引仓库(spec.git),后续我们所有的私有组件库全都放进这个仓库中来管理,它所对应的git地址就是我们所有私有组件的源地址。执行如下命令:

    pod repo add libSpec https://gitlab.libSpec.git
    

    成功后,可以在我们本地的 ~/.cocoapods/repos 目录下生成一个 libSpec 文件夹

    创建一个本地 pod 库(以mylib为例)

    • 在桌面新建一个文件夹,名字随便起
    • cd到该文件夹下,使用 pod 命令pod lib create mylib创建 pod 库
     pod lib create mylib
    
    • 稍等一会,会出现一些选择步骤,基本上按照如下填写问题不大,一路回车,创建完成后会自动打开我们当前的pod库。
    pod lib create mylib
    ...
    ------------------------------
    ...
    What platform do you want to use?? [ iOS / macOS ]
     > ios
    
    Possible answers are [ iOS / macOS ]
     > ios
    
    What language do you want to use?? [ Swift / ObjC ]
     > swift
    
    Would you like to include a demo application with your library? [ Yes / No ]
     > yes
    
    Which testing frameworks will you use? [ Quick / None ]
     > none
    
    Would you like to do view based testing? [ Yes / No ]
     > no
    
    • 目录说明
    mylib
    ├── LICENSE
    ├── mylib
    │   ├── Assets
    │   ├── Classes
    │   │   ├── AppLanguage.swift
    │   │   ├── AppTool.swift
    │   │   └── DeviceTool.swift
    │   └── Vendors
    ├── mylib.podspec
    ├── Example
    └── _Pods.xcodeproj
    

    主要说明一下mylib文件夹下的Classes和Vendors两个文件夹。其中Classes是自动生成的,且有一个ReplaceMe.m文件,可以直接删掉,Vendors是我新建的。结合下面的.podspec配置文件说明,s.source_files 配置对外开放的源码文件的相对路径,Classes文件夹里面放我们生成的类文件。s.vendored_frameworks配置本地需要的framework,比如比如腾讯、阿里等一些需要购买的sdk等,Vendors文件夹下存放那些.framework等静态库文件。格式参考如下

    s.vendored_frameworks = 'mylib/Vendors/AlivcLivePusher.framework','MediaTrackKit/Vendors/AlivcLibRtmp.framework'
    
    • .podspec配置文件说明

    查看上面自动打开的pod库项目结构,我们会找到一个名为“mylib.podspec”的文件,它是该pod库的配置文件。

    Pod::Spec.new do |s|
      s.name             = 'mylib' # 我们对外提供的库名,也是我们通过pod search xxxx搜索的名字
      s.version          = '0.1.0' # 版本(tag),需要和我们的 tag 保持一致
      s.summary          = 'mylib'# pod search 搜索的关键词
      s.description      = 'xxxxxxxxxx' # 文案要比summary 长,否则会有个验证不过的问题
      s.homepage         = 'https://git.mylib' # 主页地址,例如gitlab 地址
      s.license          = { :type => 'MIT', :file => 'LICENSE' }     #许可证
      s.author           = { 'ccc' => 'ccc@xxx.cn' } # 作者
      s.source           = { :git => 'https://git.mylib.git', :tag => s.version.to_s }# Git仓库地址
      s.ios.deployment_target = '9.0' // 与主工程保持一致
      s.source_files = 'mylib/Classes/**/*'# 源码文件的配置路径,所有对外可以引用到的代码都在这个目录下
      s.vendored_frameworks = '' # pod库引用的本地framework,比如腾讯、阿里等一些需要购买的sdk
    end
    
    • cd到Example,执行如下命令更新一下这个工程的pod库
    pod install
    
    • 验证podspec文件
    pod lib lint 或者 pod lib lint --allow-warnings// 验证.podspec文件是否符合规范
    pod lib lint --sources="cocoapods私有库地址" --allow-warnings // 如果我们的库依赖其他第三方库,则需要将它的索引库地址也得写上,MediaTrackKit不需要执行
    pod lib lint --sources="cocoapods私有库远程地址" --use-libraries --allow-warnings // 如果第三方私有库又依赖了其他的库
    

    --allow-warnings 允许有任何的Warning
    --verbose 获取更多错误信息
    --use-libraries 包含.a 需要添加此参数

    • 创建远程代码库,并将mylib提交到gitlab

    在gitlab上创建新的项目,命名为mylib,最好勾选“Initialize repository with a README”,默认添加README.md文件,并生成master分支。cd到本地代码,依次执行:

    git status -- 查看当前git存了什么文件
    git add . -- 将所有文件缓存到待提交文件区域
    git commit -m "上传工程" -- 提交文件,写上备注
    git remote add origin https://xxxx.git -- 添加要推送的远程仓库地址
    git push -u origin master -- 将代码推送到远程仓库的master分支

    • 新增tag(当私有库更新,最好tag也更新)
    git tag 0.1.0 
    git push --tags
    

    将spec文件push到远程索引仓库(将mylib的spec推到libSpec仓库中)

    • 远程校验
    pod spec lint --sources="https://git.libSpec.git" --use-libraries --allow-warnings
    
    • push
    pod repo push libSpec(本地索引库的名称)mylib.podspec(podspec文件名)
    

    成功以后,本地cocoapods目录结构如下:

    repos
    ├── libSpec
    │   ├── mylib
    │   │   └── 0.1.0
    │   │       └── mylib.podspec
    │   └── README.md
    ├── README.md
    ├── Spec_Lock
    ├── cocoapods
    └── trunk
    

    相关文章

      网友评论

          本文标题:基于GitLab搭建CocoaPods组件化管理

          本文链接:https://www.haomeiwen.com/subject/cocwaltx.html