一粘勒、概要
iOS開發(fā)時恩伺,項目中會引用許多第三方庫,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用來方便的統(tǒng)一管理這些第三方庫(從一個坑出來,又進了另一個坑而已……)俏让。
二、安裝
由于網(wǎng)上的教程基本都大同小異茬暇,但細節(jié)之處還不是很完善首昔,所以借機會在這里補充下:
注:要使用CocoaPods,那就要下載安裝它糙俗,而下載安裝CocoaPods需要Ruby環(huán)境
1勒奇、Ruby環(huán)境搭建
當(dāng)前安裝環(huán)境為Mac mini 10.8.5。Mac ?OS本身自帶Ruby巧骚,但還是更新一下保險赊颠,因為我第一次安裝在沒有更新Ruby的情況下就失敗了。
a 查看下當(dāng)前ruby版本:打開終端輸入 ruby -v(確實安裝了劈彪,不過用這個版本接下來工作失敗了巨税,所以更新下ruby)
ritekiMac-mini:PodTest lucky$ ruby -v
ruby1.8.7(2012-02-08patchlevel358) [universal-darwin12.0]
ritekiMac-mini:PodTest lucky$
b 更新ruby
終端輸入如下命令(把Ruby鏡像指向taobao,避免被墻粉臊,你懂得)
gem sources --remove https://rubygems.org/
gem sources -a https://gems.ruby-china.org/
"https://ruby.taobao.org/" 不能用了
gem sources -l ?(用來檢查使用替換鏡像位置成功)
ritekiMac-mini:~ lucky$ gem sources --removehttps://rubygems.org/
https://rubygems.org/ removed from sources
ritekiMac-mini:~ lucky$ gem sources -ahttp://ruby.taobao.org/
http://ruby.taobao.org/ added to sources
ritekiMac-mini:~ lucky$ gem sources -l
*** CURRENTSOURCES***
補充:(2016-01-20更新)
淘寶已經(jīng)關(guān)閉HTTP協(xié)議的景象服務(wù)草添,改為HTTPS協(xié)議。
淘寶ruby地址:https://ruby.taobao.org/
2扼仲、下載安裝CocoaPods
終端輸入:sudo gem install cocoapods
ritekiMac-mini:~ lucky$ sudo gem install cocoapods
CHANGELOG:
## 0.32.1
##### Bug Fixes
* Fixed the Podfile `default_subspec` attribute in nested subspecs.
[Fabio Pelosin][irrationalfab]
\ [#2050](https://github.com/CocoaPods/CocoaPods/issues/2050)
Successfully installed cocoapods-0.32.1
Installing ri documentation for cocoapods-0.32.1
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rdoc/rdoc.rb:280: warning: conflicting chdir during another chdir block
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rdoc/rdoc.rb:287: warning: conflicting chdir during another chdir block
Done installing documentation for cocoapods after 10 seconds
1 gem installed
這樣就下載安裝好了CocoaPods
3远寸、使用CocoaPods
a ?新建一個項目,名字PodTest
b? 終端中屠凶,cd到項目總目錄(注意:包含PodTest文件夾驰后、PodTest.xcodeproj、PodTestTest的那個總目錄)
cd /Users/lucky/Desktop/PodTest
c? 建立Podfile(配置文件)
接著上一步矗愧,終端輸入?vim Podfile
鍵盤輸入 i灶芝,進入編輯模式,輸入
platform :ios, '7.0'
pod 'MBProgressHUD', '~> 0.8'
然后按Esc唉韭,并且輸入“ :”號進入vim命令模式夜涕,然后在冒號后邊輸入wq
注意:鍵盤輸入 :后,才能輸入wq属愤∨鳎回車后發(fā)現(xiàn)PodTest項目總目錄中多一個Podfile文件
激動人心的時刻到了:確定終端cd到項目總目錄,然后輸入?pod install住诸,等待一會驾胆,大約3分鐘涣澡。
查看項目根目錄:
注意:現(xiàn)在打開項目不是點擊 PodTest.xodeproj了,而是點擊PodTest.xcworkspace
對于工程發(fā)生的變化丧诺,有幾點需要說明:
a入桂、第三方庫會以成靜態(tài)庫方式引入工程使用
CocoaPods會將所有的第三方庫以target的方式組成一個名為Pods的工程,該工程就放在剛才新生成的Pods目錄下驳阎。整個第三方庫工程會生成一個名稱為libPods.a的靜態(tài)庫提供給工程使用抗愁。
b、xcworkspace(PodTest.xcworkspace)的作用是管理工程和第三方庫
PodTest工程和Pods工程被以workspace的形式組織和管理搞隐。
打開項目后看到項目結(jié)構(gòu)并且測試一下:
運行結(jié)果:
補充:
1、CocoaPods的基本安裝及使用都詳細的說明了远搪,但還有一些補充劣纲,當(dāng)需要同時導(dǎo)入多個第三方時候怎么辦 ?
這就需要修改Podfile了谁鳍,就是用vim編輯的那個保存在項目根目錄中的文件癞季,修改完了Podfile文件,需要重新執(zhí)行一次pod install命令倘潜。
例如:
platform :ios
pod 'JSONKit', ? ? ? '~> 1.4'
pod 'AFNetworking',? '~> 2.0'
2绷柒、CocoaPods可以查找你想要的第三方庫
終端輸入命令:pod search UI
瘋了了,我怎么查找這么大眾的關(guān)鍵字涮因,好多庫~~
然后重新編輯Podfile文件废睦,按照之前的步驟,把更多的庫都導(dǎo)入項目养泡!
3嗜湃、上文中“建立Podfile(配置文件)接著上一步,終端輸入?vim Podfile”步驟澜掩,如果不習(xí)慣使用vim編輯器购披,也可以使用Linux命令touch,生成一個空的Podfile文件肩榕,然后使用其他的文本編輯器都可以刚陡,例如:
[objc]view plaincopy
lizhongfudeMacBook-Pro:~?lizhongfu$?cd?/Users/lizhongfu/Desktop/TestProject
lizhongfudeMacBook-Pro:TestProject?lizhongfu$?touch?Podfile
編輯好Podfile文件后,就可以執(zhí)行pod install第三方導(dǎo)入了(詳見:補充第1條)株汉,CocoaPods就開始為我們做下載源碼筐乳、配置依賴關(guān)系、引入需要的framework等一些列工作乔妈。
4哥童、如果已經(jīng)生成了CocoaPods管理的工程,則可以在Xcode中編輯Podfile褒翰,編輯保存后贮懈,別忘記cd到根目錄匀泊,調(diào)用pod install命令
5、項目存在多個Target的時候朵你,需要配置Podfile文件來支持新增加的Target各聘,否則只支持項目默認建立時生成的Target:
a、如果新建一個Target抡医,命名為Second躲因,并且Second與Test兩個Target所需要的第三方支持相同,也就是使用相同的Pods依賴庫忌傻,則可以使用
link_with關(guān)鍵字:
link_with'Test','Second'
platform?:ios
platform?:ios,?‘9.0’
pod'AFNetworking','~>?2.0'
b大脉、如果不同的Target需要不同的依賴庫,則可以
platform :ios
target?:'Test'do
pod'Reachability'
pod'SBJson'
pod'AFNetworking'
end
target :'Second'do
pod'OpenUDID'
end
6水孩、出現(xiàn)/Library/Ruby/Gems/2.0.0/gems/claide-0.8.1/lib/claide/command.rb:417:in `help!': [!] You cannot run CocoaPods as root. (CLAide::Help)
重新打開一個終端镰矿,然后pod install,不要sudo pod install俘种。
7秤标、如果$ pod install時候遇到:
Analyzing dependencies
Fetching podspec for `UAAppReviewManager` from `..`
[!] Unable to satisfy the following requirements:
- `UAAppReviewManager (from `..`)` required by `Podfile`
8、如果要移除Cocoapods宙刘,則可以:
a. 刪除工程文件夾下的Podfile苍姜、Podfile.lock及Pods文件夾
b. 刪除xcworkspace文件
c. 使用xcodeproj文件打開工程,刪除Frameworks組下的Pods.xcconfig及l(fā)ibPods.a引用
d. 在工程設(shè)置中的Build Phases下刪除Check Pods Manifest.lock及Copy Pods Resources
ps:如果將cocoapods集成到工程中后不小心修改或刪除了其相關(guān)文件導(dǎo)致無法便以通過例如:不小心把
Pods.xcconfig給刪除了然后出現(xiàn)diff: /../Podfile.lock: No such file or directory悬包,用上面的方法刪除cocoapods后衙猪,
再重新$sudo pod install一下就好了。
如果編譯的時候出現(xiàn)權(quán)限問題布近,對工程文件夾$sudo chmod 777 path-to-project-folder/*
$sudo chown 777 path-to-project-folder/*
9屈嗤、當(dāng)庫正常導(dǎo)入,但還是找不到相關(guān)頭文件吊输,則可以:
在TARGETS -> Search Paths ->User Header Search Paths 中 寫入${SRCROOT}再將后面參數(shù)改為recursive:
10饶号、Xcode - ld: library not found for -lPods
當(dāng)新增加一個Target,并且pod install后季蚂,由于創(chuàng)建項目是默認創(chuàng)建的Target的Build Phases中引用了舊的.a茫船,例如libPods.a,當(dāng)新增加Targget后扭屁,libPods.a已經(jīng)變成了libPods-Test.a算谈,而新增加的Target名字為Second,依賴的.a為libPods-Second.a料滥。所以libPods.a此時已經(jīng)不再被引用然眼,并且不會被生成,如果任何地方引用了就會報錯葵腹,解決辦法是出現(xiàn)問題的Target的Build Phases中刪除無用的.a引用高每,例如libPods.a
11屿岂、pod update
若果Podfile中指定的依賴庫版本不是寫死的,當(dāng)對應(yīng)的依賴庫有了更新鲸匿,無論有沒有Podfile.lock文件都會去獲取Podfile文件描述的允許獲取到的最新依賴庫版本爷怀。
12、在引用第三方带欢,如果想明確第三方版本號的時候运授,還有一些小細節(jié):
pod'AFNetworking'//不顯式指定依賴庫版本,表示每次都獲取最新版本? (11乔煞、pod update)
pod'AFNetworking','2.0'//只使用2.0版本
pod'AFNetworking','>?2.0'//使用高于2.0的版本
pod'AFNetworking','>=?2.0'//使用大于或等于2.0的版本
pod'AFNetworking','<?2.0'//使用小于2.0的版本
pod'AFNetworking','<=?2.0'//使用小于或等于2.0的版本
pod'AFNetworking','~>?0.1.2'//使用大于等于0.1.2但小于0.2的版本
pod'AFNetworking','~>0.1'//使用大于等于0.1但小于1.0的版本
pod'AFNetworking','~>0'//使用最新版本吁朦,與不顯示指定依賴庫版本相同
巧大神這里有更多內(nèi)容,其中介紹了pod制作及Podfile.lock的相關(guān)內(nèi)容《用CocoaPods做iOS程序的依賴管理》
13渡贾、如果pod install之后逗宜,一直停留在Updating local specs repositories,可以試一試pod install --verbose --no-repo-update剥啤,原因是pod install被墻了
14锦溪、(2016年6月11日)The dependency 'xxx' is not used in any concrete target
在Podfile文件中需要明確指出使用第三方庫的target不脯,例如:
platform:ios,'7.0'
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage', '~> 3.7.6'
pod 'SVProgressHUD', '~> 2.0.3'
pod 'AFNetworking', '~> 3.1.0'
改為:
platform:ios,'7.0'
target "MyTarget" do
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage', '~> 3.7.6'
pod 'SVProgressHUD', '~> 2.0.3'
pod 'AFNetworking', '~> 3.1.0'
end
pod update 試了還可以用
pod install ?被墻了府怯,請大家換成pod install --verbose --no-repo-update
升級10.11后使用CocoaPod出現(xiàn)-bash: pod: command not found 解決辦法
1.升級10.11后,運行pod命令出現(xiàn):
-bash: pod:commandnot found
解決辦法:
sudo geminstall-n/usr/local/bincocoapods
2'如果還不能解決防楷,可以使用以下方法再試試:
sudo gem install -n /usr/local/bin cocoapods? /
sudo chmod +rx /usr/local/bin
3.遇到如下錯誤可能是因為裝了多個Xcode導(dǎo)致路徑變了
[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.Git` named `master-1`.? You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.
解決辦法:
sudo xcode-select -switch /Applications/Xcode.app
/Applications/Xcode.app:此部分未Xcode所在路徑牺丙,找到Xcode的安裝路徑,拖進來即可
4.
pod》error:The dependency `` is not used in any concrete target
我的原來Podfile的內(nèi)容是:
platform:ios,'7.0'
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage', '~> 3.7.6'
pod 'SVProgressHUD', '~> 2.0.3'
pod 'AFNetworking', '~> 3.1.0'
修改為:
platform:ios,'7.0'
target "MyTarget" do
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage', '~> 3.7.6'
pod 'SVProgressHUD', '~> 2.0.3'
pod 'AFNetworking', '~> 3.1.0'
end
此處的MyTarget為自己的工程名
5.使用Pod后導(dǎo)致"_OBJC_CLASS_$_xxx",?reference
解決辦法:
在自己的工程Build?Phases的Link?Binary?With?Libraries中添加
6.TodayExtension中共用Pod中的庫
1.選擇target—》 BuildSettings —》 search Paths 下的 User Header Search Paths:點擊“+”號添加一項:并且輸入:$(PODS_ROOT)复局,選擇:recursive? 然后就可以了冲簿。