最新的CocoaPods的使用教程

一. CocoaPods的介紹

什么是CocoaPods?CocoaPods是一個負責管理iOS項目中第三方開源庫的工具,CocoaPods的項目源碼在https://github.com/CocoaPods/Specs上管理。

經過CocoaPods團隊的不懈努力,2016年5月10號,CocoaPods終于在其官方博客上宣布正式發布CocoaPods 1.0。與此同時,公開了相應的Mac版App——CocoaPods App 1.0 。

CocoaPods App 1.0 的下載地址:https://cocoapods.org/app

二. CocoaPods的安裝

1. 替換ruby源

CocoaPods是基于ruby ecosystem的,需要ruby環境,使用ruby的gem命令。所以我們的系統要有ruby環境。然而Mac系統默認會安裝好ruby環境。可在終端ruby -v查看ruby版本:

//查看ruby版本

ruby -v

//輸出信息

ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]

查看ruby源

gem sources -l

默認情況下,終端會顯示下面:

*** CURRENT SOURCES ***

https://rubygems.org/

當然這個源在墻內是訪問不到的,所以要更換到ruby-china的鏡像

// 1.移除掉原有的源

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

//2.淘寶的源已經不更新維護了,現在使用ruby-china的源哦

gem source -a https://gems.ruby-china.org

以下命令添加淘寶的源:(不建議繼續使用)

gem sources -a https://ruby.taobao.org/

// 3.驗證是否替換成功

gem sources -l

如果顯示下面輸出就說明正確:

*** CURRENT SOURCES ***

https://gems.ruby-china.org

2. 更新升級 Gem 版本

Gem是管理Ruby庫和程序的標準包,如果它的版本過低也可能導致安裝失敗,解決方案自然是升級Gem,執行下述命令即可:

// 更新升級gem,國內需要切換源

sudo gem update --system

查看gem版本

gem -v

2.6.6

3. 安裝CocoaPods

OS X 10.11 以前安裝命令為:

sudo gem install cocoapods// 安裝cocoapods

Mac系統為OS X EL Capitan安裝命令為:

//安裝最新版本

sudo gem install -n /usr/local/bin cocoa pods

//安裝指定版本

sudo gem install -n /usr/local/bin cocoapods -v 1.0.0

//安裝最新的release beta版本

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

如果你想卸載CocoaPods怎么辦?看下面:

//卸載CocoaPods

sudo gem uninstall cocoapods

4. 更新Podspec索引文件

如果按照上面3個步驟沒問題,用命令pod --version查看是否安裝成功,如果成功會顯示pod的版本。

pod setup作用:將所有第三方的Podspec索引文件更新到本地的~/.cocoapods/repos目錄下

pod安裝成功之后一個首先的操作就是執行命令(不是必須的):

pod setup

所有的第三方開源庫的Podspec文件都托管在https://github.com/CocoaPods/Specs

我們需要把這個Podspec文件保存到本地,這樣才能讓我們使用命令pod search 開源庫搜索一個開源庫,怎樣才能把github上的Podspec文件保存本地呢?那就是 pod setup

執行pod setup時,CocoaPods 會將第三方的podspec索引文件更新到本地的~/.cocoapods/repos目錄下

如果沒有執行過 pod setup,那用戶根目錄下~找不到.cocoapods/repos目錄的,沒有創建這個目錄。

如果執行 pod setup,并且命令沒有執行成功,那么會創建~/.cocoapods/repos目錄,只不過目錄是空的。

如果執行 pod setup,并且命令執行成功,說明把github上的Podsepc文件更新到本地,那么會創建~/.cocoapods/repos目錄,并且repos目錄里有一個master目錄,這個master目錄保存的就是github上所有第三方開源庫的Podspec索引文件。

但是第一次執行pod setup時,這個github的Podspec索引文件比較大,有 300M 左右(以后會越來越大的),所以第一次更新時非常慢.要耐心等待......可以進去目錄~/.cocoapods/repos使用命令du -sh *來查看下載文件的大小了

怎么才能快點呢?網上好多給出都是更換索引庫的鏡像,gitcafe

和oschina, gitcafe已經被coding收購了(2016年3月份左右收購)。這兩個我親測,現在都不行了(可能是我網速不好,基本上就是連接失敗,有空網速好點的時候我在測試一下)。所以還是別更換 CocoaPods 索引庫的鏡像了。

三. CocoaPods的使用

1. 新建 Podfile文件

使用時需要在你的項目根目錄下新建一個名為Podfile的文件(文件名一定為Podfile,不能更改),將依賴的庫名字依次列在文件中即可.

//進入項目的根目錄

cd ~/Desktop/Projects/JYCocoaPodsTest

//新建一個名為Podfile的文件

touch Podfile

2. 編輯 Podfile文件

CococaPods升級到1.0.0版本之后,Podfile文件的格式也發生了很大改變

我來帶領大家寫一個完整的Podfile文件 ,各個選項的解釋在文件后面一起解釋。

假設我們的項目名稱為JYCocoaPodsTest, 為JYCocoaPodsTest新建了一個UITarget。打開JYCocoaPodsTest.xcodeproj結構如下:

JYCocoaPodsTest.xcodeproj結構.png

1. 簡單的Podfile:

platform :ios, '7.0'

inhibit_all_warnings!

xcodeproj 'JYCocoaPodsTest'

workspace 'JYCocoaPodsTest'

use_frameworks!

target 'JYCocoaPodsTest' do

pod 'AFNetworking',

pod 'JYCarousel', '0.0.1'

end

2. 稍微復雜的Podfile:

source 'ssh://git@gitlab.9ijx.com:9830/iOS/Specs.git'

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '7.0'

use_frameworks!

inhibit_all_warnings!

workspace 'JYCocoaPodsTest'

target 'JYCocoaPodsTest' do

pod 'AFNetworking'

pod 'JYCarousel', '0.0.1'

pod 'WCJCache', :git => "http://gitlab.9ijx.com/iOS/WCJCache.git"

target :JYCocoaPodsTestUITests do

inherit! :search_paths

pod 'YYText'

end

end

3. Podfile的語法解釋:

1. platform :iOS, '7.0'

指定了開源庫應該被編譯在哪個平臺以及平臺的最低版本。

若不指定平臺版本,官方文檔里寫明各平臺默認值為iOS:4.3,OS X:10.6,tvOS:9.0,watchOS:2.0

2. inhibit_all_warnings!

屏蔽cocoapods庫里面的所有警告

這個特性也能在子target里面定義,如果你想屏蔽某pod里面的警告也是可以的:

pod 'JYCarousel', :inhibit_warnings => true

3. xcodeproj,現在被project代替,這個變量就別使用了

允許你指定需要鏈接的工程

4. use_frameworks!

使用frameworks動態庫替換靜態庫鏈接

(1)swift項目cocoapods 默認 use_frameworks!

(2)OC項目cocoapods 默認 #use_frameworks!

5. workspace

指定應該包含所有projects的Xcode workspace.

如果沒有顯示指定workspace并且在Podfile所在目錄只有一個project,那么project的名稱會被用作于workspace的名稱

6. project

默認情況下是沒有指定的,當沒有指定時,會使用Podfile目錄下與target同名的工程:(我們只有一個工程JYCocoaPodsTest)

# JYCocoaPodsTest這個Target只有在JYCocoaPodsTest工程中才會鏈接

target 'JYCocoaPodsTest' do

project 'JYCocoaPodsTest'

...

end

5. target 'xxxx' do

end

指定特定Target的依賴庫

可以嵌套子Target的依賴庫

6. inherit! :search_paths

明確指定繼承于父層的所有pod,默認就是繼承的

7. source

指定specs的位置,自定義添加自己的podspec。公司內部使用

cocoapods 官方source是隱式的需要的,一旦你指定了其他source 你就需要也把官方的指定上

例如:

source 'ssh://git@gitlab.9ijx.com:9830/iOS/Specs.git'

source 'https://github.com/CocoaPods/Specs.git'

當我們使用pod install或者pod setup時,會自動在~/.cocoapods/repo目錄下更新項目需要的podspec索引文件如下:

本地podspec索引文件.png

4. 依賴庫的基本寫法:

pod 'JYCarousel', //不顯式指定依賴庫版本,表示每次都獲取最新版本

pod 'JYCarousel', '0.01'//只使用0.0.1版本

pod 'JYCarousel', '>0.0.1' //使用高于0.0.1的版本

pod 'JYCarousel', '>=0.0.1' //使用大于或等于0.0.1的版本

pod 'JYCarousel', '<0.0.2' //使用小于0.0.2的版本

