Cocoapods的使用教程


前言

對於iOS App的開發,幾乎都采用了Cocoapods來管理第三方庫,那么對於我們開發人員來說,這是必備技能,必須要掌握如何使用。這篇文章就是介紹如何安裝和使用CocoaPods的。

這篇文章對哪些人群參考價值?

  • 對未使用過Cocoapods的人群有參考價值
  • 對使用過Cocoapods,但是未深入了解過的用戶有參考價值
  • 對有開源精神的,希望將自己的代碼貢獻到Cocoapods的用戶有參考價值

如果您不屬於以上人群,您是可以不閱讀本篇文章的,當然閱讀完也會有很大的幫助。

溫馨提示:在篇文章中所使用的Xcode版本為Xcode7.

什么是CocoaPods?

簡單來說,就是專門為iOS工程提供對第三方庫的依賴的管理工具,通過CocoaPods,我們可以單獨管理每個第三方庫,可以更方便地管理每個第三方庫的版本,而且不需要我們做太多的配置,直接交由提供支持CocoaPods項目的作者來配置了,如此便可直觀、集中和自動化地管理我們項目的第三方庫。

為什么需要使用CocoaPods?

我們也許有過這樣的感受: 每添加一個第三方庫、Framework或者SDK,我們都需要手動添加相關依賴庫,在工程buildsetting中配置路徑,在build phases中添加依賴的系統庫。如果所導入的第三方庫還依賴其他第三方庫,我們也需要手動導入且分別添加工程配置。

當我們需要更新某個第三方庫的時候,我們又要手動移除該庫,導入新的庫,然后再配置,這是相當麻煩且沒有意義的工作。當使用CocoaPods管理后,我們只需要修改為某個版本,再執行pod update即可。

當我們需要去掉某個第三方庫時,我們是怎么做的呢?是不是將該庫移除掉,然后還得把相關配置也移除掉,這樣工作才干凈。是不是很麻煩呢?當我們使用Cocoapods管理后,我們是怎么做的?只需要在Podfile刪除該引入該庫的語句,然后執行pod update即可。

當我們開始使用CocoaPods管理第三方庫后,我們只需要相當少的配置,其它的一切都交由CocoaPods來管理即可,我們使用起來就更省心了。

如何安裝CocoaPods?

CocoaPods is built with Ruby and is installable with the default Ruby available on OS X. We recommend you use the default ruby.

也就是說CocoaPods是通過Ruby來安裝的,MAC OSX都有一個默認的Ruby版本,推薦我們通過默認的Ruby來安裝CocoaPods。

使用下面的命令安裝:

事實上,這樣安裝未必能安裝成功,因為默認的cocoapods網址是國外的,需要VPN才能訪問,因此我們可以改一種方式:

1、先輸入 gem sources --remove https://rubygems.org/
2、等待有反映后,再輸入 gem source -a https://ruby.taobao.org/
3、驗證是否成功替換:gem source -l
4、最后就可以通過sudo gem install cocoapods正常安裝cocoapods了。

 

等待安裝完成后,就可以開始使用CocoaPods了。

注意:source或者sources都可以.

如何使用CocoaPods?

要使用CocoaPods,就需要一個Podfile文件。我們是如何為所有的工程建立Podfile的,下面的方式是基本的方式。

  • 第一步:進入到我們所建立的工程的目錄,這里是KVODEMO
  • 第二步:通過touch命令新建Podfile
  • 第三步:通過vi Podfile進入編輯Podfile
  • 第四步:添加第三方庫,如下圖,我們添加了AFNetworkingObjectiveSugar庫,其中我們添加的AFNetworking版本是2.0版本,ObjectiveSugar版本是0.5.
  • 按下esc鍵,然后輸入:wq,就可以保存了。然后在終端輸入pod install,就可以安裝第三方庫了。

在安裝完成后,我們不再是打開后綴為.xcodeproj的工程,而是打開后綴為.xcworkspace的工作空間了。

關於Podfile更高級的使用,請參考官方文檔

或者關注后續文章!

在Objective-C工程中的使用

在工程中,我們只需要通過引入改文件就可以直接使用了,比如我們引入了第三方庫Masonry(純代碼自動布局),我們在Objective-C工程中就可以通過import頭文件即可。

注意,如果這么做提示找不到頭文件,那么我們可以嘗試這么引入:#import "Masonry.h"或者通過#import "Masonry/Masonry.h"

如果仍然沒有效果,那么需要在工程配置一下.在工程的Build Settings搜索Search Paths,然后在User header search paths中添加$(SRCROOT)並選擇recursive(也就是遞歸查找)

