ios cocopods 安裝使用及高級(jí)教程

CocoaPods簡(jiǎn)介

每種語(yǔ)言發(fā)展到一個(gè)階段逊拍,就會(huì)出現(xiàn)相應(yīng)的依賴管理工具,例如Java語(yǔ)言的Maven尺借,nodejs的npm。隨著iOS開發(fā)者的增多精拟,業(yè)界也出現(xiàn)了為iOS程序提供依賴管理的工具燎斩,它的名字叫做:CocoaPods?官網(wǎng):?http://cocoapods.org/

一、安裝

1.更新gem

如果終端gem版本太老可能會(huì)有問題蜂绎,先更新gem:(現(xiàn)在大部分新機(jī)都不會(huì)有這個(gè)問題)

sudo gem update --system

2.換源

gem默認(rèn)的源是外國(guó)的https://rubygems.org/栅表,國(guó)內(nèi)網(wǎng)速太慢,換成淘寶源

gem sources -l???????????? ? ? ? ? ? ? // 查看當(dāng)前源

gem sources --remove https://rubygems.org/ ?? // 刪除原有的rubygems源

gem sources --add?https://gems.ruby-china.com

gem sources -l?// 再次查看當(dāng)前源有沒有替換成功


3.選中xcode

如果安裝有多個(gè)版本xcode的朋友师枣,需要切換一個(gè)默認(rèn)的版本

sudo xcode-select --switch /Applications/Xcode.app

4.安裝cocoapods

mac系統(tǒng)版本如果是10.11以前的怪瓶,使用一下命令安裝:

sudo gem install cocoapods

如果是10.11以后由于cocoapods的命令路徑改變了,變成:

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

5.初始化cocopods

安裝好cocopods以后,需要下載更新本地的依賴庫(kù)tree践美,每天很多人都會(huì)更新或創(chuàng)建好的Pods庫(kù)洗贰,需要下載或更新到本地,由于依賴庫(kù)tree數(shù)量太多拨脉,可能會(huì)很慢哆姻,耐心等待,中間可能出現(xiàn)各種莫名其妙的錯(cuò)誤玫膀,很大一部分是網(wǎng)絡(luò)原因矛缨,請(qǐng)重新執(zhí)行命令

pod setup

二、項(xiàng)目集成cocopods

1.進(jìn)入到項(xiàng)目的根目錄,創(chuàng)建Podfile文件,

cd? ***/IOSHelloWorldProject??????? // 進(jìn)入項(xiàng)目根目錄

touch Podfile????????????????????????????? // 創(chuàng)建Podfile文件

2.用記事本或xcode打開Podfile文件箕昭,添加項(xiàng)目所需要的依賴庫(kù)灵妨,例如:

platform :ios, '8.0'

inhibit_all_warnings!

pod 'AFNetworking'

pod 'SDWebImage'

這樣一個(gè)AFNetworking、SDWebImage的依賴庫(kù)就添加完成了

3.安裝依賴庫(kù),返回終端執(zhí)行:

pod install --no-repo-update

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

--verbose 查看安裝細(xì)節(jié)

4.安裝完成以后我們不在打開后綴為.xcodeproj的工程落竹,而是打開后綴為.xcworkspace的工作空間泌霍。

此時(shí)一個(gè)簡(jiǎn)單的cocopods工程就完成了,相信可以滿足大部分小朋友的需求了述召,對(duì)于項(xiàng)目比較復(fù)雜朱转、架構(gòu)設(shè)計(jì)要求高、個(gè)性化追求高的小朋友請(qǐng)接著看cocopods的高級(jí)教程

5.cocopods升級(jí)

pod --version?? //?查看cocopods當(dāng)前的版本

gem?update cocoapod //?升級(jí)cocopods命令

6.cocopods卸載

電腦重裝或者切換到某個(gè)賬號(hào)后cocopods使用有問題或者cocopods出現(xiàn)解決不了的問題而必須卸載重裝积暖,下面就是卸載了:

which pod // 查看pod的安裝路徑

gem list --local | grep cocoapods?? // 查看當(dāng)前安裝了哪些有關(guān)cocopods的東西

xiaomingdeMacBook-Pro:OCServiceDemo xiaoming$ gem list --local | grep cocoapods

cocoapods (1.1.1)

cocoapods-core (1.1.1)

cocoapods-deintegrate (1.0.1,1.0.0.beta.1)

cocoapods-downloader (1.1.2,1.1.1,1.0.0.beta.3,0.9.3)

cocoapods-plugins (1.0.0,1.0.0.beta.1,0.4.2)

