學(xué)習(xí)使用CocoaPods后漲的姿勢(shì)

基本介紹
Cocoapods是非常好用的一個(gè)iOS依賴管理工具疾渣,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫(kù)往核,以及將自己的項(xiàng)目中的公共組件交由它去管理约巷。
解決了什么問(wèn)題
沒(méi)有CocoaPods時(shí),我們的工程配置需要
手動(dòng)增加framework决左,library颜启;
手動(dòng)增加編譯參數(shù)偷俭;
手動(dòng)維護(hù)代碼更新;

現(xiàn)在农曲,我們只需要設(shè)置一個(gè)Podfile文件社搅,執(zhí)行 pod install

CocoaPods會(huì)幫我們下載好代碼驻债,設(shè)置好編譯參數(shù)乳规,配置好framework, library合呐。
安裝和使用教程
CocoaPod安裝和使用教程
CocoaPods支持私有Spec倉(cāng)庫(kù)
整體先說(shuō)明一下創(chuàng)建一個(gè)私有的podspec包括如下那么幾個(gè)步驟:
創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo暮的。
創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并且有可訪問(wèn)的項(xiàng)目版本控制地址淌实。
創(chuàng)建Pod所對(duì)應(yīng)的podspec文件冻辩。
本地測(cè)試配置好的podspec文件是否可用。
向私有的Spec Repo中提交podspec拆祈。
更新維護(hù)podspec恨闪。

創(chuàng)建私有Spec Repo
先來(lái)說(shuō)第一步,什么是Spec Repo放坏?他是所有的Pods的一個(gè)索引咙咽,就是一個(gè)容器,所有公開(kāi)的Pods都在這個(gè)里面淤年,他實(shí)際是一個(gè)Git倉(cāng)庫(kù)remote端在GitHub上钧敞,但是當(dāng)你使用了Cocoapods后他會(huì)被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了麸粮。這個(gè)master目錄的結(jié)構(gòu)是這個(gè)樣子的
.├── Specs └── [SPEC_NAME] └── [VERSION] └── [SPEC_NAME].podspec
.├──Specs └──[SPEC_NAME] └──[VERSION] └──[SPEC_NAME].podspec

因此我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo溉苛。所以創(chuàng)建一個(gè)Git倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)你可以創(chuàng)建私有的也可以創(chuàng)建公開(kāi)的弄诲,不過(guò)既然私有的Spec Repo愚战,還是創(chuàng)建私有的倉(cāng)庫(kù)吧,需要注意的就是如果項(xiàng)目中有其他同事共同開(kāi)發(fā)的話齐遵,你還要給他這個(gè)Git倉(cāng)庫(kù)的權(quán)限寂玲。
創(chuàng)建完成之后在Terminal中執(zhí)行如下命令

pod repo add [Private Repo Name] [GitHub HTTPS clone URL] $ pod repo add WTSpecs https://coding.net/wtlucky/WTSpecs.git

pod repo add [Private Repo Name] [GitHub HTTPS clone URL]$podrepoaddWTSpecshttps://coding.net/wtlucky/WTSpecs.git

此時(shí)如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到WTSpecs這個(gè)目錄了。至此第一步創(chuàng)建私有Spec Repo完成洛搀。
創(chuàng)建Pod所對(duì)應(yīng)的podspec文件
新建 podspec敢茁,填寫需要上傳的文件
該命令執(zhí)行之后,CocoaPods 會(huì)生成一個(gè)名為your_pod_spec_name.podspec的文件留美,然后我們修改其中的相關(guān)內(nèi)容即可彰檬。pod spec create your_pod_spec_name
該命令執(zhí)行之后伸刃,CocoaPods會(huì)生成一個(gè)名為your_pod_spec_name.podspec的文件,然后我們修改其中的相關(guān)內(nèi)容即可逢倍。 pod speccreateyour_pod_spec_name

