CocoaPods的安裝使用和常見(jiàn)問(wèn)題

CocoaPods可以方便地通過(guò)Mac自帶的RubyGems安裝。

打開(kāi)Terminal,然后鍵入以下命令:

$ sudo gem install cocoapods

執(zhí)行完這句如果報(bào)告以下錯(cuò)誤:

ERROR:? Could not find a valid gem 'cocoapods' (>= 0), here is why:

Unable to download data fromhttps://rubygems.org/- Errno::ETIMEDOUT: Operation timed out - connect(2) (https://rubygems.org/latest_specs.4.8.gz)

ERROR:? Possible alternatives: cocoa pods

這是因?yàn)閞uby的軟件源rubygems.org因?yàn)槭褂脕嗰R遜的云服務(wù),被我天朝屏蔽了,需要更新一下ruby的源,過(guò)程如下:

$ gem sources -l? (查看當(dāng)前ruby的源)

$ gem sources --removehttps://rubygems.org/

$ gem sources -ahttps://ruby.taobao.org/

$ gem sources -l

如果gem太老,可以嘗試用如下命令升級(jí)gem

$ sudo gem update --system

升級(jí)成功后會(huì)提示: RubyGems system software updated

然后重新執(zhí)行安裝下載命令

$ sudo gem install cocoapods

這時(shí)候應(yīng)該沒(méi)什么問(wèn)題了(如果報(bào)告Operation not permitted...之類的錯(cuò)誤,請(qǐng)參考第五節(jié):常見(jiàn)問(wèn)題5,如果報(bào)告activesupport requires Ruby version >= 2.2.2這樣的錯(cuò)誤,請(qǐng)參考第五節(jié):常見(jiàn)問(wèn)題6)

接下來(lái)進(jìn)行安裝,執(zhí)行:

$ pod setup

Terminal會(huì)停留在 Setting up CocoaPods master repo 這個(gè)狀態(tài)一段時(shí)間,是因?yàn)橐M(jìn)行下載安裝,而且目錄比較大,需要耐心等待一下.如果想加快速度,可使用cocoapods的鏡像索引.(文章末尾附使用鏡像索引的方法)

安裝成功后,你會(huì)看到:


Cocoapods的使用

進(jìn)入工程所在的目錄(工程根目錄)

執(zhí)行命令 touch Podfile

這句是說(shuō)新建一個(gè)名為Podfile的文件(不能寫成別的名字,也可以自己在工程根目錄里面直接新建)

然后對(duì)改文件進(jìn)行編輯,執(zhí)行命令 open -e Podfile

第一次執(zhí)行這個(gè)命令,會(huì)有一個(gè)空白文件打開(kāi),可以先放在一邊,

Podfile文件的格式應(yīng)該如下:



# Uncomment the next line to define a global platform for your project

# platform :ios, '8.0'

target ‘eee’ do

#本地庫(kù)

pod ‘FMDB’,’2.7.2’

use_frameworks!

end




需要注意的幾點(diǎn):platform那一行,ios三個(gè)字母都要小寫,而且與前面的冒號(hào)之間不能有間隔,后面的版本號(hào)也可以不寫,但是有些開(kāi)源庫(kù)對(duì)版本是有要求的,比如要在6.0以上才能運(yùn)行,遇到這樣的開(kāi)源庫(kù)就需要寫上版本號(hào)。

platform下面就是Cocoapods需要集成的開(kāi)源庫(kù),根據(jù)你的需要確定集成那些庫(kù)。

舉個(gè)例子:

我要集成AFNetworking這個(gè)庫(kù)類,需要在Cocoapods里面先搜索是否有需要的庫(kù),可以在Terminal中輸入:

pod search AFNetworking

回車之后就可以看到和你搜索的關(guān)鍵字相關(guān)的一些庫(kù)類,如圖:


其中第一個(gè)就是我們需要的,把pod ‘AFNetworking’, ‘~>2.5.3’

那一行復(fù)制到我們的Podfile文件中,保存修改。

然后在Terminal中執(zhí)行 :

pod install

這樣,AFNetworking就已經(jīng)下載完成并且設(shè)置好了編譯參數(shù)和依賴,以后使用的時(shí)候切記如下兩點(diǎn):

1.從此以后需要使用Cocoapods生成的.xcworkspace文件來(lái)打開(kāi)工程,而不是使用以前的.xcodeproj文件

2.每次更改了Podfile文件,都需要重新執(zhí)行一次pod update命令

ps:當(dāng)執(zhí)行pod

install之后,除了Podfile,還會(huì)生成一個(gè)名為Podfile.lock的文件,它會(huì)鎖定當(dāng)前各依賴庫(kù)的版本,之后即使多次執(zhí)行pod

install也不會(huì)更改版本,只有執(zhí)行pod

update才會(huì)改變Podfile.lock.在多人協(xié)作的時(shí)候,這樣可以防止第三方庫(kù)升級(jí)時(shí)候造成大家各自的第三方庫(kù)版本不一致。所以在提交版本的時(shí)候不能把它落下,也不要添加到.gitignore中.


常見(jiàn)問(wèn)題

1.

[!] InvalidPodfilefile: undefined local variable or method `en_US' for #. Updating CocoaPods might fix the issue.

原因:?jiǎn)我?hào)格式,可能是手動(dòng)輸入導(dǎo)致

解決辦法:系統(tǒng)偏好設(shè)置-鍵盤-文本-將“使用智能引號(hào)和破折號(hào)”一項(xiàng)取消勾選-再將podfile里面的單(雙)引號(hào)修改一下

2.ArgumentError - invalid byte sequence in US-ASCII

原因:字符集錯(cuò)誤

解決辦法:

使用locale命令查看當(dāng)前的字符集,如果都是zh,需要執(zhí)行以下命令:

export LC_ALL=en_US.UTF-8

export LANG=en_US.UTF-8

然后再使用locale命令查看,已經(jīng)改過(guò)來(lái)了

[!] TheYMTea [Debug]target overrides theOTHER_LDFLAGSbuild setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation

Use the$(inherited)flag, or

Remove the build settings from the target.

[!] TheYMTea [Release]target overrides theOTHER_LDFLAGSbuild setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation


-Usethe`$(inherited)`flag,or

- Remove thebuildsettingsfromthe target.


原因:我是在已有項(xiàng)目中集成Cocoapods的時(shí)候遇到這個(gè)問(wèn)題,原因是項(xiàng)目 Target 中做了一些設(shè)置,CocoaPods 也做了默認(rèn)的設(shè)置,如果兩個(gè)設(shè)置結(jié)果不一致,就會(huì)造成問(wèn)題。

解決方法:我想要使用 CocoaPods 中的設(shè)置,分別在我的項(xiàng)目中定義PODS_ROOT和Other Linker Flags的地方(build settings),把他們的值用$(inherited)替換掉,進(jìn)入終端,執(zhí)行 pod update

警告沒(méi)了,回到 Xcode,build通過(guò)。

網(wǎng)上還流行另外一種簡(jiǎn)單粗暴的方法:點(diǎn)擊項(xiàng)目文件 project.xcodeproj,右鍵顯示包內(nèi)容,用文本編輯器打開(kāi)project.pbxproj,刪除OTHER_LDFLAGS的地方,保存(這種我沒(méi)試過(guò))

4.

[!] Oh no, an error occurred.

It appears to have originated from your Podfile at line 2.

Search for existing GitHub issues similar to yours:

https://github.com/CocoaPods/CocoaPods/search?q=%2FUsers%2Fxiao6%2FMusic%2FGI06%E5%AE%9E%E8%AE%AD%E8%8A%B8%E8%8C%97%E8%8C%B6%E5%8F%B6%2FYMTea%2FPodfile%3A2%3A+syntax+error%2C+unexpected+%27%3A%27%2C+expecting+end-of-input%0Aplatform+%3A+ios%2C+%277.0%27%0A++++++++++%5E&type=Issues

If none exists, create a ticket, with the template displayed above, on:

https://github.com/CocoaPods/CocoaPods/issues/new

Be sure to first read the contributing guide for details on how to properly submit a ticket:

https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md

Don't forget to anonymize any private data!

原因:這個(gè)問(wèn)題比較蛋疼,弄了好久,仔細(xì)看發(fā)現(xiàn)就是因?yàn)镻odfile文件里面 platform 那一行 冒號(hào)和ios之間多了一個(gè)空格。。。。其實(shí)這個(gè)錯(cuò)誤在報(bào)錯(cuò)的時(shí)候ruby已經(jīng)給出了,只是一開(kāi)始沒(méi)有好好看:


5.(2016.4.14更新)

如果在執(zhí)行sudo gem install cocoapods的時(shí)候報(bào)以下錯(cuò)誤:

ERROR: While executing gem ... (Errno::EPERM)

Operation not permitted - /usr/bin/pod

并且你的操作系統(tǒng)是EI Caption,可是嘗試使用以下方法來(lái)代替上面的安裝命令:

$ sudo gem install -n /usr/local/bin cocoapods

6.(2016.8.4更新)

在執(zhí)行sudo gem install cocoa pods指令安裝的時(shí)候提示錯(cuò)誤:

ERROR: Error installing cocoapods:

activesupport requires Ruby version >= 2.2.2.

解決方法: 由于你的ruby版本偏低,需要升級(jí)你電腦上的ruby.

在命令行輸入:ruby -v來(lái)查看當(dāng)前ruby的版本.確定版本是低于2.2.2后就可以開(kāi)始進(jìn)行ruby的升級(jí).

一般通過(guò)rvm來(lái)升級(jí)ruby.

具體升級(jí)ruby的方法可以參考:

http://blog.csdn.net/lissdy/article/details/9191351這個(gè)鏈接中的內(nèi)容(大體操作過(guò)程相同,只是要安裝的版本號(hào)的差異,大家也可以自行查找其它資料來(lái)升級(jí)自己的ruby)

在執(zhí)行rvm install 2.2.4的過(guò)程中,我還出現(xiàn)了一些報(bào)錯(cuò),標(biāo)題是"requirements_osx_brew_update_system ruby-2.2.4"后面有一些詳細(xì)的錯(cuò)誤日志,像下面這樣:

ruby更新錯(cuò)誤.png

從日志內(nèi)容可以看出大概意思就是說(shuō)我在更新brew的過(guò)程中出現(xiàn)了一些錯(cuò)誤.(然后你的也可能有其他報(bào)錯(cuò),只要根據(jù)日志提示的錯(cuò)誤內(nèi)容采取相應(yīng)的措施就好).所以接下來(lái)我還更新了brew:

brew update--更新homeBrew自己

我又報(bào)錯(cuò)了:The /usr/local directory is not writable.如下:

homeBrew更新報(bào)錯(cuò).png

這是說(shuō),我那個(gè)路徑不可寫,按照上面說(shuō)的,指令也告訴我們了:

sudo chown -R $(whoami):admin /usr/local

輸入密碼后重新執(zhí)行brew update,就出現(xiàn)了一系列感覺(jué)要成功的進(jìn)度提示等,最后提示Already up-to-date的時(shí)候,brew本身就更新好了(這個(gè)過(guò)程比較久).

接著用brew outdated命令查看brew下哪些軟件可以進(jìn)行升級(jí).

然后brew upgrade命令用來(lái)升級(jí)所以可以升級(jí)的軟件.

最后記得用brew cleanup來(lái)清理不需要的版本及其安裝包緩存.

截止目前,brew也被我們更新好了.

接下來(lái)回到ruby更新,重新執(zhí)行rvm install 2.2.4,又是漫長(zhǎng)的等待后,一行行綠色的字表示ruby也安裝完成了,這時(shí)候再看看ruby的版本ruby -v:

ruby更新后版本.png

ok,升級(jí)好了.

7.(2016.8.4更新)

執(zhí)行pod setup的時(shí)候,出現(xiàn)報(bào)錯(cuò):

Cloning into 'master'...

error: RPC failed; result=56, HTTP code = 200

fatal: The remote end hung up unexpectedly

fatal: early EOF

fatal: index-pack failed

如圖:

pod setup報(bào)錯(cuò).png

這個(gè)是用于在執(zhí)行pod setup命令的時(shí)候,里面會(huì)執(zhí)行從github上面clone資源到本地的語(yǔ)句,但是要clone的東西太大了,超過(guò)的git限制的大小.嘗試執(zhí)行以下語(yǔ)句把默認(rèn)的限制變大:(52428000=500×1024×1024,即500M)

git config http.postBuffer 524288000

之前git中的配置是沒(méi)有這一項(xiàng)的,執(zhí)行完以上語(yǔ)句后輸入git config -l可以看到配置項(xiàng)的最下面多出了一行我們剛剛配置的內(nèi)容.

接下來(lái)再執(zhí)行pod setup試試看吧.


b? 終端中,cd到項(xiàng)目總目錄(注意:包含PodTest文件夾、PodTest.xcodeproj、PodTestTest的那個(gè)總目錄)

[objc] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

cd /Users/lucky/Desktop/PodTest

c? 建立Podfile(配置文件)

接著上一步,終端輸入 vim Podfile

鍵盤輸入 i,進(jìn)入編輯模式,輸入

platform :ios, '7.0'

pod 'MBProgressHUD', '~> 0.8'

然后按Esc,并且輸入“ :”號(hào)進(jìn)入vim命令模式,然后在冒號(hào)后邊輸入wq

注意:鍵盤輸入 :后,才能輸入wq。回車后發(fā)現(xiàn)PodTest項(xiàng)目總目錄中多一個(gè)Podfile文件

激動(dòng)人心的時(shí)刻到了:確定終端cd到項(xiàng)目總目錄,然后輸入 pod install,等待一會(huì),大約3分鐘。

查看項(xiàng)目根目錄:

注意:現(xiàn)在打開(kāi)項(xiàng)目不是點(diǎn)擊 PodTest.xodeproj了,而是點(diǎn)擊 PodTest.xcworkspace

打開(kāi)項(xiàng)目后看到項(xiàng)目結(jié)構(gòu)并且測(cè)試一下:

運(yùn)行結(jié)果:

補(bǔ)充:

1、CocoaPods的基本安裝及使用都詳細(xì)的說(shuō)明了,但還有一些補(bǔ)充,當(dāng)需要同時(shí)導(dǎo)入多個(gè)第三方時(shí)候怎么辦 ?

這就需要修改Podfile了,就是用vim編輯的那個(gè)保存在項(xiàng)目根目錄中的文件,修改完了Podfile文件,需要重新執(zhí)行一次pod install命令。

例如:

platform :ios

pod 'JSONKit',? ? ? '~> 1.4'

pod 'AFNetworking',? '~> 2.0'



退出編輯vim ? ? ?輸入pod install

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容