使用CocoaPods打造 --- 第三方库
如果对 Cocoapods 不是很了解的同鞋,可以 查看官方文档。
CocoaPods工作原理
开始之前先简单大致介绍下 CocoaPods
工作原理吧。
我画的神图:
原理分析:
- 平常使用的AFNetworing、SDWebImage等库都是将自己的
(.podspec)库描述文件
提交到cocoaPods
的官方远程索引库当中;
可以看这里https://github.com/CocoaPods/Specs/tree/master/Specs -
(.podspec)库描述文件
包含了库的名字、版本号、描述、作者、真实的源码所在地址、。。。等等信息; - 当执行
pod setup
时,会把当前时间点的远端索引库clone到我们本地;
可以通过前往文件夹(command+shift+G):~/.cocoapods/repos/master/Specs
查看clone到本地的索引库; - 当执行
pod search 库名
(搜索的是本地索引库)指令时,第一次搜索特别慢,因为会在~/Library/Caches/CocoaPods
路径下生成一个检索索引文件search_index.json
(我的大小在25.5M左右);以后搜索会直接在该文件内查找,快很多。 - 当执行
pod install
时,会根据(.podspec)库描述文件
中的source
找到库的源码地址,安装到项目中。
提到安装指令这里补充下:
当执行 pod install
/ pod update
指令时,会触发cocoaPods更新本地Spec仓库。需要更新整个仓库,从检查到具体的更新,速度自然快不了。
可执行下面的指令解决:
// --verbose:查看详细的执行日志
// --no-repo-update : 告诉pod不用检测和更新本地spec仓库
$ pod install --verbose --no-repo-update
$ pod update --verbose --no-repo-update
pod install
和 pod update
的区别:
-
pod install
: 如果发现项目中有Podfile.lock
文件,直接执行该文件;若没有,执行Podfile
文件,然后生成Podfile.lock
文件; -
pod update
:不管是否有Podfile.lock
文件,直接执行Podfile
文件,然后生成Podfile.lock
文件。
官网的比较 ->戳这里。
打造远程第三方库:
(1):新建远端仓库,存放我们的第三方库源码。
a). 新建仓库,这里我使用的是gitHub仓库,仓库的名称最好和我们第三方库的名称一致,这样便于别人在GitHub上搜索。
b). clone仓库到本地,新建框架文件夹,放入我们的源码。
在clone下来的文件夹中,创建QYTimer文件夹,放入源码c). 将源代码push推到远端仓库。
d). 为项目打上tag(因为.podspec文件中的s.source需要用到tag来区分版本),将tag推到远端仓库。
对tag不熟的可以 查看git官网。
// 打上标签
$ git tag 0.0.1
// 查看标签
$ git tag
// 将标签同步到远端仓库
$ git push origin --tags
远端仓库 tag
(2):在源代码同级文件夹中,:创建.podspec描述文件。
a). 创建.podspec 文件。
// QYTimer 为.podspec文件的名字
$ pod spec create QYTimer
成功创建.podspec 文件
在文件夹中如下:
.podsepc文件要和存放源码的文件同级
b). 编辑.podspec 文件。
对该文件内的属性不是很了解的可以看 ->戳这里,毕竟官方才是最权威的。
Pod::Spec.new do |s|
# 库的名字
s.name = "QYTimer"
# 版本号
s.version = "0.0.1"
# 摘要(长度要小于下面的描述)
s.summary = "QYTimer Class."
# 描述
s.description = "a Class of solve the retainCycle."
# 主页(这里采用该库的gitHub主页)
s.homepage = "https://github.com/qiaoyoung/QYTimer"
# 许可证
s.license = "MIT"
# 作者信息
s.author = { "填写你的名字" => "填写你的邮箱" }
# 源码地址(这里使用gitHub仓库地址)
s.source = { :git => "https://github.com/qiaoyoung/QYTimer.git", :tag => "#{s.version}" }
# 需要安装的源码
s.source_files = "QYTimer", "QYTimer/**/*.{h,m}"
end
(3):文件校验。
a). 先本地校验 .podspec 文件。
$ pod lib lint
校验之后发现有好多警告,根据提示可以使用 --allow-warnings
忽略警告。
$ pod lib lint --allow-warnings
本地校验通过,其他信息可暂时忽略
b). 远程校验 .podspec 文件。
$ pod spec lint
同本地验证一样,出现警告使用 --allow-warnings
忽略。
$ pod spec lint --allow-warnings
远端校验通过
(4):注册trunk,上传 .podspec文件到CocoaPods官方远程索引库。
a). 在命令行输入下列指令,然后会收到一封带有验证了链接的邮件。
// 邮箱名:必须真实,需要验证
// --verbose:查看详细的执行日志
$ pod trunk register 邮箱名 '用户名' --verbose
点击邮件链接确认。然后可以执行该指令查看注册信息:
$ pod trunk me
b). 上传 .podspec文件到远程索引库。
$ pod trunk push QYTimer.podspec
上传验证的时候如果报警告的错误,可以根据提示使用 --allow-warnings
忽略。
$ pod trunk push QYTimer.podspec --allow-warnings
上传成功
我们可以在CococaPods的远程仓库中看到我们刚才上传的 .podspec文件。
此时我们的库已经发布成功啦!
(5):项目中使用我们的第三方库。
a). 搜索我们刚才发布的第三方库。
$ pod search QYTimer
然而并没有搜到,因为我们的第三方库发布到了CocoaPods远端索引库,而我们的本地索引库并没有更新。
// 更新本地索引库
$ pod setup
// 删除旧的检索索引文件
$ rm ~/Library/Caches/CocoaPods/search_index.json
再次搜索:
$ pod search QYTimer
b). 将搜索到的第三方库复制到我们的 Podfile
文件中,更新我们的pod库。
$ pod install
c). 在需要使用的类中引入我们的第三方库。
#import "ViewController.h"
#import "NSTimer+QYBlockSupport.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[NSTimer qy_scheduledTimerWithTimeInterval:1 repeats:YES block:^{
NSLog(@"test~");
}];
}
到此就完成了!
第三方库地址 ->戳这里。
通过上面的步骤,一步步手动创建了自己的第三方库,是否觉得有点麻烦呢?(我是感觉挺繁琐的)
这里有个自动创建的方式推荐给大家,作者阐述的非常详细,可以 ->戳这里查看原文。
千里执行,始于足下。