CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)
CocoaPods在这里就不多做介绍了,相信大家都对此都使用过,也知道其对我们的好处。CocoaPods可以使我们项目管理第三方更容易,平时第三方库都是pod install下来的,再也不用之前的手动拖进工程了。那么我们今天就来说下我们自己怎么制作第三方并发布到CocoaPods官方;还有项目组件化,把自己的模块封装成库并发布到私有的git上。
这里的内容是为了记录自己学习的经历,内容也是结合前人经验和自己实践写的,请多多宽容。
一 . Cocoapods环境安装
首先我们需要安装CocoaPods环境,CocoaPods环境安装,没安装的同学可以跟着安装下。最好安装最新的环境,否则执行下边步骤可能会出现错误。
二 . 制作本地库
打开终端,cd到你想建立文件的目录,通过pod指令建库:(NNUBase是lib的名称)
pod lib create YYBase
紧接着你会看见一串指令,显示将从Cocoapos下载模板:
Cloning `https://github.com/CocoaPods/pod-template.git` into `YYBase`.
模板下载下来后,会有几个问题需要你回答:
分别是:(1)你想在什么平台上运行:iOS
(2)选择什么语言:ObjC(emmm重复了一次是因为我输错一个字母,请忽略)
(3)你的库需要包括一个测试的demo应用吗?Yes
(4)将使用什么类型的测试框架:None(因为不知道其他几种类型所以用none)
(5)你想创建基于视图的测试吗:No
(6)类别的前缀:YY(这个可以自己定义)
6个问题提交完毕后会自动running install。
Running pod install on your new library.
Analyzing dependencies
Downloading dependencies
Installing YYBase (0.1.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `NNUBase.xcworkspace` for this project from now on.
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
Ace! you're ready to go!
We will start you off by opening your project in Xcode
open 'YYBase/Example/NNUBase.xcworkspace'
并且在install结束后自动打开lib工程文件,我的这里是叫YYBase.xcworkspace。一个空的本地库的文件结构如下:
其中ReplaceMe.m文件的位置是你需要将你要封装的代码放入的位置。这里我就随便放入一个模块的文件。
*注意点:
1、我们自己的代码不管是新添加文件、还是现有代码有改动,都需要需要在cd到Example下执行pod install后,才能导入头文件import NNUBase,代码才会更新。
2.我们自己的代码文件最多一层文件结构即Classes下一级的文件夹内只能放代码,不能再创建子文件夹。
3.每个类文件如果想暴露出去,则需要在类名前添加修饰符即(public class xxx或者open extension xxx),添加public、open,而extension不能用open修饰所以用plublic修饰。
4.如果已经暴露的类,想暴露里边的函数方法,则也需要在方法 func 前加public,否则外部调用会找不到方法名。
到这里本地库我们已经制作好了,如果把我们本地当做git库的话,这时候我们只需要在你其他的项目或者工程的Podfile文件里添加如下:
YYTest:是项目名称
YYBase:本地私有库
path:是指定本地库所在的位置
target 'YYTest' do
pod 'YYBase', :path => '/Users/nnu-scens/Desktop/Text/YYBase'
end
二 . 本地库提交到远程库
首先我们先了解下Specs和Specs Repo、Code和Code Repo。
Specs:使用CocoaPods的指令创建好本地库之后,默认生成一个podspec文件。它描述该库某一个版本的信息,比如库的名字、版本号、描述、依赖库等等。
Specs Repo:就是存放spec文件的git库,它包含了所有可用的第三方库。每个库都会有独立的文件夹,每个版本以独立的子文件夹保存。文件夹中只有一个描述文件,也就是Spec文件。
Code:就是我们自己库的源代码。
Code Repo:就是Git库存放源代码的地方。
重点:!Code Repo和Spec Repo不能一概而论,所以就不能把那个Repo放到一个git库中,需要将他们分开存放。
cd到你的源代码目录下,提交源代码到git:
git remote add origin https://github.com/Yyue98/YYBase
git add .
git commit -a -m "0.1.0"
git push origin master
git tag 0.1.0
git push origin 0.1.0
要将本地库配置到远程库中,需要将spec文件调试通,不能有error和warning。
修改好spec文件后需要使用命令测试一下(测试前确保在github中新建了一个同名的repository):
pod lib lint
库如果没有通过验证,就说明Spec配置有问题,在Spec出现warnings是不行的,我们可以根据警告进行修改,也可以我们执行pod lib lint --allow-warnings
pod lib lint --allow-warnings
当你的pod lib lint通过则说明本地库文件验证无误可以部署了。这时候就可以把代码push到远程库。注意可能报错的有的是路径问题,有的是你添加的源码必须能调试通过。
此时本地的lib调试通过的了就可以添加到远程的spec库中。在添加前同样需要在github中创建一个repo。地址为:https://github.com/Yyue98/YYDemoSpecs.git
pod repo add YYDemoSpecs https://github.com/Yyue98/YYDemoSpecs.git
repo添加成功后你可以在 ~/.cocopods/repos/ 目录下找到和你建立的spec repo同名的文件夹。然后你就需要cd到你存放需要添加的spec文件的目录下将它push到远程端仓库中。
pod repo push YYDemoSpecs YYBase.podspec
和lib lint一样在push之前会先检查lib的有效性,只有通过检查才能够push到远程库中。
三 . 发布到Cocoapods官方库中
首先先用cd到Spec文件所在的目录,然后执行pod lib lint。和发布远程库一样,必须在lib lint没有错误的前提下才能发布。
提交之前,你需要注册pod账号。实质上是将"邮箱--名称--电脑"绑定在一起,所以这里不需要密码。
pod trunk register EMAIL [NAME]
以下是该指令的帮助文档,大概意思是:
如果第一次注册,邮箱和名称都是必须的。如果已经注册过,可以省略名称(除非你想修改名称)。推荐填写描述信息,以及给出了一些Examples,按着Example做就可以了。
pod trunk register EMAIL [NAME]
Register a new account, or create a new session.
If this is your first registration, both an `EMAIL` address and your
`NAME` are required. If you’ve already registered with trunk, you may omit
the `NAME` (unless you would like to change it).
It is recommended that you provide a description of the session, so that
it will be easier to identify later on. For instance, when you would like
to clean-up your sessions. A common example is to specify the location
where the machine, that you are using the session for, is physically
located.
Examples:
$ pod trunk register aaa@qq.com 'Eloy Durán' --description='Personal Laptop'
$ pod trunk register aaa@qq.com --description='Work Laptop'
$ pod trunk register aaa@qq.com
结果
[!] Please verify the session by clicking the link in the verification email that has been sent to [email protected]
去邮箱认证即可。
注册账号之后,我们可以尝试将Spec提交到Specs Repo:
执行命令:
pod trunk push YYBase.podspec --allow-warnings
但我这里的问题是发布成功了,但是使用pod search YYBase却找不到自己发布的库。
四 . 验证私有库
新建工程YYBaseTest然后,cd 到主目录,编辑Podfile文件:
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' # 清华镜像
source 'https://github.com/Yyue98/YYDemoSpecs.git' # 私有库
platform :ios, '12.0'
target 'YYBaseTest' do
pod 'YYBase'
pod 'YYKit'
pod 'WCDB'
end
开头的两行分别使用的是清华的镜像以及自己的私有库。
接下来在Xcode中打开工作空间,就会找到你install的私有库了。