基于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' => '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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345