CocoaPods 入門(mén)
什么是 CocoaPods
CocoaPods是OS X和iOS下的一個(gè)第三類(lèi)庫(kù)管理工具,通過(guò)CocoaPods工具我們可以為項(xiàng)目添加被稱(chēng)為“Pods”的依賴(lài)庫(kù)(這些類(lèi)庫(kù)必須是CocoaPods本身所支持的),并且可以輕松管理其版本。
Cocoapods意義體現(xiàn)在兩個(gè)方面。第一,在引入第三方庫(kù)時(shí)它可以自動(dòng)為我們完成各種各樣的配置,包括配置編譯階段、連接器選項(xiàng)、甚至是ARC環(huán)境下的-fno-objc-arc配置等。第二,使用CocoaPods可以很方便地查找新的第三方庫(kù), 更新類(lèi)庫(kù)也是支持一鍵更新,免除更新時(shí)的繁瑣操作。
英語(yǔ)能力較好者傳送門(mén):CocoaPods官方文檔
CocoaPods 的核心組件
CocoaPods是用Ruby寫(xiě)的,并劃分成了若干個(gè)Gem包。
CocoaPods在解析執(zhí)行過(guò)程中最重要的幾個(gè)包。
其路徑分別是:CocoaPods/CocoaPods、 CocoaPods/Core和 CocoaPods/Xcodeproj。
CocoaPods/CocoaPod
這是面向用戶的組件,每當(dāng)執(zhí)行一個(gè)pod命令時(shí),這個(gè)組件將被激活。它包括了所有實(shí)用CocoaPods的功能,并且還能調(diào)用其他gem包來(lái)執(zhí)行任務(wù)。
CocoaPods/Core
Core gem提供了與CocoaPods相關(guān)的文件(主要是podfile和podspecs)的處理。
CocoaPods/Xcodeproj
這個(gè)包負(fù)責(zé)處理工程文件,它能創(chuàng)建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作為一個(gè)獨(dú)立的包使用,當(dāng)你要編寫(xiě)修改項(xiàng)目文件的腳本時(shí),可以考慮使用CocoaPods/Xcodeproj。
Podfile
該文件用于配置項(xiàng)目所需要的第三方庫(kù),它可以被高度定制。
Podfile.lock
當(dāng)你執(zhí)行pod install之后,除了 Podfile 外,CocoaPods 還會(huì)生成一個(gè)名為Podfile.lock的文件,Podfile.lock應(yīng)該加入到版本控制里面,不應(yīng)該把這個(gè)文件加入到.gitignore中。因?yàn)?code>Podfile.lock會(huì)鎖定當(dāng)前各依賴(lài)庫(kù)的版本,之后如果多次執(zhí)行pod install不會(huì)更改版本,要pod update才會(huì)改Podfile.lock了。這樣多人協(xié)作的時(shí)候,可以防止第三方庫(kù)升級(jí)時(shí)造成大家各自的第三方庫(kù)版本不一致
Podspec
該文件描述了一個(gè)庫(kù)將怎樣被添加進(jìn)工程中。.podspec文件可以標(biāo)識(shí)該第三方庫(kù)所需要的源碼文件、依賴(lài)庫(kù)、編譯選項(xiàng),以及其他第三方庫(kù)需要的配置。
CocoaPods 安裝(以下步驟都是終端操作)
1、升級(jí)Ruby環(huán)境
輸入:gem update --system
如果出現(xiàn):
ERROR: While executing gem ... (Gem::FilePermissionError)
You don‘t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
則輸入:sudo gem update —system
2、替換鏡像路徑
原鏡像路徑是https://rubygems.org/,由于被墻了下載安裝會(huì)炒雞慢,所以替換成淘寶的Ruby鏡像會(huì)快很多。
步驟(1):gem sources --remove https://rubygems.org/
步驟(2):gem sources -a https://ruby.taobao.org/
今年的淘寶Ruby鏡像路徑用了Https,如果使用原來(lái)的http路徑則要替換,不然會(huì)出現(xiàn)如下錯(cuò)誤:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:
Unable to download data from http://ruby.taobao.org/
- bad response Not Found 404 (http://ruby.taobao.org/latest_specs.4.8.gz)
可以輸入gem sources -l查看是否替換成功
3、安裝
步驟(1):sudo gem install cocoapods
步驟(2):pod setup
CocoaPods 使用
步驟(1):cd 項(xiàng)目路徑,只到項(xiàng)目的一級(jí)路徑即可,如cd /Document/Work/Demo
步驟(2):pod init
步驟(3):編輯Podfile文件,可用文本編輯器打開(kāi)也可用vim,添加需要的第三方類(lèi)庫(kù)。
格式一般為`pod 'AFNetworking', '~> 2.6.0'`,放在`target 'Demo' do`與對(duì)應(yīng)的end之間。
如果只是用`pod 'AFNetworking'`則會(huì)使用最新的版本。
參考格式:
# platform :ios, ‘7.0’
target 'Look' do
pod 'MJRefresh'
pod 'SDWebImage', '~> 3.7.3'
pod 'AFNetworking', '~> 2.6.0'
pod 'SVProgressHUD', '~> 1.1.3'
# Pods for Look
target 'LookTests' do
inherit! :search_paths
# Pods for testing
end
target 'LookUITests' do
inherit! :search_paths
# Pods for testing
end
end
步驟(4):pod install,執(zhí)行這一步會(huì)比較久,因?yàn)樾枰螺d相應(yīng)的類(lèi)庫(kù)
安裝完成后應(yīng)該打開(kāi)Demo.xcworkspace而不是Demo.xcodeproj了。
其他技巧或問(wèn)題解答
Tip1、 pod search AFNetworking:如果CocoaPods支持,將會(huì)輸出搜索到的所有類(lèi)庫(kù)版本和信息,以及在Podfile中配置的寫(xiě)法,終端返回信息如下:
-> AFNetworking (2.3.1)
A delightful iOS and OS X networking framework.
pod ‘AFNetworking‘, ‘~> 2.3.1’(這個(gè)語(yǔ)句是需要在編輯Podfile的時(shí)候輸入的命令,即是如何安裝下載相關(guān)類(lèi)庫(kù)的指令)
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0,
2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3,
Tip2、 所有的項(xiàng)目的 Podspec 文件都托管在https://github.com/CocoaPods/Specs。第一次執(zhí)行pod setup時(shí),CocoaPods 會(huì)將這些 podspec 索引文件更新到本地的~/.cocoapods/目錄下,這個(gè)索引文件比較大,有 80M 左右。所以第一次更新時(shí)非常慢.
一個(gè)叫 akinliu 的朋友在 gitcafe 和 oschina 上建立了 CocoaPods 索引庫(kù)的鏡像,因?yàn)?gitcafe 和 oschina 都是國(guó)內(nèi)的服務(wù)器,所以在執(zhí)行索引更新操作時(shí),會(huì)快很多。如下操作可以將 CocoaPods 設(shè)置成使用 gitcafe 鏡像:
pod repo remove master
pod repo add master https://gitcafe.com/akuandev/Specs.git
pod repo update
將以上代碼中的https://gitcafe.com/akuandev/Specs.git替換成http://git.oschina.net/akuandev/Specs.git即可使用 oschina 上的鏡像。
Q2、當(dāng)在pod update或pod install時(shí)遇到:
Unable to find a specification for `xxxxx (~> 1.x.x)` depended upon by Podfile.
OR :pod setup時(shí)遇到:
[!] /usr/bin/git fetch --unshallow
fatal: error in object: unshallow f4cf991d7db93e387c25a637876d473fe7093a6d
A2:只需要把當(dāng)前Pod的目錄清理一下就O了
步驟(1):pod repo remove master
步驟(2):pod setup
Q3、當(dāng)把CocoaPods生成的workspace移動(dòng)到上層目錄時(shí),需要改下Pods.xcconfig和工程里的一些設(shè)置, 故當(dāng)遇到:
Could not automatically select an Xcode project. Specify one in your Podfile like so:
xcodeproj 'path/to/Project.xcodeproj'
A3:在Podfile文件里指定下工程目錄就O了,比如:
......
xcodeproj 'Portfolio/Portfolio.xcodeproj'
......
Q4、當(dāng)在pod update或pod install時(shí)卡在Analyzing dependencies
A4:當(dāng)執(zhí)行以上兩個(gè)命令的時(shí)候會(huì)升級(jí)CocoaPods的spec倉(cāng)庫(kù),加一個(gè)--verbose --no-repo-update可以省略這一步,然后速度就會(huì)提升不少。命令如下:
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
CocoaPods 進(jìn)階
對(duì)自己的開(kāi)源項(xiàng)目引入CocoaPods支持
講了那么多怎么用別人的,那這一節(jié)可以來(lái)看看怎么自己做給別人用了,如果你有一個(gè)開(kāi)源項(xiàng)目,想讓別人也能使用 CocoaPods 直接導(dǎo)入,那么可以這樣做。
英文好的大哥大姐們 => 傳送門(mén):CocoaPods官方文檔說(shuō)明
1、在github上創(chuàng)建一個(gè)倉(cāng)庫(kù),比如CNTestDemo,重要:記得選擇開(kāi)源協(xié)議(MIT)
2、將項(xiàng)目clone到自己的工作目錄,至于Git的使用這里就不說(shuō)了,如果不了解的可以先看看這里:
廖雪峰--Git教程
3、創(chuàng)建 podspec 文件:
cd /Document/Work/iOS/CNTestDemo
pod spec create CNTestDemo
4、編輯 podspec 文件: vim CNTestDemo.podspec
5、創(chuàng)建之后會(huì)自動(dòng)生成一個(gè)模板,里面會(huì)有詳細(xì)的注釋?zhuān)梢詤⒖紕e的開(kāi)源項(xiàng)目的podspec文件),這里給出一個(gè)示例文件:
Pod::Spec.new do |s|
s.name = 'CNTestDemo'
s.version = '1.0'
s.license = "MIT" //開(kāi)源協(xié)議
s.summary = 'This is a test demo' //簡(jiǎn)單的描述
s.homepage = 'https://github.com/neilchan/CNTestDemo' //主頁(yè)
s.author = { 'Neil Chan' => '***@yeah.net' } //作者
s.source = { :git => 'https://github.com/neilchan/CNTestDemo.git', :tag => "1.0" } //git路徑、指定tag號(hào)
s.platform = :ios
s.source_files = 'CNTestDemo/*' //庫(kù)的源代碼文件
s.framework = 'UIKit' //依賴(lài)的framework
s.requires_arc = true
end
6、創(chuàng)建tag,同步到github:
git add .
git commit -m "1.0"
git tag 1.0
git push --tags
git push origin master
7、驗(yàn)證podspec文件
pod spec lint CNTestDemo.podspec
如果不通過(guò)根據(jù)提示解決錯(cuò)誤之后,返回步驟6。在這之前要?jiǎng)h除github跟本地的tag,輸入:
git tag -d 1.0 //刪除本地tag
git push origin :refs/tags/1.0 // 刪除github倉(cāng)庫(kù)tag
8、注冊(cè) CocoaPods 信息(第一次提交的話,不是的話跳過(guò))
pod trunk register 這里寫(xiě)郵箱 '這里起個(gè)名字' --description=' 這里寫(xiě)描述'
去郵箱點(diǎn)擊驗(yàn)證鏈接之后,再執(zhí)行第9步驟
9、提交到 CocoaPods
pod trunk push CNTestDemo.podspec
到這里提交完成之后就可以通過(guò) CocoaPods導(dǎo)入或者查找你的開(kāi)源項(xiàng)目了。
建立企業(yè)內(nèi)部私有庫(kù)
看到標(biāo)題莫慌,其實(shí)不是什么大事兒。只是你只需要執(zhí)行完上述說(shuō)到的第7步驟,就不推到 CocoaPods 的公共資源列表去了就行。而在使用的時(shí)候你需要在 Podfile 中這樣寫(xiě):
pod 'ProjectName',:git=>"http://xxx.git"(把xxx替換為庫(kù)的git地址)
這里感謝: