基于GitLab搭建CocoaPods组件化管理

基本概念

  • 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' => '[email protected]' } # 作者
  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组件化管理)