in Cocoapods ~ read.

Cocoapods系列教程(一)——入门

开场

对于这个东西估计绝大多数的童鞋应该都不陌生了,不过这里还是稍微对大家唠唠嗑,可能对于那些没用过的童鞋也有可能是一种帮助呢,我们要一视同仁对吧。 对于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的层次来说的。当然对于简单的使用用起来也非常简单。不过刚开始就来一个简单的吧。

就比如我们最常用的AFNetworkingSDwebImage以及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的一个项目。就此,对于你项目需要依赖的AFNetworkingSDwebImage以及iOS-Echarts的依赖了。非常简单对吧? 当然如果你只是想简单的使用Cocoapods,估计到这一步就完全够了。

对于一个进步青年或者是对于一个使用复杂的场景来说的话,对于Podfile的深入了解还是有一定帮助的。

深入至Podfile

比如在你使用AFNetworking是在是2.6.3的版本情况下封好API,但是在你Podfile中对于AFNetworking的定义还是为pod 'AFNetworking',突然有一天AFNetworking升级为3.0+了。那时候估计你的心里就是:当时我就懵逼了。因为在3.0中移除了AFHTTPRequestOperationManager等一些类,一旦你重新执行的pod update的话,你的程序估计就再也怎么编译不过了。如果你不熟悉Cocoapods的话,估计你就真的的懵逼了。

由于有Podfile.lock文件的保护下,在没有执行pod update命令的情况下,是不会讲已有的第三方依赖库进行升级的。所以运行pod install的情况下还是能编译通过的。(感谢@星辉Sunny小伙伴的提醒!)

不过有了这篇教程的一些讲解,妈妈再也不用担心你的作业了。 这部分主要讲解一下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 => '提交号'。 参数四:inhibitallwarnings! 对于博主来说,一个项目中很多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 installpod update两条命令是而执行的pod repo update的操作。而pod repo update则是跟新本地已有的第三框框架。对于大多数情况下,我们只希望跟新当前项目的,并且这个操作执行的时间都是相对比较长,所以在执行这两条命令是,大多数人都添加了这个参数。

参数--verbose 和 --silent

这两个参数是用来控制pod命令的,而有些人不希望看到输出的情况下可以选择--silent。而对于在执行这两条命令的情况下如果出错了,则可能添加--verbose的参数能看到具体的出错信息。--verbose则是用来输出这两条命令执行过程中所包含的所有信息。对于大多数的Cocoapods的命令行来说都带有着两个参数。

其他的细节就不具体说了,大家可以通过help命令来进行查看详情。

结论

简单来说要使用Cocoapods只需通过三个步骤:安装、写Podfile和pod install命令即可。

到此关于Cocoapods作为使用者来说的大体内容就差不多这么多了。关于细节方面大家可以通过Cocoapods官网来进行查阅。在下一篇中,我将对Cocoapods作为一个贡献者或者制作一个私有库进行讲解。而可能在第三篇中会对在Cocoapods在项目进行模块化管理过程中的使用进行讲解,其中应该包含了在一个项目做同时使用私有库以及开源库之间引用以及如何进行管理各个模块进行大致描述。

comments powered by Disqus