基础-Podfile讲解

2.podfile文件讲解

podfile是一个规范文件,描述一个或多个项目目标依赖项,CocoaPods管理iOS组件库

各种参数配置含义

一、Install! :适用于整个podfile文件

  1. 指明了cocoapods安装podfile使用的安装方法和配置项
     install! 'cocoapods', //第一个参数是安装方法,剩下的参数是选择项,现在安装方法只支持’cocoapods’
     :deterministic_uuids => false, 
     :integrate_targets => false 
    
  2. 还有以下配置参数
     :clean
     :deduplicate_targets
     :deterministic_uuids
     :integrate_targets
     :lock_pod_sources
     :warn_for_multiple_pod_sources
     :share_schemes_for_development_pods
    

    正常情况下 不需要配置这个参数

  3. build configurations (编译配置) 默认情况下,依赖项会被安装在所有target的build configrations中。
     //为了调试或者其他原因,他们可以在给定的configurations中启用
     pod 'PonyDebugger', :configurations => ['Debug', 'Beta']
     //或者,你可以至指定一个build configration
     pod 'PonyDebugger', :configuration => ‘Debug'
    

    注意:默认情况下依赖会包含在所有配置中,如果你想指定需要手动配置。

  1. source: 默认被指定的依赖项会在全局级别的指定源中匹配搜索。可以为特依赖关系指定源
     //指定特定源中搜索,并忽略任何全局源*
     pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'
    
  2. Subspecs: ##### 当使用依赖库名字引入依赖库时,也会默认安装依赖库中的所有子模块。

     //指定引用指定子模块
     pod 'QueryKit/Attribute’
     //指定一个子模块集合
     pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
    

二、依赖(Dependencies)

  1. pod: 指明项目依赖,一个依赖是由一个pod名称和一个可选版本定义

    a. 如果不添加版本号,pod默认使用最新的 如:pod ’SSZipArchive’
    b. 如果项目需要一个指定的pod,需要添加版本号,如: pod ‘objection’, ‘0.9’
    c. 指定版本范围

    · = 0.1 版本是0.1
    · >0.1 任何大于0.1版本
    · >=0.1 0.1和大于0.1版本
    · <0.1 小于0.1版本
    · <=0.1 0.1和小于0.1版本
    · ~=0.1.2 0.1.2<= pod < 0.2 版本 ,安装这个范围内最新的版本

  1. podspec : 引用仓库根目录的(from a pod spec in the root of a library repository)引用pod在指定节点或者分支
     //主分支:
     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
    
     //指定分支: :branch => 'dev'
     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
    
     //指定的tag:  :tag => '0.7.0'
     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
    
     //指定的节点: :commit => '082f8319af'
     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit =>  ‘082f8319af'
    
  2. target: 在制定的快内定义pod target和指定的依赖范围吗。target应该与Xcode的target相符。默认情况下,target包含定义在块外的依赖,除非指定不使用inherit!来继承。例如:
     //a. target A 引入AFN库
     target ‘A'do
         pod 'AFN'
     end
    
     //b.定义’A’ 引入AFN库,定义’B’target引入’SSZip’库,同时会继承’A’target 中的’AFN’库
         target ‘A’ do
             pod ‘AFN’
             target ‘B’ do
                 inherit! :search_paths
                 pod 'SSZip'
             end
         end
      // c.  Target 多层嵌套
     target 'ShowsApp’ do
          # ShowsApp 仅仅引入ShowsKit 
          pod 'ShowsKit’ 
             # 引入 ShowsKit 和 ShowTVAuth
             target 'ShowsTV' do 
                 pod 'ShowTVAuth’ 
             end
             # 引入了Specta和Expecta以及ShowsKit
             target 'ShowsTests' do 
                 inherit! :search_paths 
                 pod 'Specta’ 
                 pod 'Expecta’ 
              end 
         end
     end         
    
  3. abstract_target :定义一个抽象的target,为了方便target目标依赖继承。这个target是没有被定义在xcode中的。例子:
     // a.定义一个抽象target
     abstract_target 'Networking' do     
         pod ‘AlamoFire'
         target 'Networking App 1’
         target 'Networking App 2’
     end
     // b. 定义一个包含多个target的抽象target
     # 注意:这是个抽象的target工程中并没有这个target.引入ShowsKit 
     abstract_target 'Shows' do 
         pod 'ShowsKit’ 
         # ShowsiOS target会引入ShowWebAuth库以及继承自Shows的ShowsKit库 
         target 'ShowsiOS' do 
             pod 'ShowWebAuth’ 
         end
         # ShowsTV target会引入ShowTVAuth库以及继承自Shows的ShowsKit库 
         target 'ShowsTV’ do
             pod ‘ShowTVAuth'
         end 
         # ShowsTests target引入了Specta和Expecta库,并且指明继承Shows,所以也会引入ShowsKit
         target 'ShowsTests’ do
             inherit! :search_paths 
             pod 'Specta’ 
             pod 'Expecta’ 
         end 
     end
    

    意义:可以使用抽象类 来统一 需要继承的pod。

  1. script_phase 使用这个命令给target添加shell脚本
     target ‘A’ do
         script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World”'
         script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'
     end
    

    [图片上传失败...(image-ba78ef-1536051559429)]

  2. abstract! 指定当前target是抽象target
     target ‘A’ do
         abstract!
     end
    
  3. inherit! 设置当前target的继承关系
     target 'App’ do
         target ‘A’ do
             #这个target 继承 父级所有行为
             inherit! :complete  
         end
         target ‘B’ do
             #这个target 不继承 父级所有行为
             inherit! :none 
         end
         target ‘C’ do
             #target 仅继承 父级的搜索路劲
             inherit! :search_paths 
         end
     end
    

三、 Target configuration 这些设置来控制cocoapods生成工程。说明使用在什么平台上

  1. platform :用于指明应建立的静态库的平台。
     cocoapods默认指定的平台配置:
         · iOS->4.3
         · OS X->10.6
         · tvOS->9.0
         · watchOS->2.0
     如果部署target需要iOS<4.3,armv6架构讲被添加到ARCHS
         使用:
         
     #指定具体平台和版本
     platform :ios, ‘4.0'
     platform :ios
    
  2. Inhibit_all_warnings! :忽略cocoapods依赖库的警告。可以全局 定义,也可以定义在子target中,也可以指定某个库
     pod 'SSZipArchive', :inhibit_warnings => true
     pod 'SSZipArchive', :inhibit_warnings => false
    
  3. use_frameworks! :通过指定 use_frameworks! 要求生成的是framework而不是静态库,swift没有静态库。
     *如果使用use_frameworks!命令会在Pods工程下的Frameworks目录下生成依赖库的framework*
     *如果不使用use_frameworks!命令会在Pods工程下的Products目录下生成.a的静态库*
    
  4. user_modular_headers!: 使用此命令表示所有cocoapods静态库都是用模块化Headers
     //指定某个pod使用模块化
     pod 'SSZipArchive', :modular_headers => true                
     pod 'SSZipArchive', :modular_headers => false
    

四、workspace

  1. workspace : 默认情况下,我们不需要指定,直接使用与Podfile所在目录的工程名一样就可以了。如果要指定另外的名称,而不是使用工程的名称,可以这样指定:
     workspace 'MyWorkspace'
    

五、source

  1. source: 是指定pod的来源。如果不指定source,默认是使用CocoaPods官方的source。(建议使用默认设置)
     # 使用其他来源地址 
     source 'https://github.com/artsy/Specs.git’ 
     # 使用官方默认地址(默认) 
     source 'https://github.com/CocoaPods/Specs.git'
    

    主要:如果使用自己的私有库,需要使用source指定到私有库地址

六、Hooks Podfile提供了hook机制,它将在安装过程中调用。hook是全局性的,不存储于每个target中。

  1. Plugin :指定应在安装期间使用的插件。使用此方法指定应在安装期间使用的插件,以及当它被调用时,应传递给插件的选项。例如:
     # 指定在安装期间使用cocoapods-keys和slather这两个插件 
     plugin 'cocoapods-keys', :keyring => 'Eidolon' plugin 'slather’ 
    
  2. pre_install: 当我们下载完成,但是还没有安装之时,可以使用hook机制通过pre_install指定要做更改,更改完之后进入安装阶段。格式如下:
      pre_install do |installer| 
          # 做一些安装之前的更改 
     end
    
  3. post_install:当我们安装完成,但是生成的工程还没有写入磁盘之时,我们可以指定要执行的操作。 比如,我们可以在写入磁盘之前,修改一些工程的配置:
     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 
    
  4. def :def命令来声明一个pod集:
     def 'CustomPods’ 
         pod 'IQKeyboardManagerSwift’ 
     end 
     //然后,我们就可以在需要引入的target处引入
     target 'MyTarget' do CustomPods 
     end 
    

    作用:如果有多个target,而不同target之间并不全包含,那么可以通过这种方式来分开引入。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 前言 iOS开发会经常用到cocoapods管理第三方,简单、方便、高效。如何集成cocoapods在cocoap...
    Moker_C阅读 851评论 0 1
  • 经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写...
    qitianjin阅读 1,346评论 2 0
  • 转载自:http://blog.csdn.net/qitianjin/article/details/517738...
    YYT1992阅读 2,622评论 0 0
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,466评论 0 39
  • 瓢虫:蟑螂大侠武功卓绝。我曾听说,他孤身斩杀了几十只大黄蜂。 螽斯:对对,我也听说了。 流星蛛:一只蟑螂斩杀几十只...
    风满楼1992阅读 221评论 0 2