cocoapods-search (1.0.0,1.0.0.beta.2,0.1.0)

cocoapods-stats (1.0.0,1.0.0.beta.4,0.6.2)

cocoapods-trunk (1.1.1,1.0.0,1.0.0.beta.3,0.6.4)

cocoapods-try(1.1.0,1.0.0.beta.3,0.5.1)


接下來一個(gè)一個(gè)卸載:

sudo gem uninstall cocoapods-core

sudo gem uninstall cocoapods-core

如果需要卸載那個(gè)版本藤为,如下:

sudo gem uninstall cocoapods -v 1.1.1 //后面的版本號(hào)要和上面列表中的版本號(hào)對(duì)應(yīng)


M1芯片:

sudo arch -x86_64 gem install ffi

arch -x86_64 pod install

二、國(guó)內(nèi)鏡像下載慢的解決方案:

1.切換鏡像源

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

- gem sources -a https://gems.ruby-china.com

?2.使用國(guó)內(nèi)站點(diǎn)開放的鏡像源夺刑,如gitee:

pod repo remove master

pod repo add master https://gitee.com/mirrors/CocoaPods-Specs.git

?3.Podfile文件增加指向鏡像源:

? source 'https://gitee.com/mirrors/CocoaPods-Specs.git'

三缅疟、cocopods高級(jí)教程

1.類似pod 'AFNetworking'依賴庫(kù)名如何得來,使用pod的搜索命令:

pod search AFNetworking

xiaomingMacBook-Pro:OCServiceDemo xiaoming$ pod search AFNetworking

-> AFNetworking (3.1.0)

A delightful iOS and OS X networking framework.

pod 'AFNetworking', '~> 3.1.0'

- Homepage: https://github.com/AFNetworking/AFNetworking

- Source:?? https://github.com/AFNetworking/AFNetworking.git

- Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3, 3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,

2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1,

1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1

[master repo]

- Subspecs:

- AFNetworking/Serialization (3.1.0)

- AFNetworking/Security (3.1.0)

- AFNetworking/Reachability (3.1.0)

- AFNetworking/NSURLSession (3.1.0)

- AFNetworking/UIKit (3.1.0)

-> AFNetworking+AutoRetry (0.0.5)? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? Auto Retries for AFNetworking requests

? pod 'AFNetworking+AutoRetry','~> 0.0.5'- Homepage: https://github.com/shaioz/AFNetworking-AutoRetry- Source:? https://github.com/shaioz/AFNetworking-AutoRetry.git- Versions:0.0.5,0.0.4,0.0.3,0.0.2,0.0.1 [master repo]-> AFNetworking+Ext (1.2.1)

? AFNetworking的封裝, 并提供一個(gè) UIImageView+DYLoading? cacheinfileSystem+memory

? pod 'AFNetworking+Ext','~> 1.2.1'- Homepage: https://github.com/junhaiyang/AFNetworkingExt- Source:? https://github.com/junhaiyang/AFNetworkingExt.git- Versions:1.2.1,1.2,1.1,1.0,0.5,0.4,0.3 [master repo]

? - Subspecs:

? ? - AFNetworking+Ext/Base (1.2.1)

? ? - AFNetworking+Ext/AFCustomRequestOperation (1.2.1)

? ? - AFNetworking+Ext/AFDownloadRequestOperation (1.2.1)

? ? - AFNetworking+Ext/AFTextResponseSerializer (1.2.1)

? ? - AFNetworking+Ext/example (1.2.1)

? ? - AFNetworking+Ext/UIKit (1.2.1)

? ? - AFNetworking+Ext/UIKit/UIImageView+DYLoading (1.2.1)

解釋下內(nèi)容:

-> AFNetworking (3.1.0)??????? // 依賴庫(kù)名遍愿、最新版本號(hào)

A delightful iOS and OS X networking framework.??? // 簡(jiǎn)介描述

pod 'AFNetworking', '~> 3.1.0'???????????????????????????? // 在Podfile文件里引用這個(gè)依賴庫(kù)的語(yǔ)法存淫,大部分情況下拷貝這行到Podfile文件即可

- Homepage: https://github.com/AFNetworking/AFNetworking?? // 依賴庫(kù)的主頁(yè),主頁(yè)里包含介紹沼填、說明桅咆、源碼等一系列文件

- Source:?? https://github.com/AFNetworking/AFNetworking.git?? // 依賴庫(kù)的git倉(cāng)庫(kù)路徑

- Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3, 3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,

2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1,