在Swift工程中的使用

我相信大家在Swift工程中使用CocoaPods也遇到了不少問題,尤其是如何import模塊問題。 當初我遇到這種問題時,也在網上搜索了很多的資料,但是都不是我希望的方案。在網上有兩種方式: 通過Swift工程可以橋接Objectice-C的方式,建立一個Bridge-head.h(名字隨便起),然后進入到Build Settings,在搜索框中輸入bridg,找到Objective-C Bridging Header,選項,把頭文件的路徑賦值給該選項。如下所示:

image

也就是:工程名/橋接文件名.h。在剛才所建立的橋接文件中,通過#import "頭文件.h"就可以了。

雖然是Objective-C第三方庫,事實上我們也可以使用Swift的方式引入的,也就是通過 import 模塊名 的方式來引入。所以對於上面的方式,我是不喜歡的。那么再看看網上的另一種方式:Swift第三方管理

當然,現在swift出了一個Package Manager,專門管理第三方引用的。

這是通過submodule的方式來管理的。 創建submodule,在當前項目的同級目錄下執行類似這樣的命令,如下:

然后將生成的Masonry.xcodeproj拖入到工程中。 在xcode工程的general中,點擊embeded libraries中的+號,然后改我們的第三方庫framework,類似下圖:

image

最后就可以直接在工程中需要使用的地方,通過import模塊名來使用了。 如果是多人團隊開發,我們就需要共享了,那么其他成員就需要通過下面的命令來安裝:

這是通過遞歸來安裝或者更新submodule。這是挺麻煩的一件事。然后根據使用的經驗,我們下載別人的工程下來后,執行了上面的命令,安裝好相關模塊了,運行工程經常出現報錯的問題,也就是配置問題。因此,個人很不喜歡這種方式。

事實上,在Xcode7是不再需要這么做了,對於其他Xcode版本是否需要,未驗證。 我們通過cocoapods安裝的第三方庫會自動生成為framework,然后我們只需要在使用的地方直接通過import 模塊名使用即可。但是有時候可能會出現某個第三方庫直接通過import 模塊名時,提示找不到,也就是沒有智能提示。這時候我們可以通過在xcode工程的general中的embeded libraries點擊+,然后導入該framework,就可以正常import了。另外如果導入的第三方庫在運行時,報錯了,類似於:

那么我們可以這么解決:

Build Phases->Link Binary With Libraries->找到出錯的庫的名稱->修改requiredoptional即可。

如何升級CocoaPods版本?

升級CocoaPods是非常簡單的,只需要一個命令即可。 正常情況下,只需要一個命令就可以升級了:

但是有可能需要更新gem才能升級cocoapods,因此我們可能需要這么做:

然后查看版本號:

 

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

打開Terminal(Mac電腦自帶的終端),然后按照以下提示操作即可:

1.設置ruby的軟件源

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

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

gem sources --remove https://rubygems.org/ #(移除當前ruby的源)

gem sources -a https://ruby.taobao.org/ #(設置當前ruby的源為我天朝的)

gem sources -l #(再次查看當前ruby的源)

如果Terminal輸出:

*** CURRENT SOURCES ***

https://ruby.taobao.org/

 

就證明ruby的軟件源已經設置OK了。

2.設置gem為最新版本

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

在Terminal輸入以下命令:

sudo gem update --system

 

升級成功后會提示: Latest version currently installed. Aborting.

3.執行安裝CocoaPods命令

注意:OS X 10.11 升級,雖然官方聲稱只是一個小的升級,但對於開發者而言,cocoapods需要重新安裝,但按照以前的安裝方式,在Terminal輸入以下命令:

sudo gem install  cocoapods

 

如果報以下錯誤:

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

Operation not permitted - /usr/bin/xcodeproj

 

解決方案1:

執行下面的命令並重啟

sudo nvram boot-args="rootless=0"

sudo reboot

重啟之后, 執行這個命令檢查

sudo gem install cocoapods -V

 

如果依舊有錯誤,使用第二個方案

解決方案2:

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

pod setup

 

還有一點需要注意,pod setup在執行時,會輸出Setting up CocoaPods master repo,但是會等待比較久的時間。這步其實是 Cocoapods 在將它的信息下載到 ~/.cocoapods目錄下,如果你等太久,可以試着 cd 到那個目錄,用du -sh *來查看下載進度。

安裝成功后,你會看到:Setup completed

 

隨便以一種方式新建一個名為Podfile的文件放到你的工程根目錄下(不能寫成別的名字,也可以自己在工程根目錄里面直接新建)

