zoukankan      html  css  js  c++  java
  • Podfile使用说明

    什么是Podfile ?

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

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

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

    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_target

    # 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,所以你也可以用如下的方式达到上面例子的同样效果:

    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依赖库。 如果是这种情况,只需忽略版本要求。 

    pod 'SSZipArchive'

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

    pod 'Objection', '0.9'

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

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

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

    • '~> 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更高的版本,这基本上和不指定版本号的效果是一样的。

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

    如果你想建立一个本地依赖库和项目之间的关系,即项目依赖本地文件夹的某个依赖库,可以用关键字path

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

    使用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(英)

  • 相关阅读:
    lintcode:Flip Bits 将整数A转换为B
    lintcode:strStr 字符串查找
    lintcode:Subtree 子树
    lintcode 容易题:Partition Array by Odd and Even 奇偶分割数组
    lintcode:在二叉查找树中插入节点
    lintcode:在O(1)时间复杂度删除链表节点
    lintcode:哈希函数
    lintcode:合并排序数组 II
    lintcode:合并排序数组
    lintcode:数飞机
  • 原文地址:https://www.cnblogs.com/wsnb/p/6163365.html
Copyright © 2011-2022 走看看