文章目錄
簡(jiǎn)書(shū)的目錄跳轉(zhuǎn)還在研究中...
- 什么是CocoaPods壹瘟?
- CocoaPods的核心組件
- podspec文件鳄逾?
- podspec是如何下載資源文件雕凹?
- 如何創(chuàng)建podspec文件政冻?
- podspec如何編輯线欲?
- 如何做文件夾層級(jí)李丰?
- 如何關(guān)聯(lián)資源文件?
- 編寫(xiě)swift版本庫(kù)注意事項(xiàng)
- podspec準(zhǔn)備就緒,如何發(fā)布出去呢舟舒?
- 發(fā)布公有庫(kù)
- 發(fā)布私有庫(kù)
- 發(fā)布完成去使用
- 發(fā)布完搜索不到怎么辦嗜憔?
- 搜索到?jīng)]法下載如何是好吉捶?
- 常見(jiàn)發(fā)布問(wèn)題
什么是CocoaPods?
CocoaPods 是開(kāi)發(fā) OS X 和 iOS 應(yīng)用程序的一個(gè)第三方庫(kù)的依賴(lài)管理工具谣旁。利用 CocoaPods床佳,可以定義自己的依賴(lài)關(guān)系 (稱(chēng)作pods)滋早,并且隨著時(shí)間的變化砌们,以及在整個(gè)開(kāi)發(fā)環(huán)境中對(duì)第三方庫(kù)的版本管理非常方便。
CocoaPods 背后的理念主要體現(xiàn)在兩個(gè)方面昔头。首先揭斧,在工程中引入第三方代碼會(huì)涉及到許多內(nèi)容峻堰。針對(duì) Objective-C 初級(jí)開(kāi)發(fā)者來(lái)說(shuō)捐名,工程文件的配置會(huì)讓人很沮喪。在配置 build phases 和 linker flags 過(guò)程中成艘,會(huì)引起許多人為因素的錯(cuò)誤。CocoaPods 簡(jiǎn)化了這一切断箫,它能夠自動(dòng)配置編譯選項(xiàng)瑰枫。
其次丹莲,通過(guò) CocoaPods甥材,可以很方便的查找到新的第三方庫(kù)洲赵。當(dāng)然,這并不是說(shuō)你可以簡(jiǎn)單的將別人提供的庫(kù)拿來(lái)拼湊成一個(gè)應(yīng)用程序芝发。它的真正作用是讓你能夠找到真正好用的庫(kù)辅鲸,以此來(lái)縮短我們的開(kāi)發(fā)周期和提升軟件的質(zhì)量腹殿。
CocoaPods是用 Ruby 寫(xiě)的锣尉,并由若干個(gè) Ruby 包 (gems) 構(gòu)成的。在解析整合過(guò)程中坟奥,最重要的幾個(gè) gems 分別是:CocoaPods/CocoaPods,CocoaPods/Core, 和CocoaPods/Xcodeproj(是的爱谁,CocoaPods 是一個(gè)依賴(lài)管理工具 -- 利用依賴(lài)管理進(jìn)行構(gòu)建的旺嬉!)邪媳。
編者注CocoaPods 是一個(gè) objc 的依賴(lài)管理工具,而其本身是利用 ruby 的依賴(lài)管理 gem 進(jìn)行構(gòu)建的迅涮。
CocoaPods的核心組件
組件 | 說(shuō)明 |
---|---|
CocoaPods/CocoaPod | 這是是一個(gè)面向用戶(hù)的組件叮姑,每當(dāng)執(zhí)行一個(gè)pod命令時(shí)传透,這個(gè)組件都將被激活。該組件包括了所有使用 CocoaPods 涉及到的功能群嗤,并且還能通過(guò)調(diào)用所有其它的 gems 來(lái)執(zhí)行任務(wù) |
CocoaPods/Core | Core 組件提供支持與 CocoaPods 相關(guān)文件的處理狂秘,文件主要是 Podfile 和 podspecs |
Podfile | Podfile 是一個(gè)文件躯肌,用于定義項(xiàng)目所需要使用的第三方庫(kù)清女。該文件支持高度定制校仑,你可以根據(jù)個(gè)人喜好對(duì)其做出定制传惠。更多相關(guān)信息卦方,請(qǐng)查閱Podfile 指南 |
CocoaPods/Xcodeproj | 這個(gè) gem 組件負(fù)責(zé)所有工程文件的整合盼砍。它能夠?qū)?chuàng)建并修改.xcodeproj和.xcworkspace文件。它也可以作為單獨(dú)的一個(gè) gem 包使用睬捶。如果你想要寫(xiě)一個(gè)腳本來(lái)方便的修改工程文件擒贸,那么可以使用這個(gè) gem |
Manifest.lock | 這是每次運(yùn)行pod install命令時(shí)創(chuàng)建的Podfile.lock文件的副本。如果你遇見(jiàn)過(guò)這樣的錯(cuò)誤沙盒文件與 Podfile.lock 文件不同步 (The sandbox is not in sync with the Podfile.lock)徽惋,這是因?yàn)?Manifest.lock 文件和Podfile.lock文件不一致所引起险绘。由于Pods所在的目錄并不總在版本控制之下宦棺,這樣可以保證開(kāi)發(fā)者運(yùn)行 app 之前都能更新他們的 pods黔帕,否則 app 可能會(huì) crash蹬屹,或者在一些不太明顯的地方編譯失敗 |
xcproj | 如果你已經(jīng)依照我們的建議在系統(tǒng)上安裝了xcproj,它會(huì)對(duì)Pods.xcodeproj文件執(zhí)行一下touch以將其轉(zhuǎn)換成為舊的 ASCII plist 格式的文件贩耐。為什么要這么做呢潮太?雖然在很久以前就不被其它軟件支持了铡买,但是 Xcode 仍然依賴(lài)于這種格式霎箍。如果沒(méi)有 xcproj漂坏,你的Pods.xcodeproj文件將會(huì)以 XML 格式的 plist 文件存儲(chǔ),當(dāng)你用 Xcode 打開(kāi)它時(shí)谷徙,它會(huì)被改寫(xiě)完慧,并造成大量的文件改動(dòng) |
Podfile.lock | 這是 CocoaPods 創(chuàng)建的最重要的文件之一屈尼。它記錄了需要被安裝的 pod 的每個(gè)已安裝的版本。如果你想知道已安裝的 pod 是哪個(gè)版本指蚜,可以查看這個(gè)文件。推薦將 Podfile.lock 文件加入到版本控制中贡羔,這有助于整個(gè)團(tuán)隊(duì)的一致性 |
Podspec | .podspec也是一個(gè)文件,該文件描述了一個(gè)庫(kù)是怎樣被添加到工程中的。它支持的功能有:列出源文件、framework锨苏、編譯選項(xiàng)和某個(gè)庫(kù)所需要的依賴(lài)等 |
關(guān)于podfile指定版本的說(shuō)明
版本 | 說(shuō)明 |
---|---|
pod ‘Alamofire’ | 不指定依賴(lài)庫(kù)版本伞租,表示每次都獲取最新版本 |
pod ‘Alamofire’, ‘2.0’ | 只使用2.0版本 |
pod ‘Alamofire’, ‘> 2.0’ | 使用高于2.0的版本 |
pod ‘Alamofire’, ‘>= 2.0’ | 使用大于或等于2.0的版本 |
pod ‘Alamofire’, ‘< 2.0’ | 使用小于2.0的版本 |
pod ‘Alamofire’, ‘<= 2.0’ | 使用小于或等于2.0的版本 |
pod ‘Alamofire’, ‘~> 0.1.2’ | 使用大于等于0.1.2但小于0.2的版本 |
pod ‘Alamofire’, ‘~>0.1’ | 使用大于等于0.1但小于1.0的版本 |
pod ‘Alamofire’, ‘~>0’ | 高于0的版本葵诈,等同于表示每次都獲取最新版本 |
podspec文件
一. 什么是podspec文件作喘?
- podspec中spec的全稱(chēng)是“Specification”晕城,說(shuō)明書(shū)的意思广辰。顧名思義择吊,這是用來(lái)描述這個(gè)庫(kù)說(shuō)明信息的文件槽奕。
- podspec是cocoaPods的一種文件格式粤攒,有一套自己的語(yǔ)法,我們可以到cocoaPods官網(wǎng)進(jìn)行詳細(xì)了解焕济。
- podspec描述了一個(gè)pod庫(kù)的版本晴弃。它包括有關(guān)應(yīng)從何處獲取源上鞠、使用什么文件、應(yīng)用的構(gòu)建設(shè)置以及其他一般元數(shù)據(jù)(如其名稱(chēng)世曾、版本和描述)的詳細(xì)信息轮听。
1. cocoapods是如何通過(guò)podspec下載資源文件蕊程?
podspec 管理幾個(gè)重要信息
文件源所在git地址
,源文件所在git地址的文件路徑
,源文件對(duì)應(yīng)的tag值
通過(guò)以上三個(gè)內(nèi)容藻茂,就精準(zhǔn)的掌握了資源文件
然后通過(guò)下面的命令即可下載想要的資源玫恳。
pod install
當(dāng)我們新建一個(gè)Podfile文件運(yùn)行后京办,會(huì)自動(dòng)生成一個(gè)Podfile.lock文件惭婿,Podfile.lock文件里存儲(chǔ)著我們已經(jīng)安裝的依賴(lài)庫(kù)(pods)的版本。
當(dāng)我們第一次運(yùn)行Podfile時(shí)换吧,如果對(duì)依賴(lài)庫(kù)不指定版本的話沾瓦,cocoapods會(huì)安裝最新的版本贯莺,同時(shí)將pods的版本記錄在Podfile.lock文件中。這個(gè)文件會(huì)保持對(duì)每個(gè)pod已安裝版本的跟蹤魂莫,并且鎖定這些版本耙考。
再執(zhí)行pod install的話琳骡,只會(huì)處理沒(méi)有記錄在Podfile.lock中的依賴(lài)庫(kù)楣号,會(huì)查找匹配Podfile中描述的版本怒坯。對(duì)于已經(jīng)記錄在Podfile.lock的依賴(lài)庫(kù)剔猿,會(huì)下載Podfile.lock文件中記錄的版本归敬,而不會(huì)檢查是否有更新。當(dāng)然椅亚,如果你約束了pods的版本的話呀舔,會(huì)按照你指定的版本進(jìn)行安裝媚赖,同時(shí)也會(huì)更新Podfile.lock記錄的信息珠插。
簡(jiǎn)單的說(shuō):使用pod install在你的工程里安裝新的pods丧失。盡管你已經(jīng)有了一個(gè)Podfile并且之前運(yùn)行過(guò)pod install布讹;盡管你只是在已經(jīng)使用了CocoaPods的工程中添加/移除了pod描验,你都要使用pod instalpod outdated
檢查記錄在Podfile.lock文件中的pod版本更新情況膘流。
當(dāng)你運(yùn)行pod outdated命令,CocoaPods會(huì)列出所有有新版本的pods耕魄,新版本是指比記錄在Podfile.lock文件中的版本(即當(dāng)前每個(gè)pod安裝的版本)更新的版本吸奴。這意味著如果你對(duì)這些pod運(yùn)行pod update PODNAME则奥,它們將會(huì)更新狭园。pod update
推薦用法:pod update + podName
當(dāng)你運(yùn)行pod update podName命令唱矛,CocoaPods將會(huì)嘗試找到PODNAME指定pod的更新版本绎谦,而不會(huì)顧及Podfile.lock文件中記錄的版本燥滑。它將會(huì)更新pod的最新可用版本.如果你運(yùn)行pod update而不帶pod名稱(chēng)铭拧,CocoaPods將會(huì)更新Podfile文件中記錄的每一個(gè)pod到最新可用版本.
簡(jiǎn)單的說(shuō):只有在你想要更新pods到新的版本時(shí)才使用pod update podName
更新緩慢 ?
最近使用CocoaPods來(lái)添加第三方類(lèi)庫(kù)搀菩,無(wú)論是執(zhí)行pod install
還是pod update
都卡在了Analyzing dependencies
不動(dòng). 原因在于當(dāng)執(zhí)行以上兩個(gè)命令的時(shí)候會(huì)升級(jí)CocoaPods的spec倉(cāng)庫(kù)肪跋,加一個(gè)參數(shù)可以省略這一步,然后速度就會(huì)提升不少萝映。加參數(shù)的命令如下:
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
但這樣處理序臂,我額外發(fā)現(xiàn)了一個(gè)弊端:
就是當(dāng)你搜索一個(gè)庫(kù)時(shí)奥秆,往往搜出來(lái)不是最新的版本.請(qǐng)自行更新构订。
--no-repo-update
不更新本地的倉(cāng)庫(kù)避矢,直接更新源谷异。
--verbose
輸出詳細(xì)日志信息明明線上有這個(gè)庫(kù)歹嘹,但是
pod search podName
卻搜索不到尺上?
open ~/Library/Caches/CocoaPods
刪除該目錄下的search_index.json
文件怎抛。
本地會(huì)保存一個(gè)repo鏡像马绝,search操作只是為了方便會(huì)到本地去檢索,對(duì)應(yīng)的應(yīng)該會(huì)有個(gè)策略掷邦,看起來(lái)應(yīng)該就是緩存里這個(gè)plist了抚岗,以后如果repos更新了宣蔚,plist里面沒(méi)有更新胚委,那么就會(huì)有問(wèn)題了篷扩。
2. 如何創(chuàng)建podspec文件鉴未?
說(shuō)一個(gè)最簡(jiǎn)單最實(shí)用的方法 通過(guò)pod lib create + 名字
來(lái)創(chuàng)建
代碼和資源在創(chuàng)建的項(xiàng)目中的pods -> Development Pods中編寫(xiě)铜秆。
說(shuō)明1: 用該方法創(chuàng)建的項(xiàng)目连茧,默認(rèn)遵守了MIT License協(xié)議
說(shuō)明2: 注意層級(jí)啸驯,podfile文件在Example文件夾下罚斗,podspec文件在項(xiàng)目根目錄下
3. podspec如何編輯针姿?
podspec文件關(guān)鍵字說(shuō)明
# 基本信息的配置
name:框架名
version:當(dāng)前版本(注意距淫,是當(dāng)前版本,假如你后續(xù)更新了新版本婶希,需要修改此處)
summary:簡(jiǎn)要描述榕暇,在pod search的時(shí)候會(huì)顯示該信息。
description:詳細(xì)描述
homepage:頁(yè)面鏈接
license:開(kāi)源協(xié)議
author:作者
platform:支持最低ios版本
swift_version : swift對(duì)應(yīng)的版本
# 源文件的配置
source:源碼git地址
source_files:源文件(可以包含.h和.m)
subspec:子庫(kù)
public_header_files:頭文件(.h文件)
resource_bundles:資源文件(配置的文件會(huì)放到你自己指定的bundle中)
# 依賴(lài)的配置
frameworks:依賴(lài)的系統(tǒng)框架
vendored_frameworks:依賴(lài)的非系統(tǒng)框架
libraries:依賴(lài)的系統(tǒng)庫(kù)
vendored_libraries:依賴(lài)的非系統(tǒng)的靜態(tài)庫(kù)
dependency:依賴(lài)的三方庫(kù)
示例說(shuō)明
Pod::Spec.new do |s|
s.name = 'PodspecDemo' #庫(kù)的名字
s.version = '0.0.1' #庫(kù)的版本號(hào)
s.summary = 'short description' # 庫(kù)的簡(jiǎn)短描述信息
s.homepage = 'https://gitee.com/modularComponents/Tools' #主頁(yè)地址
s.license = { :type => 'MIT', :file => 'LICENSE' } #協(xié)議
s.author = { 'Mccc' => '562863544@qq.com' } #作者信息
s.platform = :ios, '8.0' #平臺(tái)
s.ios.deployment_target = '8.0' #最低支持的target
s.swift_version = '4.0' #支持的swift版本
s.description = 'long description' #庫(kù)的詳細(xì)描述信息
s.source = { :git => 'https://gitee.com/PodspecDemo.git', :tag => s.version.to_s } #資源的git地址和版本號(hào)
s.source_files = 'PodspecDemo/Classes/**/*' # git地址下資源文件的路徑
# =======以下為可選 ===========
# 依賴(lài)
s.dependency 'SnapKit' #此庫(kù)需要依賴(lài)SnapKit
# 加載資源文件
s.ios.resource_bundle = { 'ToolsModuleBundle' => 'ToolsModule/Assets/Home/**/*.{png,jpg}' } #添加資源文件
# 設(shè)置文件夾分層
s.subspec 'compass' do |ss|
ss.source_files = "ToolsModule/Classes/Home/compass/*.{h,m}"
end
end
主要說(shuō)明幾個(gè)點(diǎn):
1). source_files
source_files
源碼倉(cāng)庫(kù)地址(s.source)下喻杈,資源文件(要提供給別人使用的所有文件)的路徑彤枢。文件路徑是以
.podspec
文件所在層級(jí)開(kāi)始的。-
source_files寫(xiě)法說(shuō)明 (以物理路徑為準(zhǔn))
way1:直接指定文件名source_files = 'XXX/XXX/fileName.swift'
way2:目錄下所有符合的文件source_files = 'XXX/XXX/*.swift'
way3: 指定文件夾下所有符合條件的文件source_files = 'XXX/XXX/**/*.{h,m}'
way4: 指定文件夾下所有文件source_files = 'XXX/XXX/**/*'
**/*
表示XXX/XXX/
目錄及其子目錄下所有文件**表示匹配該目錄以及所有子目錄堂污,*.png表示所有以.png為擴(kuò)展名的圖片文件。
2). dependency 依賴(lài)三方的配置
- 依賴(lài)公共庫(kù)龄砰。
s.dependency 'SnapKit'
#當(dāng)前依賴(lài)庫(kù),pod install時(shí)會(huì)自動(dòng)下載該庫(kù)(注意:沒(méi)有=
) - 依賴(lài)私有庫(kù)盟猖。
s.dependency 'MCPageViewController'
需要在podfile
文件中指定存放podspec文件的倉(cāng)庫(kù)地址(包括公有庫(kù))
source 'https://github.com/CocoaPods/Specs.git' #官方倉(cāng)庫(kù)地址
source 'https://gitee.com/mancong/MyPublicRepo.git' #私有倉(cāng)庫(kù)地址
- 如果有依賴(lài)私有庫(kù)情況讨衣,檢驗(yàn)podspec文件不通過(guò)的情況。請(qǐng)使用:
pod spec lint --sources='spec倉(cāng)庫(kù)的地址
如有多個(gè)用,
隔開(kāi)式镐。如果公有庫(kù)反镇,地址寫(xiě)https://github.com/CocoaPods/Specs.git
比如依賴(lài)了兩個(gè)庫(kù)MCPageViewController (私有)
和SnapKit (共有)
pod spec lint --sources='https://github.com/mancongiOS/MCPageViewControllerRepo.git,https://github.com/CocoaPods/Specs.git' --allow-warnings
--sources
: 指定文件源
--allow-warnings
: 允許源文件中有警告的存在
因?yàn)镃ocoaPods會(huì)默認(rèn)是官方地址下查找資源。但是私有庫(kù)資源不在官方地址下的娘汞,所以要指定源地址歹茶。
3). 如何做文件夾層級(jí)?
s.subspec 'LevelDevice' do |ss|
ss.source_files = "ToolsModule/Classes/Home/LevelDevice/*.{h,m}"
ss.dependency 'ToolsModule/compass' #依賴(lài)本庫(kù)的其他子庫(kù)
end
子庫(kù)的依賴(lài)是獨(dú)立的你弦,如果父庫(kù)已經(jīng)依賴(lài)了惊豺,子庫(kù)可以不必依賴(lài)。注意依賴(lài)其他子subspec的情況禽作,具體看上面提供的podspec示例文件
4). 如何關(guān)聯(lián)資源文件?
因?yàn)橘Y源不在主命名空間下尸昧,所以需要特別處理一下。
- 先將資源打包為Bundle
s.ios.resource_bundle = { 'ToolsModuleBundle' => 'ToolsModule/Assets/Home/**/*.{png,jpg}' }
ToolsModuleBundle
是自己命名的bundle名稱(chēng)旷偿。提交后會(huì)自動(dòng)生成一個(gè) Resources
文件夾烹俗,里面包含了資源文件。
- 如何在不同命名空間下加載
資源以及打包成一個(gè)bundle了萍程,如何在pods庫(kù)中使用呢幢妄?
@objc extension Bundle {
/**
* 加載指定bundle下的圖片資源
* 在哪個(gè)pod下的哪個(gè)bundle下的image
*/
public static func mc_loadImage(_ imageName: String, from bundleName: String, in podName: String) -> UIImage? {
var associateBundleURL = Bundle.main.url(forResource: "Frameworks", withExtension: nil)
associateBundleURL = associateBundleURL?.appendingPathComponent(podName)
associateBundleURL = associateBundleURL?.appendingPathExtension("framework")
if associateBundleURL == nil {
print("獲取bundle失敗")
return nil
}
let associateBunle = Bundle.init(url: associateBundleURL!)
associateBundleURL = associateBunle?.url(forResource: bundleName, withExtension: "bundle")
if associateBundleURL != nil {
let bundle = Bundle.init(url: associateBundleURL!)
let scale = Int(UIScreen.main.scale)
// 適配2x還是3x圖片
let name = imageName + "@" + String(scale) + "x"
let path = bundle?.path(forResource: name, ofType: "png")
if path == nil {
print("獲取bundle失敗")
return nil
}
let image1 = UIImage.init(contentsOfFile: path!)
return image1
} else {
return nil
}
}
}
// 使用
let image1 = Bundle.mc_loadImage("圖片名", from: "命名的bundle名字", in: "庫(kù)名字")
5). 編寫(xiě)swift版本庫(kù)注意事項(xiàng)
- 配置swift的版本
s.swift_version = '4.0'
因?yàn)椴煌姹緦?duì)應(yīng)不同的swift方法。比如privite
這個(gè)作用域修飾詞3.0上就沒(méi)有茫负。 - 配置iOS的部署版本
s.ios.deployment_target = '8.0'
- 給swift文件中的類(lèi)名和方法添加作用域修飾詞
需要給類(lèi)加上修飾詞蕉鸳,只允許訪問(wèn)不能繼承就用public
,如何允許繼承就用open
修飾,不允許被繼承就用public
修飾朽褪。如果不用這兩個(gè)關(guān)鍵詞修飾的類(lèi)或者方法置吓,都不會(huì)被其他module訪問(wèn)到。
6). 如何校驗(yàn)podspec文件
-
pod lib lint
只從本地驗(yàn)證你的pod能否通過(guò)驗(yàn)證缔赠。 -
pod spec lint
從本地和遠(yuǎn)程驗(yàn)證你的pod能否通過(guò)驗(yàn)證衍锚,建議使用這個(gè)。 -
--use-libraries
依賴(lài)庫(kù)(s.dependency)中 如果包含.a
文件嗤堰,驗(yàn)證的時(shí)候出現(xiàn)錯(cuò)誤戴质。加上這個(gè)來(lái)讓驗(yàn)證通過(guò)。 -
--allow-warnings
如何庫(kù)代碼中有警告導(dǎo)致通不過(guò)驗(yàn)證踢匣。加上這個(gè)忽略警告 - 私有庫(kù)的驗(yàn)證
使用pod spec lint去驗(yàn)證私有庫(kù)能否通過(guò)驗(yàn)證時(shí)應(yīng)該告匠,應(yīng)該要添加--sources并在podfile文件中指定repo的地址,不然會(huì)出現(xiàn)找不到repo的錯(cuò)誤离唬。
pod spec lint --sources='私有倉(cāng)庫(kù)repo地址1,私有倉(cāng)庫(kù)repo地址1,公有庫(kù)的地址'
用英文逗號(hào)隔開(kāi) 后专,公有庫(kù)地址為:https://github.com/CocoaPods/Specs repo的地址為存放podspec文件的倉(cāng)庫(kù),podfile文件中指定repo地址
podspec準(zhǔn)備就緒输莺,如何發(fā)布出去呢戚哎?
1. 為什么要發(fā)布podspec文件裸诽?
我們已經(jīng)將代碼源用podspec文件管理起來(lái)了。要讓其他人能下載使用你的代碼型凳,就要讓他找到podspec文件丈冬,所以我們要講podspec文件放在網(wǎng)絡(luò)上托管起來(lái)。
- 公有庫(kù):將podspec放在cocoPods官方提供的倉(cāng)庫(kù)https://github.com/CocoaPods/Specs.git上托管
- 私有庫(kù): 將podspec放在個(gè)人或者公司git倉(cāng)庫(kù)托管甘畅。
ps: 也就是說(shuō)埂蕊,一份庫(kù),需要兩個(gè)git倉(cāng)庫(kù)來(lái)托管疏唾,一個(gè)是代碼源的倉(cāng)庫(kù)蓄氧,一個(gè)是podspec的倉(cāng)庫(kù)
3. 發(fā)布前的準(zhǔn)備。
- 在Example目錄下荸实,
pod install
一下匀们。 - 回到根目錄(podspec所在層級(jí)目錄),對(duì)podspec文件進(jìn)行校驗(yàn)。
- 正常提交代碼并打上標(biāo)簽准给。
// Example目錄下
pod install
// 回到項(xiàng)目根目錄下
git add -A
git commit -m "此次內(nèi)容"
git push
git tag 0.0.1
git push origin --tags
發(fā)布前的準(zhǔn)備工作完成。
2. 發(fā)布podspec文件到公有庫(kù)中
- 注冊(cè)cocoaPods
終端執(zhí)行:$ pod trunk register 郵箱地址 '用戶(hù)名' --verbose
這里我們一般使用github郵箱和用戶(hù)名, 然后在你的郵箱中會(huì)收到確認(rèn)郵件, 在瀏覽器中點(diǎn)擊鏈接確認(rèn)即注冊(cè)成功重抖;
- 驗(yàn)證cocoaPods
確保打開(kāi)了郵件中的鏈接之后(正常加載出來(lái)就行)露氮,繼續(xù)執(zhí)行命令
終端執(zhí)行: $ pod trunk me
- 發(fā)布
終端執(zhí)行: $ pod trunk push XXX.podspec
該命令執(zhí)行的過(guò)程
a.更新本地 pods庫(kù) ~/.cocoaPods.repo/master
b.驗(yàn)證*.podspec格式是否正確
c.將 *.podspec 文件轉(zhuǎn)成 JSON 格式
d.對(duì) master 倉(cāng)庫(kù)進(jìn)行合并、提交
- 完成發(fā)布操作
發(fā)布成功钟沛,會(huì)有成功的提示(包含:日期畔规,鏈接,Tell your friends)恨统。
3. 發(fā)布私有庫(kù)
創(chuàng)建配置倉(cāng)(用來(lái)存儲(chǔ)代碼的podspec文件叁扫,即上面創(chuàng)建的podspec文件)。創(chuàng)建時(shí)別忘記選擇MIT License許可證畜埋。
將配置倉(cāng)鏈接到本地repo
pod repo add 配置倉(cāng)名(自己起的倉(cāng)庫(kù)名字) 配置倉(cāng)地址(倉(cāng)庫(kù)的git地址)
示例:pod repo add MCCCSpec https://github.com/mancongiOS/MCCCCSpec.git
說(shuō)明:此命令在新開(kāi)的終端中執(zhí)行莫绣,用完即可關(guān)閉發(fā)布私有庫(kù)
pod repo push 項(xiàng)目配置庫(kù)名 項(xiàng)目代碼庫(kù).podspec
示例:pod repo push MCCCSpec MCCC.podspec
說(shuō)明:此命令在原終端中執(zhí)行,即podspec同級(jí)路徑下-
發(fā)布完成
-
附錄: 查看repos文件夾
open ~/.cocoapods/repos
master對(duì)應(yīng)的公有庫(kù)版本信息
非master對(duì)應(yīng)的是私有庫(kù)版本信息
發(fā)布完成去使用
-
pod search + 庫(kù)名
如何搜索不到悠鞍,請(qǐng)更新本地庫(kù)的索引文件对室。
open ~/Library/Caches/CocoaPods
刪除該目錄下的search_index.json
文件。
本地會(huì)保存一個(gè)repo鏡像咖祭,search操作只是為了方便會(huì)到本地去檢索掩宜,對(duì)應(yīng)的應(yīng)該會(huì)有個(gè)策略,看起來(lái)應(yīng)該就是緩存里這個(gè)plist了么翰,以后如果repos更新了牺汤,plist里面沒(méi)有更新,那么就搜索不到浩嫌。 - podfile中使用
pod 'MCPageViewController'
報(bào)錯(cuò)
在podfile文件中添加資源文件路徑
source 'https://github.com/CocoaPods/Specs.git' #官方倉(cāng)庫(kù)地址
source ‘https://github.com/mancongiOS/MCPageViewControllerRepo.git’ #私有倉(cāng)庫(kù)地址
-
pod install
時(shí)報(bào)錯(cuò)版本信息錯(cuò)誤
更新版本pod update 庫(kù)名
或pod repo update
(不推薦使用檐迟,會(huì)更新所有的第三方庫(kù))
常見(jiàn)發(fā)布問(wèn)題
-
[!] The repo
MyPublicRepoat ../../../.cocoapods/repos/MyPublicRepo is not clean
解決辦法
方法1:
cd ~/.cocoapods/repos
cd MyRepo(報(bào)錯(cuò)的庫(kù)名字)
git clean -f
方法2:
pod repo update MyRepo
如果還不可以那么先刪除原有的版本庫(kù)再重新安裝版本庫(kù)戴已,然后執(zhí)行更新命令
pod repo remove MyRepo
pod repo add MyRepo https://xxx.git
pod repo push MyRepo XXX.podspec
聯(lián)系作者
QQ群: 316879774