Podfile文件內容的格式應該如下:

platform :ios, '8.0' #(注明你的開發平台以及版本,'8.0'忽略不寫即為最新版本)

pod 'AFNetworking', '~> 2.5.3' #('~> 2.5.3'為版本號,忽略不寫即為最新版本)

pod 'SDWebImage', '~> 3.7.2'

 

然后在Terminal進入工程所在的根目錄(工程根目錄)中執行 :

pod install

 

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

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

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

查找第三方庫:

你如果不知道 cocoaPods 管理的庫中,是否有你想要的庫,那么你可以通過 pod search 命令進行查找,以下是我用 pod search json 查找到的所有可用的庫:

可以在Terminal中輸入:

pod search AFNetworking

 

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

關於 Podfile.lock

當你執行pod install之后,除了 Podfile 外,CocoaPods 還會生成一個名為Podfile.lock的文件,Podfile.lock 應該加入到版本控制里面,不應該把這個文件加入到.gitignore中。因為Podfile.lock會鎖定當前各依賴庫的版本,之后如果多次執行pod install 不會更改版本,要pod update才會改Podfile.lock了。這樣多人協作的時候,可以防止第三方庫升級時造成大家各自的第三方庫版本不一致

 

附:如何使用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上的鏡像。

 

 

 

如何讓自己的開源項目支持CocoaPods?

這里就介紹我寫的一個三方庫HYBMasonryAutoCellHeight讓其支持Cocoapods的步驟。

  • 1、第一步:打開終端並進入到工程的目錄。這里是我所開源的一個HYBMasonryAutoCellHeight開源庫,用於自動計算cell的高度。
  • 2、第二步:創建一個Podspec文件。通過命令pod spec create創建,
  • 3、第三步:編輯該podspec文件:

大家會看到,這自動生成的已經是一個模板了,我們需要做的就是修改相關內容,補充內容就可以滿足我們的需求了。對於更高級的使用,就需要參考官方文檔,一步步地學習使用了。 看看我所提供的第三方庫的podspec文件的配置,去掉注釋后看一看最關鍵的配置:

這一步很關鍵,需要配置的東西比較多。主要是s.source這里必須提供我們的git路徑、指定tag號和s.source_files這里必須指定庫的源代碼文件。通常我們會把我們的庫放到與Demo工程的.xcodeproj同級,比較這里的HYBMasonryAutoCellHeight目錄是與.xcodeproj是同級的父級目錄,然后我們就可以更簡單的設置了。如下圖:

image

然后我們在設置s.source_files時,第一個就設置為HYBMansonryAutoCellHeight,第二個就是設置為所有的.{h,m}類型的文件。對於比較復雜的設置,可以參考AFNetworking中的podspec文件。

如果我們的開源庫依賴系統庫怎么辦?

如果的開源庫依賴其他第三方庫,怎么辦:

  • 4、第四步:這里呢,我們設置的版本號為0.0.1,那么tag號為0.0.1,因此我們還需要新建一個tag,名為0.0.1,然后推到git

第四步可以不用。

接下來,我們需要驗證我們的配置是否正確:

  • 5、當然我們還可以直接使用:pod lib lint來驗證所有,最后一個是設置允許警告:

如果驗證通過,會出現這樣的提示:

如果剛才我們的配置出錯,或者需要修改一些內容,重新再推,則可以先刪除遠程的tag 0.0.1,然后在修改后,重復上面的第四步。下面是刪除遠程tag命令:

6、第五步:在驗證通過后,提交到cocoapods。也就是通過命令pod trunk push庫名.podspec來推送到遠程的cocoapods

如果出現警告,需要修改相關內容以去掉警告。當操作成功后,我們就可以通過pod search命令來搜索我們的庫了。

更詳細地使用,請參考官方文檔

這里有一篇文章,寫得相當不錯:支持pod

如何生成Cocoapods私有庫?

要讓自己的庫變成私有庫,那么我們的代碼也是需要通過git來管理的。 這里假設我們新建了一個工程,名叫BookEffect,然后已經pushgit遠程服務器。

  • 第一步:按照第六節一樣,創建好podspec文件,並將整個工程推送到git服務器這邊。
  • 第二步:這才是引入私有庫的方式。pod 'DemoLib',:git=>"http://xxxxx.git"(替換為真實的git地址)

具體不細說,請參考:生成私有pod

使用Cocoapods打包靜態庫

這里就不細說,不過推薦一篇文章:打包表態庫,寫得很不錯,如果需要,可以參考。

最后,感謝各位認真閱讀本篇文章,感謝您的支持。

參考


免責聲明!

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



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