pod 'JYCarousel', '<=0.0.2' //使用小于或等于0.0.2的版本

pod 'JYCarousel', '~>0.0.1' //使用大于等于0.0.1但小于0.1的版本,相當于>=0.0.1&&<0.1

pod 'JYCarousel', '~>0.1' //使用大于等于0.1但小于1.0的版本

pod 'JYCarousel', '~>0' //高于0的版本,寫這個限制和什么都不寫是一個效果,都表示使用最新版本

5. 依賴庫的自定義寫法

下面都會用到podspec文件,所以要熟悉這個文件的構成才可以.

我會在下一篇博客編輯這個文件

Using the files from a local path (使用本地文件)

pod 'JYCarousel', :path => '/Users/Dely/Desktop/JYCarousel'

我新建一個工程PodTest來演示

1.在podfile寫好依賴路徑

platform :ios, '7.0'

inhibit_all_warnings!

workspace 'PodTest'

target 'PodTest' do

pod 'JYCarousel', :path => '/Users/Dely/Desktop/JYCarousel'

end

2.在你的本地pod庫添加xxx.podspec文件,(一定要注意是根目錄添加)

JYCarousel目錄結構.png

3.編輯xxx.podspec文件

主要下面紅框點,修改成你的本地路徑:

podspec.png

4.進入項目根目錄進行安裝pod install

PodTest.xcworkspace.png

From a podspec in the root of a library repository (引用倉庫根目錄的podspec)

在倉庫根目錄下加入podsepc文件上傳到git上就可以了(比較簡單)

使用倉庫中的master分支:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git'

使用倉庫的其他分支:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git' :branch => 'release'

使用倉庫的某個tag:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git', :tag => '0.0.1'

或者指定一個提交記錄:

pod 'JYCarousel', :git => 'https://github.com/Delyer/JYCarousel.git', :commit => '5e473f1e0530bb3799f2f0d70554b292570bd8f0'

需要特別注意的是,雖然這樣將會滿足任何在Pod中的依賴項通過其他Pods

但是 podspec必須存在于倉庫的根目錄 中,如果根目錄中沒有存在這個podspec文件,你將不得不使用下面提到的幾種方式之一

From a podspec outside a spec repository, for a library without podspec(在一個不帶podsepec的庫里引用外部的spec)

如果一個podspec能夠從外部的倉庫源的獲取,設想一下,也通過HTTP來獲取podspec:

pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

pod spec

使用一個在給定podspec中聲明的Pod的依賴項。如果如果沒有參數被傳遞,那么在Podfile根部的第一個podspec會被使用。它將會被庫所在的工程所使用

注意:這個不會包含哪些來自于podspec的資源而僅僅是來自于CocoaPods基礎架構

例子:

podspec

podspec :name => 'QuickDialog'

podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'

上面的基本夠我們日常使用。如果你還想了解更多。請到CocoaPods官方博客學習:https://guides.cocoapods.org

3. 安裝依賴開源庫

第二步中我們編輯好的Podfile文件保存好,進入項目根目錄執行命令

//進入項目的根目錄

cd ~/Desktop/Projects/JYCocoaPodsTest

//安裝依賴庫

pod install

pod install.png

pod install命令執行成功后,會看到項目根目錄下多出xxx.xcworkspace、Podfile.lock文件和Pods目錄。再看看剛才執行完pod install命令打印出來的內容的最后一行:From now on use CocoaPodsDemo.xcworkspace.提示我們從現在起,我們需要使用JYCocoaPodsTest.xcworkspace文件來開發。

4. 第三方庫更新

跟pod install相似的一個命令就是pod update.

如果未指定特定版本的話,pod update將所有第三方框架更新到最新版本。

5. pod文件和命令說明

-----------------------------新增文件------------------------------

1. Podfile文件

項目的第三方庫的依賴以及項目的基本配置

2. Podfile.lock文件

最后一次更新Pods時, 保存所有第三方框架的版本號

3. pods目錄

保存通過pod install或者pod update下載下來的第三方開源庫的源代碼

4. xxx.xcworkspace文件

重新生成一個工作空間,打開這個工程文件來進行開發

-----------------------------常用指令------------------------------

1. pod setup

將所有第三方的Podspec索引文件更新到本地的~/.cocoapods/repos目錄下,更新本地倉庫。

