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 dopod'OCMock','~>'2.0.1'
endpost_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 dopod'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'endend
end

转载于:https://www.cnblogs.com/xulinmei/p/7419936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信...

1.协程并发&#xff1a;切保存状态单线程下实现并发&#xff1a;协程 切 保存状态 yield 遇到io切&#xff0c;提高效率 遇到计算切&#xff0c;并没有提高效率 检测单线程下 IO行为 io阻塞 切 相当于骗操作系统 一直处于计算协程&#xff1a;。。。单线程下实现…

pymysql

连接数据库 连接时需要额外指定参数dbcursor.execute( ) 操作SQL语句SELECT VERSION() 获得当前版本CREATE DATABASE spiders DEFAULT CHARACTER SET utf8 创建数据库import pymysql db pymysql.connect(hostlocalhost,user ,password ,port3306)#IP&#xff0c;用户名&#x…

C# 多线程及同步简介示例

60年代&#xff0c;在OS中能拥有资源和独立运行的基本单位是进程&#xff0c;然而随着计算机技术的发展&#xff0c;进程出现了很多弊端&#xff0c;一是由于进程是资源拥有者&#xff0c;创建、撤消与切换存在较大的时空开销&#xff0c;因此需要引入轻型进程&#xff1b;二是…

opencv-python单目视觉标定,简单易用。

import cv2 import numpy as np import glob# 设置寻找亚像素角点的参数&#xff0c;采用的停止准则是最大循环次数30和最大误差容限0.001 criteria (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)# 获取标定板角点的位置 objp np.zeros((6 * 7, 3), np.f…

python多线程多进程

一、线程&进程 对于操作系统来说&#xff0c;一个任务就是一个进程&#xff08;Process&#xff09;&#xff0c;比如打开一个浏览器就是启动一个浏览器进程&#xff0c;打开一个记事本就启动了一个记事本进程&#xff0c;打开两个记事本就启动了两个记事本进程&#xff0c…

Spring Framework 5.1.6、5.0.13 与 4.3.23 发布

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; Spring Framework 5.1.6、5.0.13 与 4.3.23 发布了。 v5.1.6 包含 49 个 bug 修复和功能改进&#xff1b;v5.0.13 是 5.0.x 系列的最后一个版本&#xff0c;包含了 25 个 bug 修复和功能改进&am…

curl命令

Curl是一种支持多种协议&#xff08;http、https&#xff0c;ftp&#xff09;等&#xff0c;利用url规则在命令行下工作的文件传输工具&#xff0c;还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征 1.语法&#xff1a; cu…

单目视觉标定:世界坐标系、相机坐标系、图像坐标系、像素坐标系——简单粗暴,粗暴

转&#xff1a;https://blog.csdn.net/chentravelling/article/details/53558096 1.正文 图像处理、立体视觉等等方向常常涉及到四个坐标系&#xff1a;世界坐标系、相机坐标系、图像坐标系、像素坐标系。例如下图&#xff1a; 构建世界坐标系只是为了更好的描述相机的位置在哪…

Python基础知识-05-数据类型总结字典

python其他知识目录 1、一道题&#xff0c;选择商品的序号。程序员和用户各自面对的序号起始值 如有变量 googs [汽车,飞机,火箭] 提示用户可供选择的商品&#xff1a; 0,汽车1,飞机2,火箭用户输入索引后&#xff0c;将指定商品的内容拼接打印&#xff0c;如&#xff1a;用户输…

Python学习笔记之异常

Python用异常对象来表示异常情况&#xff0c;如果异常对象未被处理或捕捉&#xff0c;程序就会回溯&#xff08;traceback&#xff09;中止执行。 异常可以在出错时自动引发&#xff0c;也可以主动引发。 异常被引发后如果不被处理就会传播至程序调用的地方&#xff0c;直到主程…

VSFTP的使用

一、基本安装 1.安装服务 yum -y install vsftpd //centos Redhat apt-get install vsftpd //debian ubuntu 2.开启服务 service vsftpd status //查看状态&#xff0c;默认是关闭的 service vsftpd start 3.开机随操作系统启动 chkconfig vsftpd on4.添加账号 useradd -d /…

OC Swift混编-Swift.h File not found

https://www.jianshu.com/p/f860fe1718ca 2016.09.13 11:53* 字数 266 阅读 1935评论 1喜欢 1今天碰到个神坑,本人项目是OC项目,最近开始使用Swift开始替代.但是,在替代的已开始就出现问题了:新建swift文件,然后提示创建bridging-Hearder文件,然后swift可以使用OC代码了.这些都…

视觉标定,再来一波!!更简单粗暴!!!!!!

继续&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 一、四个坐标系简介和转换 相机模型为以后一切标定算法的关键&#xff0c;只有这边有相当透彻的理解&#xff0c;对以后的标定算法才能有更好的理解。本人研究了好长时间&#xff0c;几乎每天…

深入浅出NIO之Selector实现原理

2019独角兽企业重金招聘Python工程师标准>>> 前言 Java NIO 由以下几个核心部分组成&#xff1a; 1、Buffer 2、Channel 3、Selector Buffer和Channel在深入浅出NIO之Channel、Buffer一文中已经介绍过&#xff0c;本文主要讲解NIO的Selector实现原理。 之前进行sock…

介绍一下画图小能手matplotlib。

我们在做完数据分析的时候需要把分析出来的结果&#xff0c;做一个图形化的形象表达&#xff0c;这里我们就需要用到画图小能手matplotlib&#xff0c;下面就演示一下常用的条形图和折线图 散点图 散点图的做大的作用是研究两个变量的相关性&#xff08;正相关&#xff0c;负相…

立体视觉标定源代码C++,简单粗暴!粗暴·······

疑点解答&#xff1a; 摄像机矩阵由内参矩阵和外参矩阵组成&#xff0c;对摄像机矩阵进行QR分解可以得到内参矩阵和外参矩阵。 内参包括焦距、主点、倾斜系数、畸变系数 &#xff08;1&#xff09; 其中&#xff0c;fx&#xff0c;fy为焦距&#xff0c;一般情况下&#xff…

11. 临时表

-- 查询5大洲国家总数 SELECT continent,COUNT(*) FROM country GROUP BY continent;-- 演示临时表 CREATE TEMPORARY TABLE tmp_table ( continent VARCHAR(20), COUNT INT );INSERT INTO tmp_table SELECT Asia AS continent,COUNT(*) FROM country WHERE continent Asia;…

MongoDB负载信息一目了然 阿里云HDM重磅发布MongoDB监控和诊断功

2019独角兽企业重金招聘Python工程师标准>>> 混合云数据库管理&#xff08;HDM&#xff09;的统一监控、告警、诊断功能新增了对MongoDB的支持。 通过直观的方式将MongoDB多个维度的负载信息统一整合&#xff0c;不仅可以清晰的查看实时负载信息&#xff0c;也可以方…

在iview的Table中添加Select(render)

首先对Render进行分析&#xff0c;在iview官方的文档中&#xff0c;找到了table插入Button的例子&#xff1a; [javascript] view plaincopy { title: Action, key: action, width: 150, align: center, render: (h, params) > { return h(div, [ h(Butt…

JavaScript中call和apply方法

1 /*2 在js中 call和apply常用于绑定作用域3 */4 //1 简单的绑定5 function sum(a,b){6 return ab;7 }8 //将sum的功能绑定给test2来执行9 function test2(a,b){ 10 return sum.call(this,a,b); 11 } 12 // call 和apply的区别是 apply接收数组作为参数…