CocoaPods安裝遇到的坑。


//官方推薦地址

CocoaPods :http://code4app.com/article/cocoapods-install-usage

 

 

cooped的安裝  $(inherited)

報pod 找不到 :sudo gem install -n /usr/local/bin cocoa pods

 

查看當前系統Cocoapods版本命令:pod --version

1.命令行更新(安裝)步驟

 

$ sudo gem update --system // 先更新Ruby,國內需要切換源

$ gem sources --remove https://rubygems.org/

$ gem source -a https://ruby.taobao.org/

//查看是否替換成功

$ gem sources -l

 

*** CURRENT SOURCES *** 

 

$ sudo gem install cocoapods // 安裝cocoapods

$ pod setup

和安裝過程是一樣的

 

再次查看版本

 

$ pod --version 0.32.1 Done!!

 

2.pod 報錯

 

如果新獲取一份xcode工程代碼 運行了pod install 或者 pod update 之后 無法正常 Run 代碼 出現類似 [!] No Podfile found in the project directory. 這種錯誤. 那么有一種簡單粗暴的辦法解決

 

1.找到工程目錄所在位置,即Podfile文件所在的目錄下

 

2.刪除后綴名為:xcworkspace,lock 以及pods 三個文件

 

3.重新運行 pod install 或者 pod update 即可

 

直接跳過cocoapods 的自我檢查 -->更新

 安裝框架,不更新本地索引,速度快,但是不會升級本地代碼庫

$pod install --verbose --no-repo-update

$ pod install --no-repo-update

 

# 更新框架,不更新本地索引,速度快

# 可以安裝新框架或者刪除不用的框架,但是不會升級項目已經安裝的框架

$pod update --verbose --no-repo-update

$ pod update --no-repo-update  

檢查xcode 是否是 官方 下載

spctl --assess --verbose "/Applications/Xcode.app"

shasum /Users/my_liu/Downloads/Xcode_7.1.dmg

cocoapods 安裝指定版本(回退)

sudo gem install -n /usr/local/bin cocoapods --version 0.39.0.rc.1

卸載cocoapods

sudo gem uninstall cocoapods

 

 

COCOAPODS的時候出現的問題 _OBJC_CLASS_$_XXX

最新的cocoapod導入xmpp的時候,會出現循環依賴,所以擼主選擇了手動導入。

一開始還用的挺開心的,后來,使用cocoapods導入其他的框架,發現調用的時候總是報錯。

Undefined symbols for architecture x86_64:

  "_OBJC_CLASS_$_SVProgressHUD", referenced from:

      objc-class-ref in HJCXMPPTools.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

在網上搜索了一堆的攻略,cocoapods卸載重新按照了108遍,然而這並沒有什么卵用。

后來我再次用cocoapod更新框架的時候,發現終端的一段警告

[!] The `myQQ [Debug]` target overrides the `OTHER_LDFLAGS` build 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.

 

這下有了思路了,原來我手動導入xmpp的時候,修改了Other Linker Flags

 

 

所以解決辦法就是:

按照提示,增加$(inherited)

 

 

添加之后,問題終於解決

 

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 from https://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 --remove https://rubygems.org/
$ gem sources -a https://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的鏡像索引.(文章末尾附使用鏡像索引的方法)
安裝成功后,你會看到:


01.png
四、Cocoapods的使用

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

然后對改文件進行編輯,執行命令 open -e Podfile
第一次執行這個命令,會有一個空白文件打開,可以先放在一邊,
Podfile文件的格式應該如下:
platform :ios, '7.0'
pod 'AMap2DMap', '~> 2.5.0'
pod 'AFNetworking', '~> 2.5.3'
pod 'SDWebImage', '~> 3.7.2'

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

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

舉個例子:
我要集成AFNetworking這個庫類,需要在Cocoapods里面先搜索是否有需要的庫,可以在Terminal中輸入:
pod search AFNetworking
回車之后就可以看到和你搜索的關鍵字相關的一些庫類,如圖:


02.png

其中第一個就是我們需要的,把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.
[!] Invalid Podfile file: undefined local variable or method `en_US' for #<Pod::Podfile:0x00000102a5d8b0>. 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命令查看,已經改過來了

  1. [!] The YMTea [Debug] target overrides the OTHER_LDFLAGS build 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.

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

- Use the `$(inherited)` flag, or - Remove the build settings from the target.

原因:我是在已有項目中集成Cocoapods的時候遇到這個問題,原因是項目 Target 中做了一些設置,CocoaPods 也做了默認的設置,如果兩個設置結果不一致,就會造成問題。
解決方法:我想要使用 CocoaPods 中的設置,分別在我的項目中定義PODS_ROOTOther 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已經給出了,只是一開始沒有好好看:


03.png

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試試看吧.

 

如果老項目 新建的項目沒有 pod 工作project 可以嘗試用這個方法解決

sudo gem install -n /usr/local/bin cocoapods --pre,然后從新pod install。

 

附:如何使用CocoaPods的鏡像索引:
所有項目的Podspec文件都托管在https://github.com/CocoaPods/Specs, 第一次執行pod setup時,CocoaPods會將這些podspec索引文件更新到本地的~/.cocoapods目錄下, 這個索引文件比較大,所以第一次更新時非常慢. 友好人士在國內的服務器建立了Cocoapods索引庫的鏡像, 所以執行索引跟新操作時候會快很多.具體操作方法如下: $ pod repo remove master $ pod repo add master https://gitcafe.com/akuandev/Specs.git $ pod repo update 這是使用gitcafe上的鏡像,將以上代碼中的 https://gitcafe.com/akuandev/Specs.git 替換成 https://git.oschina.net/akuandev/Specs.git 即可使用oschina上的鏡像。



文/CoderAO(簡書作者)
原文鏈接:http://www.jianshu.com/p/6e5c0f78200a
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM