Cocoapods完整使用教程
由于在微信公眾號發(fā)的圖片,是有版權(quán)保護(hù)的,因此在這里就顯示不出來了,請移步閱讀:
微信公眾號文章:iOSDevShares
前言
對于iOS App的開發(fā),幾乎都采用了Cocoapods來管理第三方庫,那么對于我們開發(fā)人員來說,這是必備技能,必須要掌握如何使用。這篇文章就是介紹如何安裝和使用CocoaPods的。
這篇文章對哪些人群參考價值?
- 對未使用過Cocoapods的人群有參考價值
- 對使用過Cocoapods,但是未深入了解過的用戶有參考價值
- 對有開源精神的,希望將自己的代碼貢獻(xiàn)到Cocoapods的用戶有參考價值
如果您不屬于以上人群,您是可以不閱讀本篇文章的,當(dāng)然閱讀完也會有很大的幫助。
溫馨提示:在篇文章中所使用的Xcode版本為Xcode7.
什么是CocoaPods?
簡單來說,就是專門為iOS工程提供對第三方庫的依賴的管理工具,通過CocoaPods,我們可以單獨(dú)管理每個第三方庫,可以更方便地管理每個第三方庫的版本,而且不需要我們做太多的配置,直接交由提供支持CocoaPods項(xiàng)目的作者來配置了,如此便可直觀、集中和自動化地管理我們項(xiàng)目的第三方庫。
為什么需要使用CocoaPods?
我們也許有過這樣的感受: 每添加一個第三方庫、Framework或者SDK,我們都需要手動添加相關(guān)依賴庫,在工程buildsetting 中配置路徑,在build phases中添加依賴的系統(tǒng)庫。如果所導(dǎo)入的第三方庫還依賴其他第三方庫,我們也需要手動導(dǎo)入且分別添加工程配置。
當(dāng)我們需要更新某個第三方庫的時候,我們又要手動移除該庫,導(dǎo)入新的庫,然后再配置,這是相當(dāng)麻煩且沒有意義的工作。當(dāng)使用CocoaPods管理后,我們只需要修改為某個版本,再執(zhí)行pod update即可。
當(dāng)我們需要去掉某個第三方庫時,我們是怎么做的呢?是不是將該庫移除掉,然后還得把相關(guān)配置也移除掉,這樣工作才干凈。是不是很麻煩呢?當(dāng)我們使用Cocoapods管理后,我們是怎么做的?只需要在Podfile刪除該引入該庫的語句,然后執(zhí)行pod update即可。
當(dāng)我們開始使用CocoaPods管理第三方庫后,我們只需要相當(dāng)少的配置,其它的一切都交由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都有一個默認(rèn)的Ruby版本,推薦我們通過默認(rèn)的Ruby來安裝CocoaPods。 使用下面的命令安裝:
sudo gem install cocoapods
事實(shí)上,這樣安裝未必能安裝成功,因?yàn)槟J(rèn)的cocoapods網(wǎng)址是國外的,需要VPN才能訪問,因此我們可以改一種方式:
- 1、先輸入
gem sources --remove https:///
- 2、等待有反映后,再輸入
gem source -a https://ruby./
- 3、驗(yàn)證是否成功替換:
gem source -l
- 4、最后就可以通過
sudo gem install cocoapods 正常安裝cocoapods 了。
等待安裝完成后,就可以開始使用CocoaPods 了。
注意:source 或者sources 都可以.
如何使用CocoaPods?
要使用CocoaPods ,就需要一個Podfile 文件。我們是如何為所有的工程建立Podfile 的,下面的方式是基本的方式。
cd Desktop/Demos/KVODEMO
touch Podfile
vi Podfile
- 第一步:進(jìn)入到我們所建立的工程的目錄,這里是
KVODEMO
- 第二步:通過
touch 命令新建Podfile
- 第三步:通過
vi Podfile 進(jìn)入編輯Podfile
- 第四步:添加第三方庫,如下圖,我們添加了
AFNetworking 和ObjectiveSugar 庫,其中我們添加的AFNetworking 版本是2.0版本,ObjectiveSugar 版本是0.5.
pod 'AFNetworking', '~> 2.0'
pod 'ObjectiveSugar', '~> 0.5'
- 按下
esc 鍵,然后輸入:wq ,就可以保存了。然后在終端輸入pod install ,就可以安裝第三方庫了。
在安裝完成后,我們不再是打開后綴為.xcodeproj 的工程,而是打開后綴為.xcworkspace 的工作空間了。
關(guān)于Podfile更高級的使用,請參考官方文檔
在Objective-C工程中的使用
在工程中,我們只需要通過引入改文件就可以直接使用了,比如我們引入了第三方庫Masonry (純代碼自動布局),我們在Objective-C 工程中就可以通過import 頭文件即可。
#import <Masonry.h>
注意,如果這么做提示找不到頭文件,那么我們可以嘗試這么引入:
#import "Masonry.h" 或者通過#import "Masonry/Masonry.h"
如果仍然沒有效果,那么需要在工程配置一下.在工程的Build Settings 搜索Search Paths ,然后在User header search paths 中添加$(SRCROOT) 并選擇recursive (也就是遞歸查找)
在Swift工程中的使用
我相信大家在Swift 工程中使用CocoaPods 也遇到了不少問題,尤其是如何import 模塊問題。 當(dāng)初我遇到這種問題時,也在網(wǎng)上搜索了很多的資料,但是都不是我希望的方案。在網(wǎng)上有兩種方式: 通過Swift工程可以橋接Objectice-C 的方式,建立一個Bridge-head.h (名字隨便起),然后進(jìn)入到Build Settings ,在搜索框中輸入bridg ,找到Objective-C Bridging Header ,選項(xiàng),把頭文件的路徑賦值給該選項(xiàng)。如下所示:
image
也就是:工程名/橋接文件名.h。 在剛才所建立的橋接文件中,通過#import "頭文件.h" 就可以了。
雖然是Objective-C 第三方庫,事實(shí)上我們也可以使用Swift 的方式引入的,也就是通過 import 模塊名 的方式來引入。所以對于上面的方式,我是不喜歡的。那么再看看網(wǎng)上的另一種方式。
原文鏈接:http://blog./How-To-Import-3rd-Lib-Into-Swift-Project/
這是通過submodule 的方式來管理的。 創(chuàng)建submodule ,在當(dāng)前項(xiàng)目的同級目錄下執(zhí)行類似這樣的命令,如下:
git submodule add https://github.com/Masonry.git
然后將生成的Masonry.xcodeproj 拖入到工程中。 在xcode 工程的general 中,點(diǎn)擊embeded libraries 中的+號,然后改我們的第三方庫framework ,類似下圖:
image
最后就可以直接在工程中需要使用的地方,通過import 模塊名來使用了。 如果是多人團(tuán)隊(duì)開發(fā),我們就需要共享了,那么其他成員就需要通過下面的命令來安裝:
git submodule update --init --recursive
這是通過遞歸來安裝或者更新submodule 。這是挺麻煩的一件事。然后根據(jù)使用的經(jīng)驗(yàn),我們下載別人的工程下來后,執(zhí)行了上面的命令,安裝好相關(guān)模塊了,運(yùn)行工程經(jīng)常出現(xiàn)報(bào)錯的問題,也就是配置問題。因此,個人很不喜歡這種方式。
事實(shí)上,在Xcode7是不再需要這么做了,對于其他Xcode版本是否需要,未驗(yàn)證。 我們通過cocoapods安裝的第三方庫會自動生成為framework,然后我們只需要在使用的地方直接通過import 模塊名使用即可。但是有時候可能會出現(xiàn)某個第三方庫直接通過import 模塊名時,提示找不到,也就是沒有智能提示。這時候我們可以通過在xcode工程的general中的embeded libraries點(diǎn)擊+,然后導(dǎo)入該framework,就可以正常import了。另外如果導(dǎo)入的第三方庫在運(yùn)行時,報(bào)錯了,類似于:
dyld: Library not loaded: @rpath/ReactiveCocoa.framework/ReactiveCocoa
Referenced from: /private/var/mobile/Containers/Bundle/Application/31ABC86A-C1BD-40DD-A117-D2C8F79A98FE/SwiftGithubClient.app/SwiftGithubClient Reason: image not found
那么我們可以這么解決:
在Build Phases->Link Binary With Libraries ->找到出錯的庫的名稱->修改required 為optional 即可。
如何升級CocoaPods版本?
升級CocoaPods是非常簡單的,只需要一個命令即可。 正常情況下,只需要一個命令就可以升級了:
sudo gem install cocoapods
但是有可能需要更新gem 才能升級cocoapods ,因此我們可能需要這么做:
$ sudo gem update --system // 先更新gem,國內(nèi)需要切換源
$ gem sources --remove https:///
$ gem sources -a http://ruby./
$ gem sources -l
CURRENT SOURCES
http://ruby./
$ sudo gem install cocoapods // 安裝cocoapods
$ pod setup
然后查看版本號:
$ pod --version
0.39.0
如何讓自己的開源項(xiàng)目支持CocoaPods?
這里就介紹我寫的一個三方庫HYBMasonryAutoCellHeight 讓其支持Cocoapods 的步驟。
- 1、第一步:打開終端并進(jìn)入到工程的目錄。這里是我所開源的一個
HYBMasonryAutoCellHeight 開源庫,用于自動計(jì)算cell 的高度。
cd HYBMasonryAutoCellHeight
- 2、第二步:創(chuàng)建一個
Podspec 文件。通過命令pod spec create 創(chuàng)建,
pod spec create HYBMasonryAutoCellHeight
VI HYBMasonryAutoCellHeight.podspec
大家會看到,這自動生成的已經(jīng)是一個模板了,我們需要做的就是修改相關(guān)內(nèi)容,補(bǔ)充內(nèi)容就可以滿足我們的需求了。對于更高級的使用,就需要參考官方文檔,一步步地學(xué)習(xí)使用了。 看看我所提供的第三方庫的podspec 文件的配置,去掉注釋后看一看最關(guān)鍵的配置:
Pod::Spec.new do |s|
s.name = "HYBMasonryAutoCellHeight"
s.version = "0.0.1"
s.summary = "基于Masonry的自動計(jì)算cell的行高的擴(kuò)展庫"
s.homepage = "http://hybios./cocoapods-support/"
s.license = "MIT"
s.author = { "huangyibiao" => "huangyibiao520@163.com" }
s.platform = :ios, "6.0"
s.source = { :git => "https://github.com/632840804、HYBMasonryAutoCellHeight.git", :tag => "0.0.1" }
s.source_files = "HYBMasonryAutoCellHeight", "*.{h,m}"
s.requires_arc = true
s.dependency "Masonry", "~> 0.6"
這一步很關(guān)鍵,需要配置的東西比較多。主要是s.source 這里必須提供我們的git 路徑、指定tag 號和s.source_files 這里必須指定庫的源代碼文件。通常我們會把我們的庫放到與Demo 工程的.xcodeproj 同級,比較這里的HYBMasonryAutoCellHeight 目錄是與.xcodeproj 是同級的父級目錄,然后我們就可以更簡單的設(shè)置了。如下圖:
image
然后我們在設(shè)置s.source_files 時,第一個就設(shè)置為HYBMansonryAutoCellHeight ,第二個就是設(shè)置為所有的.{h,m} 類型的文件。對于比較復(fù)雜的設(shè)置,可以參考AFNetworking 中的podspec 文件。
如果我們的開源庫依賴系統(tǒng)庫怎么辦?
# s.framework = 'SomeFramework'// 去掉#,設(shè)置依賴的系統(tǒng)庫名稱
# s.frameworks = 'SomeFramework', 'AnotherFramework'//設(shè)置多個系統(tǒng)庫名稱
# s.library = 'iconv'// 設(shè)置只依賴一個系統(tǒng)的library
# s.libraries = 'iconv', 'xml2' // 設(shè)置依賴多個系統(tǒng)的library
# s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }// 這里是工程配置,這樣使用者就不需要手動處理,由pod自動處理了。
如果的開源庫依賴其他第三方庫,怎么辦:
s.dependency 'JSONKit', '~> 1.4'//設(shè)置我們的開源庫依賴哪些第三方庫和依賴的版本號。
- 4、第四步:這里呢,我們設(shè)置的版本號為
0.0.1 ,那么tag 號為0.0.1 ,因此我們還需要新建一個tag ,名為0.0.1 ,然后推到git :
$ git commit -m "如果當(dāng)前有變化,先提交到git上,再創(chuàng)建tag"
$ git tag 0.0.1
$ git push --tags
$ git push origin master
第四步可以不用。
接下來,我們需要驗(yàn)證我們的配置是否正確:
- 5、當(dāng)然我們還可以直接使用:
pod lib lint 來驗(yàn)證所有,最后一個是設(shè)置允許警告:
pod lib lint HYBMasonryAutoCellHeight.podspec --allow-warnings
如果驗(yàn)證通過,會出現(xiàn)這樣的提示:
-> HYBMasonryAutoCellHeight (0.0.1)
HYBMasonryAutoCellHeight passed validation.
如果剛才我們的配置出錯,或者需要修改一些內(nèi)容,重新再推,則可以先刪除遠(yuǎn)程的tag 0.0.1 ,然后在修改后,重復(fù)上面的第四步。下面是刪除遠(yuǎn)程tag 命令:
git push origin :refs/tags/0.0.1
6、第五步:在驗(yàn)證通過后,提交到cocoapods 。也就是通過命令pod trunk push 庫名.podspec 來推送到遠(yuǎn)程的cocoapods :
pod trunk push HYBMasonryAutoCellHeight.podspec --allow-warnings
如果出現(xiàn)警告,需要修改相關(guān)內(nèi)容以去掉警告。當(dāng)操作成功后,我們就可以通過pod search 命令來搜索我們的庫了。
$ pod search HYBMasonryAutoCellHeight
-> HYBMasonryAutoCellHeight (0.0.1)
基于Masonry的自動計(jì)算cell的行高的擴(kuò)展庫
pod 'HYBMasonryAutoCellHeight', '~> 0.0.1'
- Homepage: http://hybios./cocoapods-support/
- Source: https://github.com/632840804/HYBMasonryAutoCellHeight.git
- Versions: 0.0.1 [master repo]
更詳細(xì)地使用,請參考官方文檔: https://guides./making/making-a-cocoapod.html
這里有一篇文章,寫得相當(dāng)不錯:http://www./cocoapods%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E5%8F%8A%E9%85%8D%E7%BD%AE%E7%A7%81%E6%9C%89%E5%BA%93/
如何生成Cocoapods私有庫?
要讓自己的庫變成私有庫,那么我們的代碼也是需要通過git 來管理的。 這里假設(shè)我們新建了一個工程,名叫BookEffect ,然后已經(jīng)push 到git 遠(yuǎn)程服務(wù)器。
- 第一步:按照第六節(jié)一樣,創(chuàng)建好
podspec 文件,并將整個工程推送到git 服務(wù)器這邊。
- 第二步:這才是引入私有庫的方式。
pod 'DemoLib',:git=>"http://t" (替換為真實(shí)的git地址)
具體不細(xì)說,請參考:http://www.cnblogs.com/superhappy/p/3468377.html
使用Cocoapods打包靜態(tài)庫
這里就不細(xì)說,不過推薦一篇文章:http://www.cnblogs.com/brycezhang/p/4117180.html
寫得很不錯,如果需要,可以參考。
最后,感謝各位認(rèn)真閱讀本篇文章,感謝您的支持。
參考:https:///?q=blocksk
關(guān)注我
微信公眾號:iOSDevShares 有問必答QQ群:324400294
|