zoukankan      html  css  js  c++  java
  • Podfile grammar

    参考:http://www.jianshu.com/p/8af475c4f717

    Podfile
    Podfile文件详细描述了一个或多个工程中targets的依赖关系。Podfile会默认创建一个隐式的目标链接到工程中用户的第一个target,名称为“default”。
    一个Podfile可以非常简单:

    *pod 'AFNetworking', '~> 1.0'*
    

    也可以配置的复杂一点,如下:

    *source'https://github.com/CocoaPod/Specs.git'
    
    platform:ios,'6.0'
    inhibit_all_warnings!
    
    xcodeproj'MyProject'
    
    pod'ObjectiveSugar','~ 0.5'
    
    target:test do
       pod'OCMock','~>'2.0.1'
    end
    
    post_installdo|installer|
       installer.pods_project.targets.each do |target|
         puts #{target.name}
       end
    end*
    

    Dependencies(依赖项)
    Podfile描述用于各个用户targe中的依赖项
    pod 是声明指定依赖的方法
    podspec 提供了一个简单的API用于创建podspecs
    target 允许你在工程中限定依赖项只在你指定的targets中生效
    
    1. 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.1.2并且 <0.2.0,并且始终是你指定范围内的最新版本
    
    

    版本控制列表可用做更细的版本管理
    想要了解更过关于版本控制策略的信息,可以参阅:

    [Semantic Versioning](http://semver.org/)
    [RubyGems Versioning Policies](http://docs.rubygems.org/read/chapter/7)
    

    最后,你可以使用标示:head来指定版本. 这就意味着工程会使用指定spec下该pod的最新可以用版本,不过会强制下载’bleeding edge’高风险版本(HEAD).务必小心使用,因为spec可能导致不兼容

    pod 'Objection', :head
    

    Build configurations(编译配置)

    重要提示:

    下面的语法是暂时的,将来很可能会更改,恕不另行通知。因为大家都在要求这个功能,所以我们发布了这个功能。你可以使用它,但你可能需要改变你的Podfile去使用未来版本的CocoaPods。不管怎么样,一个简单清晰的升级路径会提供给你
    默认情况下, 依赖项会被安装在所有target的build configuration中。为了调试或者处于其他原因,依赖项只能在给定的build configuration中被启用

    pod'PonyDebugger', :configurations=>['Release','App Store']
    

    当然你也可以弄白名单只指定一个build configurations

    当然你也可以只指定一个buildconfigurations
    
    Subspecs

    当你用一个名字装Pod的时候,它将安装所有定义在podspec里面的默认subspec
    你可以这样指定:

    pod 'QueryKit/Attribute'
    

    也可以指定一个集合,像下面这样:

    pod'QueryKit', :subspecs=>['Attribute','QuerySet']
    

    当然依赖也可以从其他源来获取

    Using the files from a local path (使用本地文件)

    如果你想用一个自己开发的本地的Pod,你可以用path选项

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

    使用这个选项后,Cocoapods会将给定的文件夹认为是Pod的源,并且在工程中直接引用这些文件。这就意味着你编辑的部分可以保留在CocoaPods安装中

    被引用的文件夹可以来自你喜爱的SCM,甚至当前仓库的一个git子模块

    注意:Pod的podspec文件也应该被放在这个文件夹当中


    From a podspec in the root of a library repository (引用仓库根目录的podspec)

    有的时候你可能想要使用一个最新的开发版本,或者某一个二次开发版本。如果是这样,你可以在pod声明中特别标明
    使用仓库中的master分支:

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

    使用仓库的其他分支:

    pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :branch=>'dev'
    

    使用仓库的某个tag:

    pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :tag=>'0.7.0'
    

    或者指定一个提交记录:

    pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :commit=>'082f8319af'
    

    需要特别注意的是,虽然这样将会满足任何在Pod中的依赖项通过其他Pods
    但是podspec必须存在于仓库的根目录中,如果根目录中没有存在这个podspec文件,你将不得不使用下面提到的几种方式之一


    From a podspec outside a spec repository, for a library without podspec(在一个不带podsepec的库里引用外部的spec)

    如果一个podspec能够从外部的仓库源的获取,设想一下,也通过HTTP来获取podspec:

    pod'JSONKit', :podspec=>'https://example.com/JSONKit.podspec'
    

    podspec

    使用一个在给定podspec中声明的Pod的依赖项。如果如果没有参数被传递,那么在Podfile根部的第一个podspec会被使用。它将会被库所在的工程所使用

    注意:这个不会包含哪些来自于podspec的资源而仅仅是来自于CocoaPods基础架构
    例子:

    podspec
    podspec :name=>'QuickDialog'
    podspec :path=>'/Documents/PrettyKit/PrettyKit.podspec'
    

    target

    在target块里面定义依赖项,如果对应的target不想添加依赖可以用:exclusive => true参数

    Podfile文件将会创建一个全局的target名叫:default,default将会生成一个libPod.a文件。这个target将会与用户工程中的第一个target绑定起来如果没有指定特殊的link_with属性的话

    例子:
    定义一个target:

    target:ZipApp do
         pod'SSZipArchive'
    end
    

    定义一个独有的target:

    target:ZipApp do 
    pod 'SSZipArchive'
     target: test,:exclusive=>true do 
           pod'JSONKit'
      end
    end
    

    Target configuration (目标项配置)

    这些设置用来控制cocoapods生成project

    开头platform用来说明项目的工作平台,xcodeproj允许你指定需要链接的工程


    platform

    指定了静态库应该被编译在哪个平台

    Cocoapods提供一个默认的部署目标如果你自己没有指定的话。目前的默认设置是iOS4.3、OS X10.6、tvOS 9.0、watchOS 2.0

    如果部署目标要求iOS版本小于4.3,armv6架构将会被添加到ARCHS中

    例子:
    指定平台

    platform:ios,
    platform:ios
    

    xcodeproj

    指定包含引用pod库的target的Xcode工程会被链接到

    如果没有显示的project被指定,那么会默认使用target的父target指定的project作为目标。如果如果没有任何一个target指定目标,那么就会使用和Podefile在同一目录下的project。同样也能够指定是否这些设置在release或者debug模式下生效。为了做到这一点,你必须指定一个名字和:release/:debuge关联起来

    例子:
    指定用户工程

      # Look for target to linkwithinan Xcode project called
      # `MyProject.xcodeproj`.
    xcodeproj'MyProject'
    
    target :test do  
      # This Pods library linkswitha targetinanother project. 
     xcodeproj'TestProject'
    end
    

    用自定义的编译配置

    xcodeproj'TestProject','Mac App Store'=> :release,'Test'=> :debug
    

    指定用户project里面中面的target链接到pod库

    如果没有显示的指定target,那么就会链接到工程中的第一个target。所以如果你只需要链接第一个target,那么你不需要使用link_with

    例子:
    链接用户工程里面的一个target

    link_with'MyApp'
    

    链接多个target

    link_with'MyApp','MyOtherApp'
    

    inhibit_all_warnings!

    屏蔽cocoapods库里面的所有警告

    这个特性也能在子target里面定义

    如果你想屏蔽某pod里面的警告也是可以的:

    pod'SSZipArchive', :inhibit_warnings=>true
    

    use_frameworks!

    可以用framework的pod替代静态库的

    这个特性可以通过定义子target来继承


    Workspace(工作区)

    这部分内容列举了配置workspace的选项和设置全局配置


    workspace

    指定应该包含所有projects的Xcode workspace.

    如果没有显示指定workspace并且在Podfile所在目录只有一个project,那么project的名称会被用作于workspace的名称

    例子:
    指定一个workspace

    workspace'MyWorkspace'
    

    generate_bridge_support!

    指定后从所有已经安装的pod的头文件中会生成一个BridgeSupport元数据文档
    一些脚本语言例如MacRuby,Nu,JSCocoa能够利用这些作为桥接类型、函数等等


    set_arc_compatibility_flag!

    指定后-fobjc-arcflag会被添加到OTHER_LD_FLAGS中

    这个是用来解决编译non-ARC项目出现的一个的bug(详见 #142)。本来这些事情都是有Xcode4.3.2中的libtool自动完成的,不过看来现在flag-fobjc-arc已经不被支持了。所以必须显示的指定使用这个方法

    这个方法在CocoaPods 1.0中也许会被废弃


    Sources

    Podfile检索了所有sources(repos)中的specs

    Sources是全局的,不存储在每个target定义里面


    source

    指定specs的位置

    使用这个方法指定sources。sources的顺序是有关系的的。CocoaPods将使用pod第一次出现的source中的最高版本(后续的source中哪怕出现了更高的版本,也不予考虑)

    cocoapods 官方source是隐式的需要的,一旦你指定了其他source 你就需要也把官方的指定上

    例子:
    指定Artsy库然后带上官方的

    CocoaPods Master Repository
    source'https://github.com/artsy/Specs.git'
    source'https://github.com/CocoaPods/Specs.git'
    

    Hooks(钩子)

    Podfile提供了钩子用来在安装时被调用

    钩子是全局的,不存储在每个target定义里面


    plugin

    指定的插件应该使用在安装过程中

    使用此方法来指定一个插件,应该在安装过程中使用,同时,应传递给插件调用时的选项

    例子:
    指定用slather和cocoapods-keys插件

    plugin'cocoapods-keys', :keyring=>'Eidolon'
    plugin'slather'
    

    pre_install

    这个钩子允许你在Pods被下载后但是还未安装前对Pods做一些改变

    它接受Pod::Installer作为唯一参数

    例子:
    定义pre_install钩子

    pre_install do|installer|
       # Dosomething fancy!
    end
    

    post_install

    这个钩子允许你在生成的Xcode project写入硬盘或者其他你想执行的操作前做最后的改动

    它接受Pod::Installer作为唯一参数

    例子:
    给所有target自定义编译配置

    post_install do|installer|
         installer.pods_project.targets.each do|target|
    target.build_configurations.each do|config|
        config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
         end
       end
    end
    
    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    我的学习之路_第十二章_多线程
    我的学习之路_第十一章_字符流
    我的学习之路_第十章_IO流
    我的学习之路_第九章_File类,递归
    cordova的安装
    webapp之初次接触cordova
    mac自带终端常用命令(我自己经常会用到的)
    AJAX初识
    前端适配之细说rem(网易的移动端页面布局做法)
    移动端网页开发三(纠结适配的那些年)
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7419936.html
Copyright © 2011-2022 走看看