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.pswp.cn/news/252018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252018.shtml
英文地址,請注明出處:http://en.pswp.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接收數組作為參數…