修改podspec文件(字面意思很容易看懂捧颅,描述了打包的一些參數(shù)信息)
Pod::Spec.new do |s| s.name = "MyModule" s.version = "0.0.1" s.summary = "li jian fei App 5.0+ version MyModule." s.description = <<-DESC 嚕啦啦德瑪西亞,吧啦吧啦 這里配置了打包的一些參數(shù)信息 一般情況下無(wú)需更改 DESC s.homepage = "http://lijianfei.sinaapp.com" s.license = "Copyright 2015 lijianfei.sinaapp.com" s.author = { "ios_lijianfei" => "leejeffery@foxmail.com" } s.platform = :ios, "7.0" s.source = { :git => "https://github.com/lijianfei1023/Quickblox-IM.git", :tag => s.version.to_s } s.resource = "MyModule/MyModule-Info.plist" s.resources = "MyModule/Image/.png" s.ios.deployment_target = '7.0' s.dependency 'AFNetworking' s.source_files = "MyModule//.{h,m}", "$(PODS_ROOT)//.h" s.exclude_files = "MyModule/main.m" s.public_header_files = "MyModule//.h", "$(PODS_ROOT)//.h" s.prefix_header_file = "MyModule/MyModule-Prefix.pch" s.frameworks = "QuartzCore","CoreGraphics", "Foundation", "UIKit", "AdSupport","objc" s.library = "sqlite3","c++", "z" s.requires_arc = trueend
Pod::Spec.newdo|s|s.name ="MyModule"s.version ="0.0.1"s.summary ="li jian fei App 5.0+ version MyModule."s.description =<<-DESC 嚕啦啦德瑪西亞较雕,吧啦吧啦 這里配置了打包的一些參數(shù)信息 一般情況下無(wú)需更改 DESCs.homepage = "http://lijianfei.sinaapp.com"s.license = "Copyright 2015 lijianfei.sinaapp.com"s.author = { "ios_lijianfei" => "leejeffery@foxmail.com" }s.platform = :ios, "7.0"s.source = { :git => "https://github.com/lijianfei1023/Quickblox-IM.git", :tag =>s.version.to_s}s.resource ="MyModule/MyModule-Info.plist"s.resources="MyModule/Image/
.png"s.ios.deployment_target ='7.0's.dependency'AFNetworking's.source_files ="MyModule//.{h,m}","$(PODS_ROOT)//.h"s.exclude_files="MyModule/main.m"s.public_header_files="MyModule//.h","$(PODS_ROOT)//.h"s.prefix_header_file="MyModule/MyModule-Prefix.pch"s.frameworks="QuartzCore","CoreGraphics","Foundation","UIKit","AdSupport","objc"s.library="sqlite3","c++","z"s.requires_arc=trueend

本地驗(yàn)證 podspec 是否有效
pod spec lint MyModule.podspec --verbose --sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries
pod speclintMyModule.podspec--verbose--sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries

以下為忽略警告的命令
pod spec lint MyModule.podspec --verbose --sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries --allow-warnings
pod speclintMyModule.podspec--verbose--sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries --allow-warnings

Cocoapods的高級(jí)用法
指定源
CocoaPods支持私有 Spec 倉(cāng)庫(kù)的碉哑,我們可以建立自己的源,也可以使用非官方的源亮蒋,只要是符合規(guī)定的都可以指定扣典。
source 'https://github.com/artsy/Specs.git' source 'https://github.com/CocoaPods/Specs.git'
source'https://github.com/artsy/Specs.git' source'https://github.com/CocoaPods/Specs.git'

抑制警告
inhibit_warnings參數(shù)能夠有效的抑制CocoaPods引入的第三方代碼庫(kù)產(chǎn)生的warning。
全部指定
inhibit_all_warnings!
inhibit_all_warnings!

針對(duì)指定
pod 'ReactiveCocoa', '~> 2.4', :inhibit_warnings => true
pod'ReactiveCocoa','~> 2.4',:inhibit_warnings=>true

使用git的HEAD指向的分支
pod 'ISO8601DateFormatter', :head
pod'ISO8601DateFormatter',:head

使用 master 分支
pod 'ARAnalytics/Mixpanel', :git => 'https://github.com/orta/ARAnalytics.git'
pod'ARAnalytics/Mixpanel',:git=>'https://github.com/orta/ARAnalytics.git'

指定branch
pod 'Reachability', :git => 'https://github.com/ashfurrow/Reachability.git', :branch => 'frameworks'
pod'Reachability',:git=>'https://github.com/ashfurrow/Reachability.git',:branch=>'frameworks'

指定tag
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
pod'AFNetworking',:git=>'https://github.com/gowalla/AFNetworking.git',:tag=>'0.7.0'

指定commit
pod 'ARTiledImageView', :git => 'https://github.com/dblockARTiledImageView', :commit => '1a31b864d1d56b1aaed0816c10bb55cf2e078bb8'
pod'ARTiledImageView',:git=>'https://github.com/dblockARTiledImageView',:commit=>'1a31b864d1d56b1aaed0816c10bb55cf2e078bb8'

使用子庫(kù)
單個(gè)子庫(kù)
pod 'QueryKit/Attribute'
pod'QueryKit/Attribute'

多個(gè)子庫(kù)
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
pod'QueryKit',:subspecs=>['Attribute','QuerySet']