2. pod repo update

執行 pod repo update更新本地倉庫,本地倉庫完成后,即可搜索到指定的第三方庫,作用類似pod setup。不過這個命令經常不單獨調用。比如執行pod setup、pod search、pod install、pod update會默認執行pod repo update

3. pod search xxx

查找某一個開源庫。查找開源庫之前,默認會執行pod repo update指令

4. pod list

列出所有可用的第三方庫.現在已經2.4W+了.還在不斷地增長

5. pod install

會根據Podfile.lock文件中列舉的版本號來安裝第三方框架

如果一開始Podfile.lock文件不存在, 就會按照Podfile文件列舉的版本號來安裝第三方框架

安裝開源庫之前, 默認會執行pod repo update指令

6. pod update

將所有第三方框架更新到最新版本, 并且創建一個新的Podfile.lock文件

安裝開源庫之前, 默認會執行pod repo update指令

7. pod install --no-repo-update

8. pod update --no-repo-update

安裝開源庫之前, 不會執行pod repo update指令

四. CocoaPods相關的兩個目錄

目錄~/.cocoapods/repos/這個目錄存儲遠端的podspec文件到本地。master是所有第三方的pod spec索引文件。其他的使我們自定義的podspec索引文件。

~/.cocoapods/repos/目錄.png

目錄~/Library/Caches/CocoaPods/這個目錄就是緩存文件的存儲目錄。

~/Library/Caches/CocoaPods/目錄.png

如果我們使用pod search xxx 提示沒有找到,但是我們這個第三方確實存在。

1.我們可以使用pod setup更新本地pod spec索引文件。然后pod search xxx

2.按照1的方法如果還是pod search xxx找不到,那我們就把~/Library/Caches/CocoaPods/的緩存文件刪除。然后pod setup。最后pod search xxx這樣應該就可以了

CocoaPods的常見錯誤:http://blog.csdn.net/wangyanchang21/article/details/51437934

五. CocoaPods的說明

1、第三方庫會被編譯成.a靜態庫或者.framwork的動態鏈接庫供我們真正的工程使用。

CocoaPods會將所有的第三方庫以target的方式組成一個名為Pods的工程,該工程就放在剛才新生成的Pods目錄下。整個第三方庫工程會生成一個名稱為libPods.a的靜態庫提供給我們自己的CocoaPodsTest工程使用。

對于資源文件,CocoaPods提供了一個名為Pods-resources.sh的bash腳本,該腳本在每次項目編譯的時候都會執行,將第三方庫的各種資源文件復制到目標目錄中。

2、我們的工程和第三方庫所在的工程會由一個新生成的workspace管理

為了方便我們直觀的管理工程和第三方庫,CocoaPodsTest工程和Pods工程會被以workspace的形式組織和管理,也就是我們剛才看到的JYCocoaPodsTest.xcworkspace文件。

3、原來的工程設置已經被更改了,這時候我們直接打開原來的工程文件去編譯就會報錯,只能使用新生成的workspace來進行項目管理。

4、CocoaPods通過一個名為Pods.xcconfig的文件來在編譯時設置所有的依賴和參數。

六. 總結:

CocoaPods主要還是側重于使用,網速太慢我親測的都有點煩躁了。當然理解原理過程更好,我現在還是有很多地方不是很理解。希望共同努力吧。還是多看看官方文檔來學習一下不了解的。如果你喜歡就請點個喜歡吧^_^

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容

  • 前言 前幾天發布我的開源庫<最簡單方便的iOS輪播開源庫:JYCarousel>到CocoaPods的時候。對Co...
    Dely閱讀 17,332評論 12 82
  • 背景 上一篇博客最新的CocoaPods的使用教程(一)里主要講解了CocoPods得簡單的日常使用。但是我們經常...
    Dely閱讀 5,845評論 11 34
  • 項目組件化、平臺化是技術公司的共同目標,越來越多的技術公司推崇使用pod管理第三方庫以及私有組件,一方面使項目架構...
    swu_luo閱讀 22,024評論 0 39
  • CocoaPods 是什么? CocoaPods 是一個負責管理 iOS 項目中第三方開源庫的工具。CocoaPo...
    朝洋閱讀 25,722評論 3 51
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby,可以先安裝xcode,再安裝macport ,最后...
    山天大畜閱讀 1,876評論 0 1