Podlfile

Podfile 是什么?
Podfile 是一個說明文件,他描述了一個或多個 Xcode 工程中的 targets 的依賴。該文件應該簡單的命名為 Podfile。本篇指導中的所有示例,都是基于 CocoaPods 1.0 版本的。

一個 Podfile 可以是非常簡單的,一下將 Alamofire 添加到了一個單獨的 target 中:
target 'MyApp' do
use_frameworks!
pod 'Alamofire', '~> 3.0'
end
注:由于 CocoaPods 是基于 ruby 開發的,這兒的這段代碼,實際上是 ruby 語言中的 ‘閉包’。至于,ruby 語言不是這個系列的主題,之后會有新的系列介紹我學習,使用 ruby 的情況。

一下是一個比較復雜的 Podfile 鏈接了一個 app 和 他的測試包(test 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
譯者注:
1、source 'https://github.com/CocoaPods/Specs.git' 和 source 'https://github.com/Artsy/Specs.git' 這兩行是表示 specs 文件的位置(url)。CocoaPods 其實是維護了一個 Specs 的索引,所有的 CocoaPods 中的 pod 中的 Spec 都包含在這個索引中,而 pod 中的源代碼并沒有包含在這個索引里。當你在自己的電腦上安裝 CocoaPods 的時候,這份索引就復制到了你的電腦上。當你在命令行中運行 pod search xxx 的時候,實際上就是在這個索引中尋找 pod。pod install 的時候,實際上是根據 Podfile 提供要安裝的 pod 名,版本;Podfile.lock 提供版本限定,然后找到相應的 spec ,通過 spec 中的描述,來進行安裝的。
2、可以建立自己的 spec 索引。
3、post_install 是在 pod install ,安裝完 pod 之后,執行的一段代碼。這里執行的,是將安裝的所有的 pod 打印名稱。這實際上是一個 hook,你可以根據自己的需要自定義行為。

如果你想要將同樣的 pod ,給多個 targets 分享,請使用一個 abstract_target (抽象的 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

將 CocoaPods 從 0.x 遷移到 1.0 版本:
這有個博客,解釋了底層的改變(http://blog.cocoapods.org/CocoaPods-1.0/

指定 pod 版本:
當你開始開始做一個工程的時候,你理所當然的想要使用一個 pod 最新的版本。如果是這樣的場景,你只要簡單的省略掉版本要求(version requirements)就行:
pod 'SSZipArchive'

一段時間后,你可能想要將一個 pod 鎖定在一個指定的版本上。這時,你可以指定該 pod 的版本號:
pod 'Objection', '0.9'

除開不指定版本,或者指定一個版本,你也可以使用邏輯操作符:
'> 0.1' —— 任何大于 0.1 的版本,不包括 0.1
'>= 0.1' —— 任何大于 0.1 的版本,包括 0.1
'< 0.1' —— 任何小于 0.1 的版本,不包括 0.1
'<= 0.1' —— 任何小于 0.1 的版本,包括 0.1

在邏輯操作符之外,CocoaPods 還有一個開放式操作符 ~>:

'~> 0.1.2' —— 從 0.1.2 到 0.2 的版本,不包括 0.2 和 高于0.2 的版本 (也就是 0.1.2 <= version < 0.2)
'~> 0.1' —— 從 0.1 到 1.0 的版本,不包括 1.0 和 高于 1.0 的版本 (也就是 0.1 <= version < 1.0)
'~> 0' —— 大于 0 的所有版本,這么寫的話,和沒寫這句話等效

從本地文件中使用文件:
如果你想要連同客戶端工程開發一個 pod ,你可以使用 :path
pod 'Alamofire', :path => '~/Documents/Alamofire'
通過使用這個選項,CocoaPods 將會認定你所提供的文件夾是 pod 的根目錄,并將這個文件夾中的文件直接鏈接到 Pods 工程中。這意味著,你對 pod 的編輯在之后的歷次 CocoaPods 安裝(CocoaPods installations)中都是持續不變的(因為,此時這個 pod 引用的是你指定的文件夾中的文件,這些文件變了,pod 才會變)。這個引用文件夾,可以是你最喜歡的 SCM 的一份檢出,或者甚至是當前倉庫的一個 git 子模塊。
注意,這個 pod 的 podspec 文件需要包含在你指定的文件夾內。

從一份位于 library 倉庫根源的 podspec:
有時,你可能想要使用一個 pod 的尖端版本(bleeding edge version),一個指定的修改或者你自己擁有的 fork。如果是這樣的情況,你可以通過你的 pod declaration 來指定。
使用 repo 的 master 分支:
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

使用 repo 的一個不同的分支:
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'

使用 repo 的一個 tag:
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'

或者指定一個提交:
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'

很重要的一點是,這意味著,某一個 pod 所指定的版本,要滿足所有 Pod 中的其他 pod 對于該 pod 的依賴。
podspec 文件,需要放在 repo 的根目錄下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容