Podfile使用说明

什么是Podfile ?

CocoaPods是用ruby实现的,所以Podfile文件的语法就是ruby的语法。
podfile是一个说明文件,用以描述管理一个或者多个Xcode project的target的依赖库。这个文件应该且必须被命名为Podfile
Podfile能够很是简单,下面的例子增长了Alamofire依赖库到单个target:html

target 'MyApp' do use_frameworks! pod 'Alamofire', '~> 3.0' end

下面是一个更复杂的例子,Podfile连接了app和它的测试bundle: ios

source 'https://github.com/CocoaPods/Specs.git' source 'https://github.com/Artsy/Specs.git' platform :ios, '9.0' inhibit_all_warnings! target 'MyApp' do pod 'GoogleAnalytics', '~> 3.1' # Has its own copy of OCMock # and has access to GoogleAnalytics via the app # that hosts the test target target 'MyAppTests' do inherit! :search_paths pod 'OCMock', '~> 2.0.1' end end post_install do |installer| installer.pods_project.targets.each do |target| puts target.name end end

若是你但愿多个target共享同一个pods,那么能够用关键字abstract_targetgit

# There are no targets called "Shows" in any Xcode projects abstract_target 'Shows' do pod 'ShowsKit' pod 'Fabric' # Has its own copy of ShowsKit + ShowWebAuth target 'ShowsiOS' do pod 'ShowWebAuth' end # Has its own copy of ShowsKit + ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end end

Podfile中自带一个隐藏的、默认的abstract target,因此你也能够用以下的方式达到上面例子的一样效果:github

pod 'ShowsKit' pod 'Fabric' # Has its own copy of ShowsKit + ShowWebAuth target 'ShowsiOS' do pod 'ShowWebAuth' end # Has its own copy of ShowsKit + ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end

指定pod版本

当开始一个项目,你可能会想要使用最新版本的pod依赖库。 若是是这种状况,只需忽略版本要求。 swift

pod 'SSZipArchive'

稍后在项目您可能想要使用特定版本的pod依赖库,在这种状况下,您能够指定版本号。xcode

pod 'Objection', '0.9'

除了没有版本,或特定的一个,也可使用逻辑运算符: ruby

  • '> 0.1' 高于0.1的任何版本
  • '>= 0.1' 版本0.1或更高版本
  • '< 0.1' 低于0.1的任何版本
  • '<= 0.1' 版本0.1或更低的版本

除了逻辑运算符,还有一种运算符:bash

  • '~> 0.1.2' 版本0.1.2和0.2版本之间的任意版本,不包括0.2和比0.2更高的版本
  • '~> 0.1' 版本0.1和版本1.0之间的任意版本,不包括1.0和比1.0更高的版本
  • '~> 0' 版本0或比版本0更高的版本,这基本上和不指定版本号的效果是同样的。

使用本地文件夹内的依赖库

若是你想创建一个本地依赖库和项目之间的关系,即项目依赖本地文件夹的某个依赖库,能够用关键字pathapp

pod 'Alamofire', :path => '~/Documents/Alamofire'ide

使用podspec更新依赖库

使用仓库的master分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

使用仓库中其余的分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

使用指定tag的分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'

或者使用指定commit号的版本:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'

使用path将把本地文件夹做为pod依赖库的源,而且将会直接从给定的文件夹中把pod依赖库连接进pod项目。这意味着咱们对这个本地文件夹的编辑与修改将会被pod直接更新。

source 'URL' : 指定镜像仓库的源
platform : ios, '6.0' : 指定所支持系统和最低版本
inhibit_all_warnings! :屏蔽全部warning
workspace '项目空间名': 指定项目空间名
xcodeproj '工程文件名':指定xcodeproj工程文件名

~ > : 从指定版本到倒数第二位版本号升1为止,好比 '~> 1.2.1'是指 1.2.1 <= 版本 < 1.3.0。'~>1.2'是指1.2<= 版本 < 2.0

举例

pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本 pod 'AFNetworking', '2.0' //只使用2.0版本 pod 'AFNetworking', '> 2.0' //使用高于2.0的版本 pod 'AFNetworking', '>= 2.0' //使用大于或等于2.0的版本 pod 'AFNetworking', '< 2.0' //使用小于2.0的版本 pod 'AFNetworking', '<= 2.0' //使用小于或等于2.0的版本 pod 'AFNetworking', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本 pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本 pod 'AFNetworking', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

CocoaPods pod install/pod update更新慢的问题

/默认执行pod install 或者 pod update命令,会更新远程cocopodsde spec库。因此致使命令执行的比较慢,咱们能够采用如下命令来提升更新速度,不更新CocoaPods的spec仓库直接install/update。
pod update --verbose --no-repo-update
pod install --verbose --no-repo-update

Podfile和Target

Podfile本质上是用来描述Xcode工程中的targets用的。若是咱们不显式指定Podfile对应的target,CocoaPods会建立一个名称为default的隐式target,会和咱们工程中的第一个target相对应。换句话说,若是在Podfile中没有指定target,那么只有工程里的第一个target可以使用Podfile中描述的Pods依赖库。

项目存在多Target状况

项目存在多个Target的时候,须要配置Podfile文件来支持新增长的Target,不然只支持项目默认创建时生成的Target:

a.多个Target使用相同的pods依赖库

a、默认新建的项目只有一个target,可是咱们能够给项目天阿基额外的target。若是项目中存在多个target,且两个Target所依赖的的第三方库彻底相同,则可使用
link_with关键字,将Podfile写成以下方式:

link_with 'CocoaPodsTest', 'Second' platform :ios platform :ios, ‘9.0’ pod 'AFNetworking', '~> 2.0'

link_with 'CocoaPodsTest', 'Second' platform :ios pod 'Reachability', '~> 3.0.0' pod 'SBJson', '~> 4.0.0' platform :ios, '7.0' pod 'AFNetworking', '~> 2.0'

若是你按照上面的写法编辑Podfile,而后执行pod undate 或pod install,你会发现如下的错误:


Snip20161204_1.png


意思是link_with关键字已通过期,如今不在支持,咱们须要用target blocks来代替link_with。查看官方文档,以下:


Snip20161204_3.png

因此,咱们能够经过abstract_target和target继承的方式代替link_with.

b.多个的Target须要不一样的依赖库

若是不一样的target使用不一样的依赖库,则能够:

platform :ios target :'Test' do pod 'Reachability' pod 'SBJson' pod 'AFNetworking' end target :'Second' do pod 'OpenUDID' end

inhibit_all_warnings!的做用

用于屏蔽cocoapods库里面的全部警告。


Snip20161204_2.png

这个特性也能在子target里面定义,若是你想屏蔽某pod里面的警告也是能够的:

pod 'SSZipArchive', :inhibit_warnings => true

use_frameworks!的做用

在pods中用frameworks替代静态库。
另,通常开发swift项目时,咱们会在podfile中添加这一句。

podspec文件

后缀名为podspec(cocoapods specification)的文件是cocoapods的说明文件,该文件为Pods依赖库的描述文件,每一个Pods依赖库必须有且仅有那么一个描述文件。该文件包括依赖库的名字、版本、描述、license、author、source、platform等信息。

其余连接:
Podfile语法参考(译)
Cocoapods的Podfile常见语法总结
CocoaPods详解之----使用篇 
CocoaPods详解之----进阶篇 
CocoaPods详解之----制做篇
CocoaPods安装和使用教程以及一些常见问题 
如何制做本身的Pod库
The Podfile(英)
Podfile语法参考(译)
(实验)Podfile的target与link_with 
Podfile Syntax Reference(英)
Podfile Syntax Reference(英)

相关文章
相关标签/搜索