基本概念
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