CocoaPods的使用及安裝

来源:http://www.cnblogs.com/ldnh/archive/2016/03/31/5342104.html
-Advertisement-
Play Games

一、什麼是CocoaPods CocoaPods是iOS項目的依賴管理工具,該項目源碼在Github上管理。開發iOS項目不可避免地要使用第三方開源庫,CocoaPods的出現使得我們可以節省設置和第三方開源庫的時間。在使用CocoaPods之前,開發項目需要用到第三方開源庫的時候,我們需要1.把開 ...


本文轉自:http://www.jianshu.com/p/6e5c0f78200a

一、什麼是CocoaPods

CocoaPods是iOS項目的依賴管理工具,該項目源碼在Github上管理。開發iOS項目不可避免地要使用第三方開源庫,CocoaPods的出現使得我們可以節省設置和第三方開源庫的時間。
在使用CocoaPods之前,開發項目需要用到第三方開源庫的時候,我們需要
1.把開源庫的源代碼複製到項目中
2.添加一些依賴框架和動態庫
3.設置-ObjC,-fno-objc-arc等參數
4.管理他們的更新
在使用CocoaPods後,我們只需要把用到的開源庫放到一個名為Podfile的文件中,然後執行pod install.Cocoapods就會自動將這些第三方開源庫的源碼下載下來,並且為我們的工程設置好響應的系統依賴和編譯參數。

二、CocoaPods的原理

CocoaPods的原理是將所有的依賴庫都放到另一個名為Pods的項目中,然後讓主項目依賴Pods項目,這樣,源碼管理工作都從主項目移到了Pods項目中。Pods項目最終會編譯成一個名為libPods.a的文件,主項目只需要依賴這個.a文件即可。

三、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: cocoapods

 

這是因為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
這時候應該沒什麼問題了

接下來進行安裝,執行:
$ pod setup

 

 CocoaPods的下載預設在/.cocoapods目錄下,執行:

$ cd ~/.cocoapods 就可以進入此目錄

然後執行:

$ su -sh *可以查看下載文件的大小,下載完成是360M

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

01.png
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
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
03.png
附:如何使用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 
替換成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的鏡像。




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目地址:https://github.com/ZhangTingkuo/AndroidCnblogs 1.查看評論 // 獲取文章評論 public static final String BLOGS_COMMENTS = "http://wcf.open.cnblogs.com/blog/pos ...
  • 產品中接入了微博/微信的第三方登錄分享功能、微信和支付寶的第三方支付功能,之前在開發過程中涉及到這些部分,於是抽空將接入過程梳理了一遍。 1.微博、微信、支付寶SDK相關接入設置 (1)微博SDK SDK下載 設置URL Scheme,用於從第三方應用或瀏覽器中啟動app 將SDK添加到工程中(支持 ...
  • 一、簡介 iOS9.0如果當前處於前臺授權狀態,預設是不可以後臺獲取用戶位置。 如果在前臺授權下,讓其能獲取到後臺定位,該怎麼辦 可以設置以下屬性為YES,就可以繼續獲取後臺位置,但是會出現藍條 使用註意:必須設置對應的後臺模式,勾選後臺模式:location updates @property(a ...
  • Activity有四種啟動模式: 1. standard,預設的啟動模式,只要激活Activity,就會創建一個新的實例,並放入任務棧中,這樣任務棧中可能同時有一個Activity的多個實例。 2. singleTop,激活Activity時,如果棧頂是這個Activity,就不會創建新的實例;如果 ...
  • Atitit.android js 的鍵盤按鍵檢測Back鍵Home鍵和Menu鍵事件 1. onKeyDown @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEY ...
  • 引子 — 和`@interface` 從一開始學習Objc,我們就“知道”定義一個類時後一種寫法才是正確的。然而如果你試了的話,會發現第一種也是OK的。 言歸正傳 為什麼會有這篇文章呢,源於ReactiveCocoa這個開源庫里定義的幾個巨集: @weakify, @strongify, @WS, @ ...
  • 本文永久鏈接:http://www.cnblogs.com/qianLL/p/5342593.html pod 'AFNetworking', '~>3.0.4' < 第三方 具體他的pod的過過程 http://www.cnblogs.com/qianLL/p/5331624.html 代碼如下 ...
  • 然後我的代碼就按照上面的這個順序輸出。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...