什么事CocoaPods?
CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。
使用CocoaPods可以让我们能自动化的、集中的、直观的管理第三方开源库。
CocoaPods的安装使用Ruby实现的,所以要先安装Ruby环境,确保Ruby安装完成后即可开始CocoaPods的安装:
执行该命令,安装工程中如果有询问,输入y即可。
安装结束后输入:
如果不报错,即为安装成功。
执行install半天没反应,是由于国内访问网址的问题,解决方法:
这是将下载网址转到了国内淘宝的镜像上,验证可执行:
验证通过时会显示:
gem的版本过老,到时没法正常安装,解决方法:
安装之后执行:
会报错,看看是什么错误在进行解决,
一般会遇到路径不对的问题,可通过执行:
(注:***即为当前所用的ruby版本号)
CocoaPods安装成功之后升级很简单再次执行:
CocoaPods的添加到文件夹中有两种方案
直接添加一个Podfile
例如:
这样,就是找到路径文件夹,添加Podfile,这种方法添加Podfile时,在文件加中可以什么都没有包括项目在内,当然这样Podfile里面也都是空的,编写起来比较麻烦,所以个人认为,知道即可但不建议使用。
另一种添加Podfile 的方法
找到路径跟上面是一样的,但是Podfile的添加改成了init,这样一来,Podfile中就会有示例,如:
把对应的引入包写在对应的区域中,但是这样初始化就必须在该目录下有一个项目,不然会显示这个错误:
使用CocoaPods用它自动向项目中添加第三方库就要去编辑它,从而添加所需的第三方库,示例代码下:
以上示例说明:
pod ‘Reachability’, ‘~> 3.0.0′即为添加’Reachability’这个第三方库,’~> 3.0.0’表示下载库的版本为3.0.0.***版本。
pod ‘SBJson’ 后面没有添加版本号,所以下载下来的默认版本即为当前的最新版本。
在不同的target下书写的库也就表示,在项目中,不同的target中引用了不同的库,在执行’CocoaPodsDemoTests’的时候就没法引用到’Reachability’这个库了。
(注:不是所有的库都可以引用的,是否可以通过cocoapods引用需要登录 cocoapods.org 网站进行查询,而在cocoapods上面没有的库或者私有库想通过Podfile引用到项目中,在后面会介绍方法)
执行导入命令
添加完第三方库之后,要用命令将其导入项目中,即执行:
终端上会显示:
执行到最后一句之后,咱们的项目文件夹下会多出三个文件,分别是:CocoaPodsDemo.xcworkspace、Podfile.lock和Pods文件夹。这样,CocoaPods就添加到咱们的项目文件夹下了。从现在开始,再编写项目的话就要用CocoaPodsDemo.xcworkspace进行编写。
CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程在新生成的Pods文件夹下。整个第三方库工程会生成一个名为libPods.a的静态库提供给我们的项目使用。
为了方便我们直观管理工程和第三方库,CocoaPodsDemo工程和Pods工程会被以workspace的形式组织和管理起来,也就是CocoaPodsDemo.xcworkspace文件。而且原来工程的设置也被相对应的改动了,这样直接打开以前的项目进行编译就会报错,所以只能通过新生成的workspace对工程进行管理。
整个项目的目录如上图
运行时要先进行Pods的编译,操作如图
选择项目对应的Pods,然后快捷键运行 command + B
这样就对Pods进行了编译,之后在选择如图:
选择会项目,编译就可以正常使用了
我们通过pod install操作,在文件夹中添加了Podfile.lock文件,下面我们看看Podfile.lock中的内容是什么:
这个文件中显示了咱们Pods引入第三方库的信息以及当前库的版本,从而方便了团队开发。
在团队开发中,上传的文件中只包括了Podfile这个文件,在执行pod install 之后生成的三个文件是不予上传的。这时团队开发的每个开发者都会在本地进行pod install 的操作,对于引入时声明了版本号的第三方库来说还好,如:
这样其他团队成员添加第三方库时会找到对应的Reachability的版本但是如果引入第三方库时没有写明版本号,如
这样Pods会默认获取最新版本的SBJson,这样如果获取时间不一样,很有可能造成团队成员间SBJson库的版本不同意,这样会引起很多麻烦,所以解决这一问题有两种方案:
1.更改Podfile中所指向SBJson库的版本号,使其指向一固定版本
2.团队中每个成员 ,执行pod update命令,使其一直保持最新版本
在使用CocoaPods过程中,最多接触的就是Podfile文件了,所以下面对该文件进行一下简要的说明:
通常情况下,Podfile文件是放在项目的根目录下的,如图:
虽然Podfile不一定放在这里,在其他位置也可以,只需要在Podfile中指定一下项目路径就好。但不建议这样操作,因为整个项目上传时很容易忽略掉Podfile文件,为了不引起不必要的麻烦,在此就不多做介绍了。
Podfile本质上是描述Xcode工程中的targets用的,如果我们不显示在Podfile 中对应的target,CocoaPods会创建一个名为default的隐藏target,会和我们自身工程项目中的第一个target对应。所以在Podfile中如果没有指定target,那么我们项目中的第一个target可以默认使用Podfile中引入的库。
项目中的target
Podfile中对应的target
在Podfile的target中,不同的target引入了不同的库,而且可以做到引入的数量不同。如果想再多个target 引用相同的库的时候也可以通过关键字link_with来实现,如图:
这样两个target就都引入了Reachability库和SBJson库。
话不多说,看图就行:
Podfile中引入库的版本不是写死的,执行该命令会更新依赖的库
在CocoaPods中搜索SBJson库的信息(注:SBJson只是个示例,可以改为你需要的其他的库)
执行该命令,会更新电脑上保存的Pods库
之前所说的全部都是CocoaPods引用别人所写,所上传的库,虽然好用,但有些地方还是不尽如人意。所以为了方便自己,而且不破坏CocoaPods对项目文件的设置,我们有了另一个办法,就是创建自己的CocoaPods库,方便自己使用,也可以发布到http://cocoapods.org/上面方便他人调用(注:不过发布过去需要cocoapods方面审核,审核通过的话,恭喜你,你就可以去向你的小伙伴们炫耀了~~) ,下面开始讲如何创建自己的CocoaPods库。
CocoaPods都是托管在github上的,所以我们需要在github上创建自己的库
图片中:
1:创建的项目名 (必填)。
2:项目信息说明(可选)。
3:创建仓库的公开性,选成public的。
4:是否创建README文档,建议选上。
5:是否添加.gitignore文件,这个文件是设置git将什么文件纳入版本管理的,选与不选随个人,不过建议选上。
6:license类型,正规的库都会有一个,而且Pods对这个也有要求,所以最好选上。
这些信息都填写完成就可以点击创建了。
先将自己在github上创建的库clone到本地,执行命令:
$ git clone https://github.com/Misstime0501/DemoCocoaPods.git (注:这里克隆的项目是你自己的就可以了)
打开clone到本地的文件夹,里面只显示这LICENSE和README.md这两个文件,下面的操作都是在该目录下进行的
首先,在咱们文件夹下添加咱们所要引用的文件即咱们的库文件
为了简洁明了,只添加了一个DemoCocoaPods.h文件到文件夹中(注:为了不引起其他项目引用该库,创建的文件的文件名一定不要与引入该库的项目文件名有一样的命名)
为了将该库作为CocoaPods的过程不出现其他影响因素,建议在这个时候就将该库上传一下即
现在咱们的项目如图:
.DS_Store文件为本地信息的传入,最好不要把它上传当项目中。
在项目目录下进行如下操作
在文件最下面输入.DS_Store
然后:wq
继续输入:
现在,咱们github服务器上面的项目就变成了这样:
下面开始把咱们的库变成CocoaPods的库所需要的文件
添加后缀为.podspec文件,为了保证我们的库与项目名称同意,添加的文件为DemoCocoaPods.podspec
执行完该命令后,目录下多了一个DemoCocoaPods.podspec,在该文件中信息内容很多,但需要修改的内容并不多,
该文件是ruby的,所以很容易看懂他们是什么意思,主要用到的有如下几点:
更改完设置之后退出并保存对DemoCocoaPods.podspec的编辑
接下来进行pod的验证
设置版本号(注:该版本号要与DemoCocoaPods.podspec中的version一致)
这两条命令是为pod添加版本号并打上tag.之后执行
下图为正常的验证
在执行pod验证的时候打印出warning或者error信息都是验证失败,对照着显示出的异常进行修改。打印信息很详细
将文件直接上传到github上
现在咱们github上面的项目就变成了这样:
这样,咱们的库就创建完成了,如果不把咱们的库上传到cocoapods.org到这里库的设置结束了,接下来咱们先介绍如何引用自己的库,之后在介绍如何上传到cocoapods.org。
咱们继续用之前创建的CocoaPodsDemo来引用咱们自己的库
输入
之后执行
咱们的库这样就被添加到了pods目录下
这就是如何不通过cocoapods.org来添加咱们自己所制作的库!下面接着介绍如歌在cocoapods.org上面添加自己的库
要想添加自己的库到别人的网站上,首先必须得把别人的项目down到咱们的机子上,在上传给他们,审核通过才会出现,所以第一步是获取cocoapods的代码,下载地址是:https://github.com/CocoaPods/Specs
下面的操作就是如何把别人的库获取到自己这里,修改后在提交给作者,他们的审核通过后咱们就可以在cocoapods上面看到咱们的库了~
进入https://github.com/CocoaPods/Specs后点击fork
然后自己的库中会多出一个Specs的库,进入咱们自己的分支:
然后把她clone到本地,以便进行修改
Specs下载到本地后,咱们会发现里面有茫茫多的文件夹,他们都是目前发送到cocoapods上面的库,而他们里面所拥有的也不过只是.podspec.json文件,所以咱们要传到Specs项目中的就是咱们自己的podspec文件,保存的原则是:
Specs文件夹–>咱们的Pos库文件夹–>版本号文件夹–>podspec文件
如图:
上传本地的Specs
刷新一下咱们自己的github库,可以看到咱们刚刚的上传:
之后咱们要把咱们的库提交到Specs中,
点击下图的绿色按钮
会显示到这个界面:
点击里面的Create Pull Request九个一把我们的Specs传给CocoaPods官方的Specs库中了。
剩下的就是等待了,等着CocoaPods维护人员审核咱们的库,如果通过了就可以在官方的cocoapods.com上面出现咱们的库,然后引用就可以了。
在等待的过程中可以通过https://github.com/CocoaPods/Specs/pulls这个网址,查看咱们项目的进度,当然cocoapods也会把结果发送到咱们的邮箱中,注意查收~
http://code4app.com/article/cocoapods-install-usage
http://cocoapods.org/
http://guides.cocoapods.org
http://guides.cocoapods.org/using/index.html
http://blog.csdn.net/wzzvictory/article/details/20067595
http://blog.csdn.net/wzzvictory/article/details/19178709
http://blog.csdn.net/wzzvictory/article/details/18737437