Cocoapods基礎(chǔ)使用

Cocoapods基礎(chǔ)使用

基礎(chǔ)使用

創(chuàng)建一個(gè)Cocoapods管理的Xcode項(xiàng)目

  1. 創(chuàng)建一個(gè)Xcode項(xiàng)目

  2. 打開(kāi)終端,cd到工程目錄下,使用pod init命令,會(huì)初始化一個(gè)Podfile的文件

  3. 打開(kāi)Podfile文件达址, 第一行指定我們使用的平臺(tái)以及版本,例如:platform :ios, '9.0'晌区,指定支持iOS9之后

  4. 為了使cocoapods關(guān)聯(lián)我們指定的項(xiàng)目,我們需要添加target '$TARGET_NAME' do end通贞,在end前pod要添加的庫(kù)名即可

    target 'MyApp' do
        pod 'ObjectiveSugar'
    end
    
  5. 保存修改的Podfile文件朗若,執(zhí)行pod install命令即可

當(dāng)需要像一個(gè)已經(jīng)存在的xcworkspace中集成cocoapod功能時(shí),只需要在目標(biāo)塊外部添加一行來(lái)指定workspace即可:workspace 'MyWorkspace'

cocoapod做了哪些事情

  1. cocoapod創(chuàng)建了一個(gè)workspace
  2. 將我們的工程添加到該workspace,
  3. 添加需要的靜態(tài)庫(kù)到該workspace
  4. pod庫(kù)之后都會(huì)打包成libPods.a昌罩,將該文件link到工程
  5. pod庫(kù)的編譯依賴參數(shù)等變?yōu)閹?kù)的.xcconfig文件捡偏,根據(jù)該文件向項(xiàng)目中添加Xcode configuration設(shè)置在編譯時(shí)的依賴參數(shù)
  6. 改變項(xiàng)目 target configurations基于Cocoapods
  7. 添加工程執(zhí)行script為Pods-resources.sh的bash腳本,然后在每次編譯時(shí)將pod庫(kù)中的資源文件復(fù)制

pod install && pod update

pod install

pod install只在我們每次修改了podfile文件,增加峡迷、刪除银伟、修改了依賴庫(kù)時(shí),才需要執(zhí)行該命令來(lái)檢索指定庫(kù)
當(dāng)執(zhí)行pod install后绘搞,會(huì)將我們使用的庫(kù)的版本號(hào)寫入podfile.lock文件中彤避,此文件用來(lái)追蹤我們使用的pod庫(kù)的版本號(hào)
執(zhí)行pod install,會(huì)下載Podfile.lock文件中已存在的pod庫(kù)的指定版本,或者不在podfile.lock中的pod庫(kù)的合適版本

pod outdated

此命令會(huì)根據(jù)podfile.lock中的版本夯辖,列出所有有較新版本的pod庫(kù)琉预,這就是我們執(zhí)行pod update或者 pod update PODNAME會(huì)更新的版本內(nèi)容(這些寫版本也是會(huì)受限于我們的podfile中設(shè)置的pod庫(kù)版本號(hào) pod 'MyPod', '~>x.y')

pod outdated

會(huì)檢索比podfile.lock中版本更新的庫(kù),并更新(只要該版本符合podfile中版本的限制)
pod update PODNAME 更新一個(gè)
pod update 更新所有

因?yàn)閜odfile.lock是記錄我們pod庫(kù)版本的蒿褂,因此我們需要向遠(yuǎn)程倉(cāng)庫(kù)中commit圆米、push該文件

Podfile

一個(gè)比較復(fù)雜的podfile文件如下

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

具體用法可以查看cocoapod官網(wǎng),下面為部分用法解析:

多個(gè)Target共享pod庫(kù)

使用abstract_target來(lái)使多個(gè)目標(biāo)共享pod
abstract_target是抽象對(duì)象,只是為了讓方便繼承啄栓,并不存在實(shí)際該target

# 并沒(méi)有名為'Shows'的目標(biāo)工程
abstract_target 'Shows' do
  pod 'ShowsKit'
  pod 'Fabric'

  # 'ShowsiOS’工程包含'ShowsKit'和'Fabric'pod庫(kù)的拷貝
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # 'ShowsTV’工程包含'ShowsKit'和'Fabric'pod庫(kù)的拷貝
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end
end

可以簡(jiǎn)寫為 和我們上面復(fù)雜的的Podfile 例子一樣了

pod 'ShowsKit'
pod 'Fabric'

target 'ShowsiOS' do
  pod 'ShowWebAuth'
end

target 'ShowsTV' do
  pod 'ShowTVAuth'
end