1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1??? // 依賴庫(kù)的各個(gè)版本

[master repo]

- Subspecs:?? // 這里的是依賴庫(kù)的各個(gè)子模塊,一般不用關(guān)心倾哺,研究依賴庫(kù)源碼框架的可以看看

- AFNetworking/Serialization (3.1.0)

- AFNetworking/Security (3.1.0)

- AFNetworking/Reachability (3.1.0)

- AFNetworking/NSURLSession (3.1.0)

- AFNetworking/UIKit (3.1.0)

在Podfile文件使用如下語(yǔ)法引用依賴庫(kù):

pod 'AFNetworking'//不顯式指定依賴庫(kù)版本轧邪,表示每次都獲取最新版本pod 'AFNetworking', '2.0'//只使用2.0版本pod 'AFNetworking', '>2.0'//使用高于2.0的版本pod 'AFNetworking', '>=2.0'//使用大于或等于2.0的版本pod 'AFNetworking', '<2.0'//使用小于2.0的版本pod 'AFNetworking', '<=2.0'//使用小于或等于2.0的版本pod 'AFNetworking', '~>0.1.2'//使用大于等于0.1.2但小于0.2的版本,不包含0.1.2pod 'AFNetworking', '~>0.1'//使用大于等于0.1但小于1.0的版本pod 'AFNetworking', '~>0'//高于0的版本羞海,寫這個(gè)限制和什么都不寫是一個(gè)效果忌愚,都表示使用最新版本

?2.多個(gè)target使用相同Pod依賴庫(kù)

如果為IOSHelloWorldProject的targetOne和targetTwo都需要引用Reachability、SBJson却邓、AFNetworking三個(gè)Pods依賴庫(kù)硕糊,可以使用link_with關(guān)鍵字來實(shí)現(xiàn),將Podfile寫成如下方式:

link_with 'targetOne', 'targetTwo'? ?

pod'Reachability','~>3.0.0'pod'SBJson','~>4.0.0'? ?

pod 'AFNetworking','~>2.0'

新的語(yǔ)法是使用abstract_target

# There are no targets called"Shows"in any Xcode projects

abstract_target 'Shows'do? pod 'ShowsKit'? # Has its own copy of ShowsKit + ShowWebAuth

target 'ShowsiOS'do? ? pod 'ShowWebAuth'? end

?# Has its own copy of ShowsKit + ShowTVAuth

target 'ShowsTV'do? ? pod 'ShowTVAuth'? end

end

如果使用隱式abstract_target語(yǔ)法必須寫在Podfile文件頂部:

pod'ShowsKit'# Has its own copy of ShowsKit + ShowWebAuth

target 'ShowsiOS'do? pod 'ShowWebAuth'end

# Has its own copy of ShowsKit + ShowTVAuth

target 'ShowsTV'do? pod 'ShowTVAuth'end


3.不同target引用不同Pod依賴

如果為IOSHelloWorldProject的targetOne引用Reachability腊徙,而targetTow引用SBJson简十、AFNetworking,將Podfile寫成如下方式:

target :'targetOne' do

pod'Reachability','~>3.0.0'

end? ?

target :'targetTow' do

pod 'AFNetworking','~>2.0'

pod'SBJson','~>4.0.0'

end

do/end作為開始和結(jié)束標(biāo)識(shí)符

4.其他常用pod引用依賴庫(kù)語(yǔ)法

pod'Alamofire',:path=>'~/Documents/Alamofire'? ? ? // 在~/Documents/Alamofire路徑下存在spec的項(xiàng)目(spec后期介紹)pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git'? // git上的master分支pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:tag=>'3.1.1'? // git上tag為3.1.1pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:commit=>'0f506b1c45'// git上commit為0f506b1c45pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:branch=>'dev'? ? ? // git上的開發(fā)分支

更多Podfile語(yǔ)法請(qǐng)參考官網(wǎng):https://guides.cocoapods.org/syntax/podfile.html#podfile

5.關(guān)于Podfile.lock文件

在使用CocoaPods撬腾,執(zhí)行完pod install之后螟蝙,會(huì)生成一個(gè)Podfile.lock文件。這個(gè)文件看起來跟我們關(guān)系不大民傻,實(shí)際上絕對(duì)不應(yīng)該忽略它胰默。

該文件用于保存已經(jīng)安裝的Pods依賴庫(kù)的版本

