开场
对于这个东西估计绝大多数的童鞋应该都不陌生了,不过这里还是稍微对大家唠唠嗑,可能对于那些没用过的童鞋也有可能是一种帮助呢,我们要一视同仁对吧。 对于Cocoapods是个什么东西估计大家多少听过了,可能有些童鞋没有用过,但是多少也听过了。如果没听过的童鞋就听我唠一句嗑:
Cocoapods是一个框架依赖管理的一个管理工具,主要是用来管理框架一些开源库在项目中的引用。简而言之就是用来管理你的项目中对开源框架或自己公司子模块的依赖。
当然作为使用者来说,入门教程简单的要死。但是作为一个开发人员不能只满足于当前的步伐,而应该不断进取,要做到能想Cocoapods提交项目,并且在自己项目中熟练应用该工具的程度。特别是如果一个大的公司来说的话,就有可能进行模块化开发了。对于国内很多公司还是在用OC来说的话,Cocoapods应该还是一个不错的模块管理的工具。
当然第一篇文章来点简单的,主要是正对使用者来进行讲解的。
安装
当然,刚开始说这说那也没什么卵用,不如直接开始。要使用这个工具,首先当然应该是安装这个工具啦。其实安装这个就一句话的事情:
$ sudo gem install cocoapods
但是在Mac OS X EL Capitan(10.11)中就会出现Operation not permitted - /usr/bin/pod
的错误,当我遇到这个错误的时候我整个人是拒绝的,可是遇到问题还是得解决嘛。后来发现了两个解决方案。
方案一
$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
[...]
1 gem installed cocoapods
$ export PATH=$PATH:$HOME/Sofware/ruby/bin
****
方案一中主要是将GEM的安装路径进行修改,将GEM的默认安装路径修改成了$HOME/Software/ruby这个目录,然后再进行安装,最后将安装路径添加到PATH下,这样可以不用带完整的路径进行运行命令。
方案二
$ gem install cocoapods -n ~/Software/ruby
方案二中使用了gem的自带参数-n—–即指明安装的路径,如果要使用这种的话,也需要将该路径加入PATH下才可以不用带完整的路径进行运行命令。
个人建议是使用第一种,将GEM的安装路径进行修改。这样不需要每次都用-n命令进行指定路径。
就此,关于安装Cocoapods暂时应该就没有什么问题了。如果还有什么问题的童鞋可以留言。
初次使用
关于使用我这里主要分为两个部分,一个部分是关于命令的层次来说的,一部分是关于Podfile的层次来说的。当然对于简单的使用用起来也非常简单。不过刚开始就来一个简单的吧。
就比如我们最常用的AFNetworking
、SDwebImage
以及iOS-Echarts
来说的话,只需在项目名.xcodeproj
的目录下创建一个Podfile
的文件,然后打开文件,填入一下内容:
platform:ios,'7.1'
pod 'SDWebImage', '~>3.7'
pod 'AFNetworking'
pod 'iOS-Echarts'
然后保存,并且打开一个命令行,跳转到Podfile
的目录直接运行pod install
即可。 当然,你会看到你的目录下回多了目录Pods
, 文件Podfile.lock
以及文件项目名.xcworkspace
。当然以后你打开项目就再也不是xcodeproj
的文件了,而是wxcworkspcace
的文件。然后你打开项目就会看到除了你的项目外,下面多了一个Pods
的一个项目。就此,对于你项目需要依赖的AFNetworking
、SDwebImage
的依赖了。非常简单对吧? 当然如果你只是想简单的使用Cocoapods
,估计到这一步就完全够了。
对于一个进步青年或者是对于一个使用复杂的场景来说的话,对于Podfile
的深入了解还是有一定帮助的。
深入至Podfile
比如在你使用AFNetworking
是在是2.6.3的版本情况下封好API,但是在你Podfile
中对于AFNetworking
的定义还是为pod 'AFNetworking'
,突然有一天AFNetworking
升级为3.0+了。那时候估计你的心里就是:当时我就懵逼了。因为在3.0中移除了AFHTTPRequestOperationManager
等一些类,一旦你重新执行的pod update
的话,你的程序估计就再也怎么编译不过了。如果你不熟悉Cocoapods
的话,估计你就真的的懵逼了。
在第一次pod install
后,会生成Podfile.lock
文件,这个文件会把所有第三方库的当前版本给lock住,意思就是只要不修改Podfile
,那所有第三方库的版本都会停留在当前版本。不管某个库是否升级,自己或是同伴执行pod install
都只会下载被lock住的版本。使用pod update
才会更新到最新版。
不过有了这篇教程的一些讲解,妈妈再也不用担心你的作业了。 这部分主要讲解一下Podfile
的一些参数和使用的讲解,对于一些使用场景会非常有帮助的。
pod
首先先来讲讲最核心的pod
关键字吧。关于pod的使用在上面可以看得出来是pod '框架名' 参数
。 当然对于前面两个pod '框架名'是固定的,没上面好说,参数的话,这里主要讲参数。 参数一: 版本号 从上面可以看得出SDWebImage就接了版本号。不过版本号可以是大于、小于、等于等。当然具体的可以是'> 3.7', '>= 3.7', '< 3.7', '3.7'以及'~> 3.7'。关于普通的就没什么好说了,最后一个~>
指的是正对最后一位来说。如使用'~> 3.7.4',意味着'>= 3.7.4'并且'< 3.8.0'的意思。 参数二:地址Cocoapods
可以指定某一个git的目录或者是本地的目录。有的时候我们希望一直用某一个版本最新的版本,即使没有打版本的话,我们可以直接后面接上:git => 'https://github.com/gowalla/AFNetworking.git'
。
当然除了这种情况外,还有可能是如果是我们自己开发的私有库,并且在开发阶段的情况下,可能就希望开发模式进行引用,则可以使用path参数::path => '~/Documents/AFNetworking'
参数三:tag、branche、commit 有的时候我们希望引用有一个tag,branch或者是comit的内容的话可以使用这个参数,分别用 :branch => 'branch名'
、:tag => 'tag名'
、:commit => '
提交号'。 参数四:inhibit*all*warnings!
对于博主来说,一个项目中很多warnings
是非常难以忍受的。不知道小伙伴们会不会有这种感觉,自然这个参数是用来避免那些第三方框架中带来的warnings
。博主很喜欢他。
platform
这个参数是只依赖的库希望在哪个平台被编译。 一句话带过吧,直接使用platform :ios, '7.0'
。说希望采用iOS7.0的进行编译。之前有个同事没有指定只写了platform
后面都没有了,然后一直怎么编译都编译不通过。当时我不知道,一直以为他在某个环节出错了。后来才知道,如果在platform
后面没有跟东西的话,默认是在iOS4.3
,OSX 10.6
,tvOS 9.0
以及watchOS 2.0的情况下编译的。很多库都是从6.0或者7.0才开始支持的,自然编译不通过。所以小伙伴们记得要注意这点,后面要跟上具体的platform的参数。
target
这个是指定具体的配置是适配在哪个target
,这里的target
值得就是Xcode
中的target
。如果对于一些项目中你的不同target
引用的框架不同的话,可以采用这个进行区分。
target "ShowsApp" do
pod 'ShowsKit'
target "ShowsTV" do
pod "ShowTVAuth"
end
end
use_frameworks!
这个指明编译成动态库,而不是静态库,特别是在使用Swift库的过程中,特别需要使用这句。不过他会把所有项目的编译动态库,这一点有点不好。不过在使用Swift库的过程中就没办法了。
source
这个参数是指Cocoapods
从哪些仓库(Spec)
中获得框架的源代码,如果在结合使用开源库以及自己私有库的情况下,这个参数还是非常有意义的。博主之前在用到自己私有库的情况下就不懂这点,最后查了好久资料才知道的。只需要在Podfile
文件开头列出你需要引用库的所有仓库地址即可。
source 'https://github.com/artsy/Specs.git'
source 'https://192.168.0.90:8888/MySepcs/Specs.git'
好了对于Podfile
常用几个稍微拿出来说了一下,如果还有更深入不懂的情况下,可以查看Cocoapods Guide。 最后给一个官方的Demo吧.
# open source
source 'https://github.com/CocoaPods/Specs.git'
# my work
source 'https://github.com/Artsy/Specs.git'
target 'App' do
pod 'Artsy+UIColors'
pod 'Artsy+UIButtons'
pod 'FLKAutoLayout'
pod 'ISO8601DateFormatter', '0.7'
pod 'AFNetworking', '~> 2.0'
target 'AppTests' do
pod 'FBSnapshotTestCase'
pod 'Quick'
pod 'Nimble'
end
end
命令行pod install 和 pod update
在使用·Cocoapods·的过程中,我们可能要更新或者是安装一个新的第三方框架。自然这里就避免不了要用这两个命令了。对于这两个命令来说,一个是在有新的第三方框架引入是运行,另一个是纯粹为了更新本地的第三框架。 对于二者的命令来说其参数都是大同小异的,这里大概讲解一下。
参数--no-repo-update
这个参数应该是大家最常用的参数之一,其主要的作用是用于在执行pod install
和pod update
两条命令是而执行的pod repo update
的操作。而pod repo update
则是跟新本地已有的第三框框架。对于大多数情况下,我们只希望跟新当前项目的,并且这个操作执行的时间都是相对比较长,所以在执行这两条命令是,大多数人都添加了这个参数。
参数--verbose 和 --silent
这两个参数是用来控制pod
命令的,而有些人不希望看到输出的情况下可以选择--silent
。而对于在执行这两条命令的情况下如果出错了,则可能添加--verbose
的参数能看到具体的出错信息。--verbose
则是用来输出这两条命令执行过程中所包含的所有信息。对于大多数的Cocoapods
的命令行来说都带有着两个参数。
其他的细节就不具体说了,大家可以通过help
命令来进行查看详情。
结论
简单来说要使用Cocoapods
只需通过三个步骤:安装、写Podfile
和pod install
命令即可。
到此关于Cocoapods
作为使用者来说的大体内容就差不多这么多了。关于细节方面大家可以通过Cocoapods官网来进行查阅。在下一篇中,我将对Cocoapods
作为一个贡献者或者制作一个私有库进行讲解。而可能在第三篇中会对在Cocoapods
在项目进行模块化管理过程中的使用进行讲解,其中应该包含了在一个项目做同时使用私有库以及开源库之间引用以及如何进行管理各个模块进行大致描述。
tips
使用Cocoapods
时卡在Setting up CocoaPods master repo
所有项目的Podspec文件都托管在https://github.com/CocoaPods/Specs,,第一次执行pod setup
时, CocoaPods
会将这些podspec
索引文件更新到本地的~/.cocoapods
目录下,这个索引文件比较大,所以第一次更新时非常慢.友好人士在国内的服务器建立了Cocoapods
索引库的镜像,所以执行索引跟新操作时候会快很多.具体操作方法如下:
$ pod repo remove master
$ pod repo add master [https://gitcafe.com/akuandev/Specs.git](https://gitcafe.com/akuandev/Specs.git)
$ pod repo update
这是使用gitcafe上的镜像,将以上代码中的 https://gitcafe.com/akuandev/Specs.git 替换成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的镜像。