使用本地代碼
通過(guò):path可以指定本地代碼慎玖,不過(guò)需要確保目錄包含podspec文件贮尖。
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
pod'AFNetworking',:path=>'~/Documents/AFNetworking'

指定target的依賴庫(kù)
target :ZipApp do pod 'SSZipArchive'end
target:ZipAppdo pod'SSZipArchive'end

排除taget
target 'Artsy Tests', :exclusive => true do pod 'FBSnapshotTestCase', '1.4'end
target'Artsy Tests',:exclusive=>truedo pod'FBSnapshotTestCase','1.4'end

指定xcodeproj
默認(rèn)會(huì)使用Podfile文件同級(jí)目錄下第一個(gè)xcodeproj,但也可以指定
xcodeproj 'MyProject'target :test do # This Pods library links with a target in another project. xcodeproj 'TestProject'end
xcodeproj'MyProject' target:testdo # This Pods library links with a target in another project. xcodeproj'TestProject'end

指定連接的target
如果不顯式指定連接的target趁怔,Pods會(huì)默認(rèn)連接project的第一個(gè)target湿硝。如果需要,可以使用link_with指定連接一個(gè)或多個(gè)target
link_with 'MyApp', 'MyOtherApp'
link_with'MyApp','MyOtherApp'

指定環(huán)境
如下只會(huì)在Debug環(huán)境下面加入PonyDebugger庫(kù)到工程润努。
pod 'PonyDebugger', :configuration => ['Debug']
pod'PonyDebugger',:configuration=>['Debug']

指定target的配置文件
xcodeproj 'TestProject', 'Mac App Store' => :release, 'Test' => :debug
xcodeproj'TestProject','Mac App Store'=>:release,'Test'=>:debug

使用Dynamic Frameworks代替Static Libraries
通過(guò)標(biāo)志use_frameworks!就可知開(kāi)啟這個(gè)功能关斜。如果需要使用Swift的庫(kù),就必須加上這個(gè)標(biāo)志了铺浇。
加快pod install/update 速度
使用CocoaPods來(lái)添加第三方類庫(kù)痢畜,無(wú)論是執(zhí)行pod install還是pod updat很多時(shí)候都卡在了Analyzing dependencies不動(dòng),這是更新本地的pod spec所以文件導(dǎo)致的随抠。通過(guò)–no-repo-update標(biāo)志可以不更新本地pod spec索引裁着。當(dāng)然首次install不應(yīng)該添加這個(gè)標(biāo)志,后續(xù)修改Podfile的時(shí)候可以適當(dāng)使用拱她,加快pod速度二驰。
pod install --no-repo-updatepod update --no-repo-update
pod install--no-repo-updatepod update--no-repo-update

輸出詳細(xì)日志
pod update --verbose
pod update--verbose

XCode的Cocoapods插件
cocoapods-xcode-plugin 是一個(gè)XCode的插件,讓你方便操作Cocoapods秉沼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桶雀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唬复,更是在濱河造成了極大的恐慌矗积,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敞咧,死亡現(xiàn)場(chǎng)離奇詭異棘捣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)休建,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門乍恐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)评疗,“玉大人,你說(shuō)我怎么就攤上這事茵烈“俅遥” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵呜投,是天一觀的道長(zhǎng)加匈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)仑荐,這世上最難降的妖魔是什么雕拼? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮释漆,結(jié)果婚禮上悲没,老公的妹妹穿的比我還像新娘。我一直安慰自己男图,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布甜橱。 她就那樣靜靜地躺著逊笆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岂傲。 梳的紋絲不亂的頭發(fā)上难裆,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音镊掖,去河邊找鬼乃戈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛亩进,可吹牛的內(nèi)容都是我干的症虑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼归薛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谍憔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起主籍,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤习贫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后千元,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苫昌,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年幸海,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祟身。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屋厘。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖月而,靈堂內(nèi)的尸體忽然破棺而出汗洒,到底是詐尸還是另有隱情,我是刑警寧澤父款,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布溢谤,位于F島的核電站,受9級(jí)特大地震影響憨攒,放射性物質(zhì)發(fā)生泄漏世杀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一肝集、第九天 我趴在偏房一處隱蔽的房頂上張望瞻坝。 院中可真熱鬧,春花似錦杏瞻、人聲如沸所刀。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浮创。三九已至,卻和暖如春砌函,著一層夾襖步出監(jiān)牢的瞬間斩披,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工讹俊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垦沉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓仍劈,卻偏偏與公主長(zhǎng)得像厕倍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耳奕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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