前言
在我們想要發(fā)布自己的pod文件時,需要通過Pod Lib Create
指令去創(chuàng)建pod,然后添加文件,測試后發(fā)布.
這次我們來探究下Pod Lib Create
到底是如何實現(xiàn)的,該指令幫我們做了什么呢?
pod lib create
通過pod lib create
創(chuàng)建一個pod,分析創(chuàng)建流程
當(dāng)執(zhí)行pod lib create ProjectName
時,其實是下載了一個pod模板,然后在內(nèi)部通過更改.podspec文件的配置定制化自己的pod,
pod lib create ProjectName
其實使用了默認(rèn)參數(shù),補全的話pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git
,
執(zhí)行:
分析
Cloning
https://github.com/CocoaPods/pod-template.git
intoProjectName.
創(chuàng)建一個和指定的項目名相同的文件夾,然后將pod-template克隆下拉Configuring TemplateDemo template
對當(dāng)前項目進(jìn)行配置
pod-template是cocoapods官方提供的一個模板,做了什么呢
pod-template
看一下文件路徑
Configuring TemplateDemo template做了什么呢?
先找當(dāng)前路徑下configure
文件,文件夾內(nèi)容
#!/usr/bin/env ruby
$current_dir = File.dirname(File.expand_path(__FILE__))
Dir[File.join($current_dir, "setup/*.rb")].each do |file|
require_relative(file)
end
pod_name = ARGV.shift
Pod::TemplateConfigurator.new(pod_name).run
根據(jù)上述命令:
可得知,遍歷并通過require_relative(file)
獲得訪問在setup文件夾下尋找以.rb
為后綴名的文件的權(quán)限,
然后Pod::TemplateConfigurator.new(pod_name).run
運行TemplateConfigurator
文件的內(nèi)容
看一下setup下面有什么?
在
TemplateConfigurator
文件內(nèi),配置了在終端的顯示樣式,并通過
@message_bank = MessageBank.new(self)
@message_bank.show_prompt
@message_bank.show_prompt
等方法,引用MessageBank
內(nèi)的命令,具體不再贅述,感興趣的可以到ruby
文件去查看.
延伸
我們可以定義自己的模板,仿照pod-template
,配置configure
文件,但是相應(yīng)的參數(shù)可以在內(nèi)部之間定義好,就不需要每次pod lib create
時填寫各種參數(shù).
執(zhí)行結(jié)果
文件夾目錄結(jié)構(gòu)如下
MyLib
├── .travis.yml
├── _Pods.xcproject
├── Example
│ ├── MyLib
│ ├── MyLib.xcodeproj
│ ├── MyLib.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── MyLib.podspec
├── Pod
│ ├── Assets
│ └── Classes
│ └── RemoveMe.[swift/m]
└── README.md
-
Pod
用來存放添加的類 -
RemoveMe
示例類,可以直接刪除
注意: 基于自定義pods的實現(xiàn)細(xì)節(jié),在向Pod/Classes
或者Pod/Assets
文件增加類或者更新podspec
文件時,需要運行pod install
或者pod update
發(fā)布私有庫
之前的開發(fā)和測試就緒后,就要準(zhǔn)備發(fā)布了.
-
pod lib lint
或pod spec lint
:首先要檢測Podspec
的正確性
pod lib lint
不會連接網(wǎng)絡(luò),而是檢查文件格式
pod spec lint
會讀取線上的repo
并檢查相應(yīng)的tag
-
pod repo push SPEC_REPO *.podspec --verbose
發(fā)布po