每个稍微有点开发经验的 iOS 工程师都很容易的发现一下几点:
- 几乎每个 iOS 的项目都适用了
Cocoapods
- 几乎每个 ObjC 的 iOS 项目是使用
AFNetworking
、SDWebImage
等三方框架。 - 几乎每个 Swift 的 iOS 项目都是用了
Alamofire
、Kingfisher
等三方框架 - 每一次这些框架更新之后, 无数个工程师只需要在终端执行一下’pod update’ 或
pod install
就能对应的更新自己项目中的代码
这几乎都是每个 iOS 工程师经常都会遇到的事情。目前几乎所有优秀的 iOS 开源框架都支持了 CocoaPods。 几乎所有的 iOS 项目都集成了 CocoaPods
但是我们在日常的开发中也常会遇到这样的问题:
- 很多公司都有好 App 同时在进行开发。
- 这些 App 或多或少在业务或者 UI 都很很多的重合。
着就意味着有很多的代码在这些 App 中都是可以复用的。由于各种各样的原因,同个公司的不同 App 可能更新不同步。 app A 可能已经升级到新版本 app B 可能还在老版本。每个 App 分别管理势必会出现混乱的局面。一起管理又存在新旧交替的问题。如果每个 App 又不同的工程师负责, 即使可能有交叉 review 的机制, 但也很难保证公司代码的统一。很多逻辑都存在多段代码。
如何管理公司的公共代码库就成了一个比较麻烦的问题。
集成 IJKMediaPlayer 的时候,想到了使用git来区别版本,然后使用 framework 来管理共有代码。然而在出现了你的代码需要使用到其他的 Framework 的时候, 或者好几个 Framework 都需要使用同一个第三方框架的时候, 这么做确实也是件恼火的事情。
去年写了三了小组件 SYNetwork
EmptyDataKit
SYPhotoBrowser
。前两个已经支持了 Cocoapods
之后网上不断的开始有一些利用 cocoapods
进行组件化的文章。前些天在 去直播看了 casa 的两个关于组建化的直播之后。也一直蠢蠢欲动想自己也来做一下这件事情。
做开源的 repo 的时候,还是比较顺利的做到了这件事情。但是当时想用 OSChina
来做了几次都没有成功。就一直搁置了。
春节之后换了个工作, 适应了公司的环境, 简单的学习了一下 Swift 之后, 公司还是决定对现有的项目进行一次梳理,然后做一次重构。 所以很自然的还是想到了使用 CocoaPods
将公司原有的项目进行组件化。
结果了半天时间的尝试,报错create gitlab账号等等。终于达到了最初的想法。 所以将这个过程记录下来。
为什么使用 GitLab
其实上面已经说到了,为什么要使用 CocoaPods 来做这件事情。也说到了为什么要做这件事情。为什么使用 gitlab 呢? 原因很简单。 毕竟 GitHub 的私有repo 是收费的。原谅我穷, 也可以说是公司扣门儿。只能把开源的东西放在, GitHub 把不能开源的东西放在其他地方。
准备
其实没什么好准备的。 但是首先你得有个 Gitlab 账号吧! 如果没有注册之后添加 SSH 就好了。
然后在 Gitlab 上创建一个空的仓库:XXX 然后记住这个项目的 地址: git@gitlab.com:XXX/XXX.git
创建工程
这些可以看我去年年底写开源 Cocoapods 的时候写的东西。使用 Cocoapods 管理你的项目
基本上简化一下就是以下
创建工程
|
|
回答问题
添加私有库到本地 pod 库(多人开发其他人也应该有这个操作)
|
|
可以检查一下: ~./cocoapods/repos 目录下又了 XXX 文件夹
将代码放进去
这一步上篇文章中有。 使用 Cocoapods 管理你的项目
修改 .podspec
|
|
我这个Demo引用了两个公有的repo
提交代码
|
|
|
|
|
|
检查一下
|
|
然后也可以在项目中的 podfile
文件中添加
|
|
|
|
成功后我们的库会出现在Development Pods
文件夹里面。可以检查一下有没有问题。
提交私有库
|
|
|
|
|
|
遇到的问题
报错
在执行
的时候,如果在你的文件中引入了一些三方库, 并且在.podspec
文件中也添加了对用的.dependency
依然出现
|
|
这样的错误。
在命令后面添加参数 --use-libraries
|
|
在segmentfault中看到的答案。
pod search 找不到
最后完成之后在新建的工程中
|
|
|
|
添加
|
|
|
|
然后莫名其妙发现引入的 repo 是0.1.0
或者什么巴拉巴拉版本的。这个时候更新一下pod
|
|
再
强迫症
如果遇到强迫症想要用 1.1.1 这样的三级版本的话。
XXX.podspec
文件中的
必须用 s.version
我也不知道为什么。
结束篇
好久没写文章了。终于还是继续写了下去。这段时间自己学了学Swift 学了学 函数响应式编程, 七牛云直播的认证也下来的。接下来可能要研究一下推流相关的东西。2017 的前半段老实说学到了很多的东西。一直很感恩也很珍惜这样的情况。
参考文档