私有podspec製做步驟: 組件化方案通常都是採用私有podspecios
Spec Repo 是全部公開的Pods 的podspec文件的一個git倉庫,當使用Cocoapods後它會被clone到本地的~/.cocoapods/repos目錄下,能夠進入到這個目錄看到master文件夾就是這個官方的Spec Repo了。所以咱們須要建立一個相似於master的私有Spec Repo 。同理這個私有Spec Repo咱們也要有一個遠程端。那麼咱們須要建立一個 Git倉庫,這個倉庫你能夠建立私有的也能夠建立公開的。若是是私有的話,項目中其餘同事,你要給他這個Git倉庫的權限。組件化通常都是採用私有的。git
在git管理的代碼託管網站如github或者碼雲或則本身服務器上建立一個私有倉庫:github
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]swift
如:$ pod repo add HFPodSpecs https://coding.net/xxxx/HFPodSpecs.git 其中HFPodSpecs是私有Spec Repo名稱服務器
此時若是成功的話進入到~/.cocoapods/repos目錄下就能夠看到WTSpecs這個目錄了。至此第一步建立私有Spec Repo完成。app
PS:若是有其餘合做人員共同使用這個私有Spec Repo的話在他有對應Git倉庫的權限的前提下執行相同的命令添加這個Spec Repo便可。框架
這個第二步沒有什麼好介紹的,若是是有現有的組件項目,而且在Git的版本管理下,那麼這一步就算完成了,能夠直接進行下一步了。編輯器
若是你的組件還在你冗餘龐大的項目中,須要拆分出來或者須要本身從零開始建立一個組件庫,那麼我建議你使用Cocoapods提供的一個工具將第二步與第三步結合起來作。ide
如今來講一下這個工具,相關的文檔介紹是Using Pod Lib Create 就拿我建立的podTestLibrary爲例子具體講一下這裏是如何操做的,先cd到要建立項目的目錄CreatLibTestSpec而後執行工具
$ pod lib create podName
如:pod lib create TestLibSpec TestLibSpec是你pod的名稱
終端會顯示以下,依次根據須要選擇以下:
What platform do you want to use?? [ iOS / macOS ] (選擇平臺)
>
ios
What language do you want to use?? [ Swift / ObjC ] (選擇語言)
>
swift
Would you like to include a demo application with your library? [ Yes / No ] (是否包含 demo)
>
yes
Which testing frameworks will you use? [ Quick / None ] (測試框架)
> None
Would you like to do view based testing? [ Yes / No ]
> No
Running pod install on your new library.
成功後會在CreatLibTestSpec目錄下建立一個pod工程,目錄以下:將你的組件化代碼放在/Classes目錄下
cd 在Example工程目錄下執行 pod update命令
打開項目工程,能夠看到庫文件都被加載到Pods子項目中了
不過它們並無在Pods目錄下,而是跟測試項目同樣存在於Development Pods/MyLib中,這是由於咱們是在本地測試,而沒有把podspec文件添加到Spec Repo中的緣故。
注意:這裏須要注意的是每當添加了新的文件或則之後更新了podsepc的版本都須要從新執行一遍pod update命令
注意:這是你目前單個組件SpecComponent的遠程庫地址
cd 到CreatLibTestSpec目錄下
$git init
$git add .
$git commit -m "初始化pod"
$git remote add origin https://xxx/SpecComponent.git
$git push origin master
對於第二部中說的已經有現有的組件項目,而且在Git的版本管理下的狀況,其處理步驟以下:
一、cd 到CreatLibTestSpec目錄下
二、建立.podspec podName爲你本身的組件名稱
$ pod spec create podName 或者 pod spec create podName podName庫遠程地址
該TestLibSpec.podspec文件在執行pod lib create TestLibSpec已經被自動建立
可使用文本編輯器編輯上面生成的podName.podspec文件,根據須要填寫內容,通常按照下面的格式填就夠了:尤爲注意s.version版本號就是你代碼的tag版本號
Pod::Spec.new do |s|
s.name = "TestLibSpec"
s.version = "0.1.0"
s.summary = "TestLibSpec is a kind of learning tools"
s.description = <<-DESC
是一個學習podspec的項目 藉助這個項目你能夠快速構建一個pod庫 有了這個學習項目 就無憂了
DESC
s.homepage = "https://github.com/zhangsan/TestLibSpec"
s.license = { :type => "MIT", :file => "FILE_LICENSE" }
s.author = { "zhangsan" => "zhangsan@qq.com" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/zhangsan/TestLibSpec.git", :tag => "#{s.version}" }
s.source_files = "TestLibSpec/**/*.{h,m}"
# s.exclude_files = "Classes/Exclude"
# s.public_header_files = "Classes/**/*.h"
# s.resource = "icon.png"
# s.resources = "Resources/*.png"
# s.requires_arc = true
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# s.dependency "JSONKit", "~> 1.4"
end
// 必須組件代碼和podspec都提交後纔打tag標籤,即最後打tag,否則podspec遠程的驗證可能通不過,由於podspec的版本號就是這個tag標籤
$ git tag -a 0.0.1 -m 「V0.0.1」
$ git push —tags
通常一下幾種驗證方式:
驗證本地的:
$ pod lib lint (驗證)
$ pod lib lint —verbose (驗證-並顯示詳細信息)
$ pod lib lint —allow-warnings (驗證—忽略警告)
本地和遠程都驗證:
$ pod spec lint podName.podspec —verbose (這個從本地和遠程驗證你的pod可否經過驗證,上面三個都是從本地驗證你的pod可否經過驗證)
忽略警告:
pod spec lint —allow-warnings
注意:因爲上面TestLibSpec.podspec已經提交到遠程,能夠直接使用pod spec lint TestLibSpec.podspec —verbose
提交到遠端(有警告選最後一個)
$ pod repo push HFPodSpecs TestLibSpec.podspec
$ pod repo push HFPodSpecs TestLibSpec.podspec —verbose
$ pod repo push HFPodSpecs TestLibSpec.podspec —allow-warnings
注意: #前面是Spec Repo名字 後面是podspec名字
完成以後這個組件庫就添加到咱們的私有Spec Repo中了,能夠進入到~/.cocoapods/repos/HFPodSpecs目錄下查看
再去看咱們的Spec Repo遠端倉庫,也有了一次提交,這個podspec也已經被Push上去了。
至此,咱們的這個組件庫就已經制做添加完成了,使用pod search命令就能夠查到咱們本身的庫了
$ pod search podName (搜索你的podName庫)
Pod ‘podName’
注意:podfile必定要寫好spec repo地址,以下:
target 'RepoPod' do
source 'https://github.com/lihaifengdoushi/HFPodSpecs.git' // 注意:這個必定要寫 不然會報錯
source'https://github.com/CocoaPods/Specs.git' // 注意:這個也必定要寫
pod 'TestLibSpec', '~> 0.1.0'
end
十、刪除一個私有Spec Repo
$ pod repo remove HFPodSpecs
這樣在本地就刪除了,還能夠經過
$ pod repo add HFPodSpecs https://coding.net/xxxx/HFPodSpecs.git
再把他加過來
若是咱們要刪除私有Spec Repo下的某一個podspec怎麼操做呢,此時無需藉助Cocoapods,只須要cd到~/.cocoapods/repos/HFPodSpecs目錄下,刪掉庫目錄對應的podspec
$ rm -Rf TestLibSpec.podspec
而後將變化提交到遠程就能夠了
至此,私有podspec庫製做就完畢了
參考資料:
http://www.cocoachina.com/articles/11206
https://www.jianshu.com/p/59c2d2c4b737
https://xiaozhuanlan.com/topic/2647180539
https://www.jianshu.com/p/1139a603f413
https://www.jianshu.com/p/7b4667cde80b
https://www.jianshu.com/p/006d6ab89c3c
http://www.cocoachina.com/articles/22509
https://www.jianshu.com/p/a73b6bfdb41a
https://blog.51cto.com/13533483/2057387
關於組件化中資源圖片和xib的使用,
[UIImage imageWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:[NSString stringWithFormat:@"businessactivity@%dx.png",(int)[UIScreen mainScreen].scale] ofType:nil inDirectory:@"TestLibSpec.bundle"]];
NSString *nibName = @"XibView";//@"TestLibSpec.bundle/XibView"
XibView *view = [[NSBundle bundleForClass:[self class]] loadNibNamed:nibName owner:nil options:nil][0];
資料: