CocoaPods的安裝使用和常見問題

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

打開Terminal,然后鍵入以下命令:

$ sudo gem install cocoapods

執行完這句如果報告以下錯誤:

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

這是因為ruby的軟件源rubygems.org因為使用亞馬遜的云服務,被我天朝屏蔽了,需要更新一下ruby的源,過程如下:

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

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

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

$ gem sources -l

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

$ sudo gem update --system

升級成功后會提示: RubyGems system software updated

然后重新執行安裝下載命令

$ sudo gem install cocoapods

這時候應該沒什么問題了(如果報告Operation not permitted...之類的錯誤,請參考第五節:常見問題5,如果報告activesupport requires Ruby version >= 2.2.2這樣的錯誤,請參考第五節:常見問題6)

接下來進行安裝,執行:

$ pod setup

Terminal會停留在 Setting up CocoaPods master repo 這個狀態一段時間,是因為要進行下載安裝,而且目錄比較大,需要耐心等待一下.如果想加快速度,可使用cocoapods的鏡像索引.(文章末尾附使用鏡像索引的方法)

安裝成功后,你會看到:


Cocoapods的使用

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

執行命令 touch Podfile

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

然后對改文件進行編輯,執行命令 open -e Podfile

第一次執行這個命令,會有一個空白文件打開,可以先放在一邊,

Podfile文件的格式應該如下:



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

# platform :ios, '8.0'

target ‘eee’ do

#本地庫

pod ‘FMDB’,’2.7.2’

use_frameworks!

end




需要注意的幾點:platform那一行,ios三個字母都要小寫,而且與前面的冒號之間不能有間隔,后面的版本號也可以不寫,但是有些開源庫對版本是有要求的,比如要在6.0以上才能運行,遇到這樣的開源庫就需要寫上版本號。

platform下面就是Cocoapods需要集成的開源庫,根據你的需要確定集成那些庫。

舉個例子:

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

pod search AFNetworking

回車之后就可以看到和你搜索的關鍵字相關的一些庫類,如圖:


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

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

然后在Terminal中執行 :

pod install

這樣,AFNetworking就已經下載完成并且設置好了編譯參數和依賴,以后使用的時候切記如下兩點:

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

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

ps:當執行pod

install之后,除了Podfile,還會生成一個名為Podfile.lock的文件,它會鎖定當前各依賴庫的版本,之后即使多次執行pod

install也不會更改版本,只有執行pod

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


常見問題

1.

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

原因:單引號格式,可能是手動輸入導致

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

2.ArgumentError - invalid byte sequence in US-ASCII

原因:字符集錯誤

解決辦法:

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

export LC_ALL=en_US.UTF-8

export LANG=en_US.UTF-8

然后再使用locale命令查看,已經改過來了

[!] 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.


原因:我是在已有項目中集成Cocoapods的時候遇到這個問題,原因是項目 Target 中做了一些設置,CocoaPods 也做了默認的設置,如果兩個設置結果不一致,就會造成問題。

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

警告沒了,回到 Xcode,build通過。

網上還流行另外一種簡單粗暴的方法:點擊項目文件 project.xcodeproj,右鍵顯示包內容,用文本編輯器打開project.pbxproj,刪除OTHER_LDFLAGS的地方,保存(這種我沒試過)

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!

原因:這個問題比較蛋疼,弄了好久,仔細看發現就是因為Podfile文件里面 platform 那一行 冒號和ios之間多了一個空格。。。。其實這個錯誤在報錯的時候ruby已經給出了,只是一開始沒有好好看:


5.(2016.4.14更新)

如果在執行sudo gem install cocoapods的時候報以下錯誤:

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

Operation not permitted - /usr/bin/pod

并且你的操作系統是EI Caption,可是嘗試使用以下方法來代替上面的安裝命令:

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

6.(2016.8.4更新)

在執行sudo gem install cocoa pods指令安裝的時候提示錯誤:

ERROR: Error installing cocoapods:

activesupport requires Ruby version >= 2.2.2.

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

在命令行輸入:ruby -v來查看當前ruby的版本.確定版本是低于2.2.2后就可以開始進行ruby的升級.

一般通過rvm來升級ruby.

具體升級ruby的方法可以參考:

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

在執行rvm install 2.2.4的過程中,我還出現了一些報錯,標題是"requirements_osx_brew_update_system ruby-2.2.4"后面有一些詳細的錯誤日志,像下面這樣:

ruby更新錯誤.png

從日志內容可以看出大概意思就是說我在更新brew的過程中出現了一些錯誤.(然后你的也可能有其他報錯,只要根據日志提示的錯誤內容采取相應的措施就好).所以接下來我還更新了brew:

brew update--更新homeBrew自己

我又報錯了:The /usr/local directory is not writable.如下:

homeBrew更新報錯.png

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

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

輸入密碼后重新執行brew update,就出現了一系列感覺要成功的進度提示等,最后提示Already up-to-date的時候,brew本身就更新好了(這個過程比較久).

接著用brew outdated命令查看brew下哪些軟件可以進行升級.

然后brew upgrade命令用來升級所以可以升級的軟件.

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

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

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

ruby更新后版本.png

ok,升級好了.

7.(2016.8.4更新)

執行pod setup的時候,出現報錯:

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報錯.png

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

git config http.postBuffer 524288000

之前git中的配置是沒有這一項的,執行完以上語句后輸入git config -l可以看到配置項的最下面多出了一行我們剛剛配置的內容.

接下來再執行pod setup試試看吧.


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

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

cd /Users/lucky/Desktop/PodTest

c? 建立Podfile(配置文件)

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

鍵盤輸入 i,進入編輯模式,輸入

platform :ios, '7.0'

pod 'MBProgressHUD', '~> 0.8'

然后按Esc,并且輸入“ :”號進入vim命令模式,然后在冒號后邊輸入wq

注意:鍵盤輸入 :后,才能輸入wq。回車后發現PodTest項目總目錄中多一個Podfile文件

激動人心的時刻到了:確定終端cd到項目總目錄,然后輸入 pod install,等待一會,大約3分鐘。

查看項目根目錄:

注意:現在打開項目不是點擊 PodTest.xodeproj了,而是點擊 PodTest.xcworkspace

打開項目后看到項目結構并且測試一下:

運行結果:

補充:

1、CocoaPods的基本安裝及使用都詳細的說明了,但還有一些補充,當需要同時導入多個第三方時候怎么辦 ?

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

例如:

platform :ios

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

pod 'AFNetworking',? '~> 2.0'



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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容