組件化pod庫製做之私有庫製做

私有podspec製做步驟:   組件化方案通常都是採用私有podspecios

一、建立私有Spec Repo

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便可。框架

二、建立Pod項目工程文件

這個第二步沒有什麼好介紹的,若是是有現有的組件項目,而且在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命令


三、提交pods庫到遠程庫https://xxx/SpecComponent.git

注意:這是你目前單個組件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庫遠程地址

四、編輯.podspec文件,編輯完提交到遠程

該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

五、打版本tag

// 必須組件代碼和podspec都提交後纔打tag標籤,即最後打tag,否則podspec遠程的驗證可能通不過,由於podspec的版本號就是這個tag標籤

$ git tag -a 0.0.1 -m 「V0.0.1」

$ git push —tags

六、驗證.podspec文件是否可用($ cd podspec文件所在目錄)

通常一下幾種驗證方式:

驗證本地的:

$ 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

七、向Spec Repo提交podspec

提交到遠端(有警告選最後一個)

$ 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命令就能夠查到咱們本身的庫了

八、驗證倉庫(注意search不到,並不必定是沒成功,使用podfile中看看可否拉下來代碼)

$ pod search podName (搜索你的podName庫)

九、在你新開的項目工程中使用podfile,拉取你組件庫代碼

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/0a4fbb94ef9f?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends

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];

資料:

https://www.jianshu.com/p/ad4789d88bad

相關文章
相關標籤/搜索