Podfile.lock文件最大得用處在于多人開發(fā)场斑。當(dāng)團(tuán)隊(duì)中的某個(gè)人執(zhí)行完pod install命令后,生成的Podfile.lock文件就記錄下了當(dāng)時(shí)最新Pods依賴庫(kù)的版本牵署,這時(shí)團(tuán)隊(duì)中的其它人check下來這份包含Podfile.lock文件的工程以后漏隐,再去執(zhí)行pod install命令時(shí),獲取下來的Pods依賴庫(kù)的版本就和最開始用戶獲取到的版本一致奴迅。如果沒有Podfile.lock文件青责,后續(xù)所有用戶執(zhí)行pod install命令都會(huì)獲取最新版本的SBJson,這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫(kù)版本不一致取具,這對(duì)團(tuán)隊(duì)協(xié)作來說絕對(duì)是個(gè)災(zāi)難脖隶!

在這種情況下,如果團(tuán)隊(duì)想使用當(dāng)前最新版本的SBJson依賴庫(kù)者填,有兩種方案:

更改Podfile浩村,使其指向最新版本的SBJson依賴庫(kù);

執(zhí)行pod update命令占哟;

鑒于Podfile.lock文件對(duì)團(tuán)隊(duì)協(xié)作如此重要,我們需要將它添加到版本管理中

5.查看本地依賴庫(kù)的tree文件

cocopods的tree文件默認(rèn)是隱藏的酿矢,先把Mac隱藏文件夾顯示出來榨乎,

Mac隱藏和顯示的命令如下:

隱藏:defaults?write?com.apple.finder?AppleShowAllFiles?-bool?true

顯示:defaults?write?com.apple.finder?AppleShowAllFiles?-bool?false

然后退出終端,重啟Finder

cocopods的tree文件的默認(rèn)路勁是

~/.cocoapods/repos/master/Specs? // 當(dāng)前用戶的.cocoapods/repos/master/Specs目錄下

直接使用命令如下命令打開路勁即可:

open ~/.cocoapods/repos/master/Specs

常見問題:

1.如果pod install 出現(xiàn)報(bào)錯(cuò):

[!] Unable to find host target(s) for StaticLib. Please add the host targets for the embedded targets to the Podfile.

Certain kinds of targets require a host target. A host target is a "parent" target which embeds a "child" target. These are example types of targets that need a host target:

- Framework

- App Extension

- Watch OS 1 Extension

- Messages Extension (except when used with a Messages Application)

解決方案:

降低一個(gè)版本試下:

pod _1.1.1_ install

Xcode 9以后如果使用了cocopods后icon無(wú)法顯示瘫筐,Podfile文件底部添加:

post_install?do?|installer|

copy_pods_resources_path =?"Pods/Target Support Files/Pods-FuelCardApp/Pods-FuelCardApp-resources.sh"

string_to_replace =?'--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"'

assets_compile_with_app_icon_arguments =?'--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"'

text = File.read(copy_pods_resources_path)

new_contents = text.gsub(string_to_replace, assets_compile_with_app_icon_arguments)

File.open(copy_pods_resources_path,?"w") {|file| file.puts new_contents }

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜜暑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子策肝,更是在濱河造成了極大的恐慌肛捍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件之众,死亡現(xiàn)場(chǎng)離奇詭異拙毫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棺禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門缀蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膘婶,你說我怎么就攤上這事缺前。” “怎么了悬襟?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵衅码,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我脊岳,道長(zhǎng)逝段,這世上最難降的妖魔是什么垛玻? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮惹恃,結(jié)果婚禮上夭谤,老公的妹妹穿的比我還像新娘。我一直安慰自己巫糙,他們只是感情好朗儒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著参淹,像睡著了一般醉锄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浙值,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天恳不,我揣著相機(jī)與錄音,去河邊找鬼开呐。 笑死烟勋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筐付。 我是一名探鬼主播卵惦,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瓦戚!你這毒婦竟也來了沮尿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤较解,失蹤者是張志新(化名)和其女友劉穎畜疾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體印衔,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啡捶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了当编。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片届慈。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忿偷,靈堂內(nèi)的尸體忽然破棺而出金顿,到底是詐尸還是另有隱情,我是刑警寧澤鲤桥,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布揍拆,位于F島的核電站,受9級(jí)特大地震影響茶凳,放射性物質(zhì)發(fā)生泄漏嫂拴。R本人自食惡果不足惜播揪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筒狠。 院中可真熱鬧东涡,春花似錦谅年、人聲如沸抚岗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灶伊。三九已至疆前,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聘萨,已是汗流浹背竹椒。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留米辐,地道東北人胸完。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像翘贮,于是被迫代替她去往敵國(guó)和親舶吗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容