指定版本

  • 指定特別的版本

    • pod 'SSZipArchive' 用最新的pod庫(kù)版本
    • pod 'Objection', '0.9' 指定使用的為特定的pod庫(kù)版本
    • pod 'Objection', '>0.1' 指定任何大于0.1的版本
    • pod 'Objection', '>=0.1' 指定任何大于或等于0.1的版本
    • pod 'Objection', '<0.1' 指定任何小于0.1的版本
    • pod 'Objection', '<=0.1' 指定任何小于或等于0.1的版本
    • pod 'Objection', '~>0.1.2' 指定版本在0.1.2到0.2之間 不包括0.2
    • pod 'Objection', '~>0.1' 指定版本在0.1.2到1.0之間 不包括1.0

指定pod的來(lái)源

指定pod來(lái)源為本地文件

常用于pod發(fā)布之前的本地調(diào)試

# 
pod 'Alamofire', :path => '~/Documents/Alamofire'
#Pod文件的podspec應(yīng)該位于指定的文件夾中

自定義pod的git分支或版本

有時(shí)候?qū)τ谖覀冏约簞?chuàng)建的pod庫(kù)娄帖,我們可能需要pod特定版本或者指定分支
此時(shí),在該庫(kù)的根目錄中應(yīng)該包含podspec文件

# pod git 上master分支的版本
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

# pod dev分支的版本庫(kù)
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'

# pod 指定tag的庫(kù)
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'

# pod 指定commit號(hào)版本
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'

指定特定的源

通常我們會(huì)在全局范圍搜索指定的庫(kù)昙楚,當(dāng)指定了該項(xiàng)后近速,我們對(duì)此pod庫(kù)將只搜索指定的源

pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'

安裝子pod庫(kù)

我們通常在安裝pod時(shí) 會(huì)安裝定義在其中的所有的Subspecs
我們可以通過(guò)此方法安裝其中子庫(kù)

pod 'QueryKit/Attribute'

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

對(duì)于沒(méi)有podspec的庫(kù),從spec集合庫(kù)外其他獲取

假如可以從其它來(lái)源,例如http請(qǐng)求堪旧,獲取到podspec

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

install削葱!

生命安裝期間使用的安裝方法或選項(xiàng), 一般情況下淳梦,不需要特殊指定析砸,使用默認(rèn)的就行

abstract!

指定當(dāng)前目標(biāo)是抽象的,因此不會(huì)鏈接到xcode目標(biāo)

inherit!

設(shè)置子target繼承父target的繼承模式爆袍, :none表示不繼承任何 :search_path之繼承父的searchPath

target 'App' do
  target 'AppTests' do
    inherit! :search_paths
  end
end

工程配置

inhibit_all_warnings!

禁止所有cocoapods的warning首繁,可以被子target繼承或重定義

# 禁用特定庫(kù)的warning  
pod 'SSZipArchive', :inhibit_warnings => true

use_frameworks!

使用framework代替靜態(tài)庫(kù) 常用與swift項(xiàng)目

Source

Source是用來(lái) 從給定的source列表檢索指定pod庫(kù)的specs

我們可以指定specs位置

# 這是自定義源 源的順序與pod庫(kù)順序相關(guān) pod庫(kù)將使用第一個(gè)找到該庫(kù)的源的版本
source 'https://github.com/artsy/Specs.git'
# 這是官方源 其實(shí)隱含包括的 當(dāng)使用自定義source時(shí) 就需要顯示指定官方源
source 'https://github.com/CocoaPods/Specs.git'

Hooks

Hooks 包括 plugin pre_install post_install 等 會(huì)在安裝pod庫(kù)的進(jìn)程中調(diào)用進(jìn)行一些處理作郭,詳情

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛮瞄,隨后出現(xiàn)的幾起案子所坯,更是在濱河造成了極大的恐慌谆扎,老刑警劉巖挂捅,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堂湖,居然都是意外死亡闲先,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門无蜂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)伺糠,“玉大人,你說(shuō)我怎么就攤上這事斥季⊙低埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵酣倾,是天一觀的道長(zhǎng)舵揭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)躁锡,這世上最難降的妖魔是什么午绳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮映之,結(jié)果婚禮上拦焚,老公的妹妹穿的比我還像新娘。我一直安慰自己杠输,他們只是感情好赎败,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蠢甲,像睡著了一般螟够。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峡钓,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天妓笙,我揣著相機(jī)與錄音,去河邊找鬼能岩。 笑死寞宫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拉鹃。 我是一名探鬼主播辈赋,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲫忍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了钥屈?” 一聲冷哼從身側(cè)響起悟民,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篷就,沒(méi)想到半個(gè)月后射亏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竭业,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年智润,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未辆。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窟绷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咐柜,到底是詐尸還是另有隱情兼蜈,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布拙友,位于F島的核電站为狸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏献宫。R本人自食惡果不足惜钥平,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姊途。 院中可真熱鬧涉瘾,春花似錦、人聲如沸捷兰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贡茅。三九已至秘蛇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顶考,已是汗流浹背赁还。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹沿,地道東北人艘策。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像渊季,于是被迫代替她去往敵國(guó)和親朋蔫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罚渐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容