基本介紹
Cocoapods是非常好用的一個(gè)iOS依賴管理工具疾渣,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫(kù)往核,以及將自己的項(xiàng)目中的公共組件交由它去管理约巷。
解決了什么問(wèn)題
沒(méi)有CocoaPods時(shí),我們的工程配置需要
手動(dòng)增加framework决左,library颜启;
手動(dòng)增加編譯參數(shù)偷俭;
手動(dòng)維護(hù)代碼更新;
現(xiàn)在农曲,我們只需要設(shè)置一個(gè)Podfile文件社搅,執(zhí)行 pod install
CocoaPods會(huì)幫我們下載好代碼驻债,設(shè)置好編譯參數(shù)乳规,配置好framework, library合呐。
安裝和使用教程
CocoaPod安裝和使用教程
CocoaPods支持私有Spec倉(cāng)庫(kù)
整體先說(shuō)明一下創(chuàng)建一個(gè)私有的podspec包括如下那么幾個(gè)步驟:
創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo暮的。
創(chuàng)建Pod的所需要的項(xiàng)目工程文件,并且有可訪問(wèn)的項(xiàng)目版本控制地址淌实。
創(chuàng)建Pod所對(duì)應(yīng)的podspec文件冻辩。
本地測(cè)試配置好的podspec文件是否可用。
向私有的Spec Repo中提交podspec拆祈。
更新維護(hù)podspec恨闪。
創(chuàng)建私有Spec Repo
先來(lái)說(shuō)第一步,什么是Spec Repo放坏?他是所有的Pods的一個(gè)索引咙咽,就是一個(gè)容器,所有公開(kāi)的Pods都在這個(gè)里面淤年,他實(shí)際是一個(gè)Git倉(cāng)庫(kù)remote端在GitHub上钧敞,但是當(dāng)你使用了Cocoapods后他會(huì)被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了麸粮。這個(gè)master目錄的結(jié)構(gòu)是這個(gè)樣子的
.├── Specs └── [SPEC_NAME] └── [VERSION] └── [SPEC_NAME].podspec
.├──Specs └──[SPEC_NAME] └──[VERSION] └──[SPEC_NAME].podspec
因此我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo溉苛。所以創(chuàng)建一個(gè)Git倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)你可以創(chuàng)建私有的也可以創(chuàng)建公開(kāi)的弄诲,不過(guò)既然私有的Spec Repo愚战,還是創(chuàng)建私有的倉(cāng)庫(kù)吧,需要注意的就是如果項(xiàng)目中有其他同事共同開(kāi)發(fā)的話齐遵,你還要給他這個(gè)Git倉(cāng)庫(kù)的權(quán)限寂玲。
創(chuàng)建完成之后在Terminal中執(zhí)行如下命令
pod repo add [Private Repo Name] [GitHub HTTPS clone URL] $ pod repo add WTSpecs https://coding.net/wtlucky/WTSpecs.git
pod repo add [Private Repo Name] [GitHub HTTPS clone URL]$podrepoaddWTSpecshttps://coding.net/wtlucky/WTSpecs.git
此時(shí)如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到WTSpecs這個(gè)目錄了。至此第一步創(chuàng)建私有Spec Repo完成洛搀。
創(chuàng)建Pod所對(duì)應(yīng)的podspec文件
新建 podspec敢茁,填寫需要上傳的文件
該命令執(zhí)行之后,CocoaPods 會(huì)生成一個(gè)名為your_pod_spec_name.podspec的文件留美,然后我們修改其中的相關(guān)內(nèi)容即可彰檬。pod spec create your_pod_spec_name
該命令執(zhí)行之后伸刃,CocoaPods會(huì)生成一個(gè)名為your_pod_spec_name.podspec的文件,然后我們修改其中的相關(guān)內(nèi)容即可逢倍。 pod speccreateyour_pod_spec_name
修改podspec文件(字面意思很容易看懂捧颅,描述了打包的一些參數(shù)信息)
Pod::Spec.new do |s| s.name = "MyModule" s.version = "0.0.1" s.summary = "li jian fei App 5.0+ version MyModule." s.description = <<-DESC 嚕啦啦德瑪西亞,吧啦吧啦 這里配置了打包的一些參數(shù)信息 一般情況下無(wú)需更改 DESC s.homepage = "http://lijianfei.sinaapp.com" s.license = "Copyright 2015 lijianfei.sinaapp.com" s.author = { "ios_lijianfei" => "leejeffery@foxmail.com" } s.platform = :ios, "7.0" s.source = { :git => "https://github.com/lijianfei1023/Quickblox-IM.git", :tag => s.version.to_s } s.resource = "MyModule/MyModule-Info.plist" s.resources = "MyModule/Image/.png" s.ios.deployment_target = '7.0' s.dependency 'AFNetworking' s.source_files = "MyModule//.{h,m}", "$(PODS_ROOT)//.h" s.exclude_files = "MyModule/main.m" s.public_header_files = "MyModule//.h", "$(PODS_ROOT)//.h" s.prefix_header_file = "MyModule/MyModule-Prefix.pch" s.frameworks = "QuartzCore","CoreGraphics", "Foundation", "UIKit", "AdSupport","objc" s.library = "sqlite3","c++", "z" s.requires_arc = trueend
Pod::Spec.newdo|s|s.name ="MyModule"s.version ="0.0.1"s.summary ="li jian fei App 5.0+ version MyModule."s.description =<<-DESC 嚕啦啦德瑪西亞较雕,吧啦吧啦 這里配置了打包的一些參數(shù)信息 一般情況下無(wú)需更改 DESCs.homepage = "http://lijianfei.sinaapp.com"s.license = "Copyright 2015 lijianfei.sinaapp.com"s.author = { "ios_lijianfei" => "leejeffery@foxmail.com" }s.platform = :ios, "7.0"s.source = { :git => "https://github.com/lijianfei1023/Quickblox-IM.git", :tag =>s.version.to_s}s.resource ="MyModule/MyModule-Info.plist"s.resources="MyModule/Image/.png"s.ios.deployment_target ='7.0's.dependency'AFNetworking's.source_files ="MyModule//.{h,m}","$(PODS_ROOT)//.h"s.exclude_files="MyModule/main.m"s.public_header_files="MyModule//.h","$(PODS_ROOT)//.h"s.prefix_header_file="MyModule/MyModule-Prefix.pch"s.frameworks="QuartzCore","CoreGraphics","Foundation","UIKit","AdSupport","objc"s.library="sqlite3","c++","z"s.requires_arc=trueend
本地驗(yàn)證 podspec 是否有效
pod spec lint MyModule.podspec --verbose --sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries
pod speclintMyModule.podspec--verbose--sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries
以下為忽略警告的命令
pod spec lint MyModule.podspec --verbose --sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries --allow-warnings
pod speclintMyModule.podspec--verbose--sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries --allow-warnings
Cocoapods的高級(jí)用法
指定源
CocoaPods支持私有 Spec 倉(cāng)庫(kù)的碉哑,我們可以建立自己的源,也可以使用非官方的源亮蒋,只要是符合規(guī)定的都可以指定扣典。
source 'https://github.com/artsy/Specs.git' source 'https://github.com/CocoaPods/Specs.git'
source'https://github.com/artsy/Specs.git' source'https://github.com/CocoaPods/Specs.git'
抑制警告
inhibit_warnings參數(shù)能夠有效的抑制CocoaPods引入的第三方代碼庫(kù)產(chǎn)生的warning。
全部指定
inhibit_all_warnings!
inhibit_all_warnings!
針對(duì)指定
pod 'ReactiveCocoa', '~> 2.4', :inhibit_warnings => true
pod'ReactiveCocoa','~> 2.4',:inhibit_warnings=>true
使用git的HEAD指向的分支
pod 'ISO8601DateFormatter', :head
pod'ISO8601DateFormatter',:head
使用 master 分支
pod 'ARAnalytics/Mixpanel', :git => 'https://github.com/orta/ARAnalytics.git'
pod'ARAnalytics/Mixpanel',:git=>'https://github.com/orta/ARAnalytics.git'
指定branch
pod 'Reachability', :git => 'https://github.com/ashfurrow/Reachability.git', :branch => 'frameworks'
pod'Reachability',:git=>'https://github.com/ashfurrow/Reachability.git',:branch=>'frameworks'
指定tag
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
pod'AFNetworking',:git=>'https://github.com/gowalla/AFNetworking.git',:tag=>'0.7.0'
指定commit
pod 'ARTiledImageView', :git => 'https://github.com/dblockARTiledImageView', :commit => '1a31b864d1d56b1aaed0816c10bb55cf2e078bb8'
pod'ARTiledImageView',:git=>'https://github.com/dblockARTiledImageView',:commit=>'1a31b864d1d56b1aaed0816c10bb55cf2e078bb8'
使用子庫(kù)
單個(gè)子庫(kù)
pod 'QueryKit/Attribute'
pod'QueryKit/Attribute'
多個(gè)子庫(kù)
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
pod'QueryKit',:subspecs=>['Attribute','QuerySet']
使用本地代碼
通過(guò):path可以指定本地代碼慎玖,不過(guò)需要確保目錄包含podspec文件贮尖。
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
pod'AFNetworking',:path=>'~/Documents/AFNetworking'
指定target的依賴庫(kù)
target :ZipApp do pod 'SSZipArchive'end
target:ZipAppdo pod'SSZipArchive'end
排除taget
target 'Artsy Tests', :exclusive => true do pod 'FBSnapshotTestCase', '1.4'end
target'Artsy Tests',:exclusive=>truedo pod'FBSnapshotTestCase','1.4'end
指定xcodeproj
默認(rèn)會(huì)使用Podfile文件同級(jí)目錄下第一個(gè)xcodeproj,但也可以指定
xcodeproj 'MyProject'target :test do # This Pods library links with a target in another project. xcodeproj 'TestProject'end
xcodeproj'MyProject' target:testdo # This Pods library links with a target in another project. xcodeproj'TestProject'end
指定連接的target
如果不顯式指定連接的target趁怔,Pods會(huì)默認(rèn)連接project的第一個(gè)target湿硝。如果需要,可以使用link_with指定連接一個(gè)或多個(gè)target
link_with 'MyApp', 'MyOtherApp'
link_with'MyApp','MyOtherApp'
指定環(huán)境
如下只會(huì)在Debug環(huán)境下面加入PonyDebugger庫(kù)到工程润努。
pod 'PonyDebugger', :configuration => ['Debug']
pod'PonyDebugger',:configuration=>['Debug']
指定target的配置文件
xcodeproj 'TestProject', 'Mac App Store' => :release, 'Test' => :debug
xcodeproj'TestProject','Mac App Store'=>:release,'Test'=>:debug
使用Dynamic Frameworks代替Static Libraries
通過(guò)標(biāo)志use_frameworks!就可知開(kāi)啟這個(gè)功能关斜。如果需要使用Swift的庫(kù),就必須加上這個(gè)標(biāo)志了铺浇。
加快pod install/update 速度
使用CocoaPods來(lái)添加第三方類庫(kù)痢畜,無(wú)論是執(zhí)行pod install還是pod updat很多時(shí)候都卡在了Analyzing dependencies不動(dòng),這是更新本地的pod spec所以文件導(dǎo)致的随抠。通過(guò)–no-repo-update標(biāo)志可以不更新本地pod spec索引裁着。當(dāng)然首次install不應(yīng)該添加這個(gè)標(biāo)志,后續(xù)修改Podfile的時(shí)候可以適當(dāng)使用拱她,加快pod速度二驰。
pod install --no-repo-updatepod update --no-repo-update
pod install--no-repo-updatepod update--no-repo-update
輸出詳細(xì)日志
pod update --verbose
pod update--verbose
XCode的Cocoapods插件
cocoapods-xcode-plugin 是一個(gè)XCode的插件,讓你方便操作Cocoapods秉沼。