1. 程式人生 > >元件化pod庫製作之私有庫製作

元件化pod庫製作之私有庫製作

私有podspec製作步驟:   元件化方案一般都是採用私有podspec

1、建立私有Spec Repo

Spec Repo 是所有公開的Pods 的podspec檔案的一個git倉庫,當使用Cocoapods後它會被clone到本地的~/.cocoapods/repos目錄下,可以進入到這個目錄看到master資料夾就是這個官方的Spec Repo了。因此我們需要建立一個類似於master的私有Spec Repo 。同理這個私有Spec Repo我們也要有一個遠端端。那麼我們需要建立一個 Git倉庫,這個倉庫你可以建立私有的也可以建立公開的。如果是私有的話,專案中其他同事,你要給他這個Git倉庫的許可權。元件化一般都是採用私有的。

在git管理的程式碼託管網站如github或者碼雲或則自己伺服器上建立一個私有倉庫:

 # pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

如:$ pod repo add HFPodSpecs https://coding.net/xxxx/HFPodSpecs.git     其中HFPodSpecs是私有Spec Repo名稱

此時如果成功的話進入到~/.cocoapods/repos目錄下就可以看到WTSpecs這個目錄了。至此第一步建立私有Spec Repo完成。

PS:如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應Git倉庫的許可權的前提下執行相同的命令新增這個Spec Repo即可。

2、建立Pod專案工程檔案

這個第二步沒有什麼好介紹的,如果是有現有的元件專案,並且在Git的版本管理下,那麼這一步就算完成了,可以直接進行下一步了

如果你的元件還在你冗餘龐大的專案中,需要拆分出來或者需要自己從零開始建立一個元件庫,那麼我建議你使用Cocoapods提供的一個工具將第二步與第三步結合起來做。

現在來說一下這個工具,相關的文件介紹是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命令


3、提交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的版本管理下的情況,其處理步驟如下:

1、cd 到CreatLibTestSpec目錄下

2、建立.podspec   podName為你自己的元件名稱

$ pod spec create podName 或者 pod spec create podName podName庫遠端地址

4、編輯.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" => "[email protected]" }
   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

5、打版本tag

// 必須元件程式碼和podspec都提交後才打tag標籤,即最後打tag,不然podspec遠端的驗證可能通不過,因為podspec的版本號就是這個tag標籤

$ git tag -a 0.0.1 -m “V0.0.1”

$ git push —tags

6、驗證.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

7、向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命令就可以查到我們自己的庫了

8、驗證倉庫(注意search不到,並不一定是沒成功,使用podfile中看看能否拉下來程式碼)

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

9、在你新開的專案工程中使用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

10、刪除一個私有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

相關推薦

元件pod製作私有製作

私有podspec製作步驟:   元件化方案一般都是採用私有podspec 1、建立私有Spec Repo Spe

iOS程式碼元件(利用CocoaPods建立私有

前言,最近因為工作需求,研究了一下程式碼元件化,中間遇到了很多問題,下面就把結合網上的一些文章和自己的實際操作,梳理一下操作流程,希望能幫到有需要的朋友,中間有需要改正的地方請指正。 一、遠端索引庫 什麼是遠端索引庫? 每建立一個元件都會帶有一

元件開發私有製作以及常見問題

前言:這篇文章主要描述私有庫的製作過程以及本人在使用過程中的一些問題和解決方案,提到元件化就不得不想到pods私有庫相關的東西(當然元件化不侷限於結合私有庫使用,還可以做成靜態庫或者多target開發等方式,這裡只講解私有庫相關的東西,稍後會出一篇元件化結合私有庫實現元件化開發的方式) 私有

iOS元件開篇(Cocoapods遠端和本地私有製作

目錄 Git基本操作 Cocoapods釋出自己的框架 1.安裝cocoapods 2.使用cocoapods 3.cocoapods釋出自己的框架 Cocoapods本地私有庫 前言 自己的工具庫和框架以前都是直接在模組裡面操作的,沒有做成私有化或者coco

元件pod製作

一)、元件化的目的: 1、解耦各模組和業務,便於開發維護 2、構建可複用模組,便於複用 3、由於開發人員很多時,合作開發程式

iOS組件(一):創建本地私有

遠程倉庫 scrip all pods 中新 install block code ogr 1.創建Test項目,創建TestLib,添加Person類 2.git init 3.提交代碼 4.創建項目的podspec文件 5.修改podspec文件,保存 s.n

Android元件初探一(各Module版本統一問題)

一、什麼是元件化 元件化就是將App分成多個Module,每個Module以library的形式存在於專案中,並存在一個殼工程依賴這些Module。如圖所示: 二、為何要用元件化 優勢: 1、多人分module同步進行開發,開發速度快 2、開發過程中無需編

製作cocoapods私有

podSpec中spec的全稱是“Specification”,說明書的意思。顧名思義,這是用來描述你這個私有pod的說明資訊的。 建立podSpec很簡單,只要建立一個以.podSpec為字尾的檔案即可,或者直接拷貝別人的進行修改也可以。 它的建立命令是:$po

iOS代碼組件--利用cocoaPods創建私有

into eas ner component 令行 podfile eat 合並 category 如果項目模塊多,模塊間邏輯復雜,我們發現多個人同時維護一個代碼倉庫需要十分小心,一不小心,造成沖突,解決起來很煩,相信很多人都遇到手工刪除合並的沖突的文件的經歷。 如果利用組

mysql數據查詢對應對應表中的註釋信息查詢以及加字段查詢

info select update 數據庫查詢 for cat mysql查詢 ren 信息 select * from information_schema.columns where table_schema = ‘db‘ #表所在數據庫 and table_nam

muduo網路學習muduo_http 涉及到的類

#include <muduo/net/http/HttpServer.h>#include <muduo/net/http/HttpRequest.h>#include <muduo/net/http/HttpResponse.h>#include <muduo/n

C++Boost學習thread(一)

目錄 1.thread庫 ^   Boost.Thread允許在可移植C ++程式碼中使用多個執行執行緒和共享資料。它提供了用於管理執行緒本身的類和函式,以及用於線上程之間同步資料或提供特定於各個執行緒的資料的單獨副本的其他類。 #include

C++Boost學習timer

目錄 1.timer庫概述 ^   timer是一個很小的庫,提供簡易的計時功能,對了解程式執行所需的時間在測試和生產環境中都很有用。   舊版本的計時器已經被棄用了,取而代之的是是更符合當前boost實踐的CPU計時器cpu_timer和auto_c

本地私有和遠端私有的升級

以在庫中新增新的類為例子 1.本地私有庫的升級     只需要把新增的類 拖入到 classes 資料夾中 然後在 podfile 檔案目錄中 重新 pod install 即可 2.遠端私有庫的升級     2.1  把新增的類 拖入到 classes 資料夾中  

元件pod私有建立步驟

隨著專案越來越複雜,模組越來越多,這時候可以使用元件化方式解耦,分塊管理程式碼,元件化方式很多,CocoaPods是元件化方式之一。 1.pod私有庫,別人看不到你的原始碼; 2.pod私有庫可以減少專案合併造成的衝突,整潔易管理; 3.但是

iOS元件開發——使用Cocoapods打私有的Pod

隨著專案和業務的發展,專案中會有很多基礎功能模組和通用業務模組可以抽象出來獨立成元件,這樣可以為我們以後在開發新專案的時候提供共用基礎元件,進行元件化程式設計,不需要重新造輪子,提高開發效率。因此我們就需要一個方案來合理的管理公共的元件。 Spec Repo(配置倉庫)

ios pod元件和本地私有的利弊

專案在告一段落的時候,我想把已經拆成模組的專案檔案 拆分到pod庫裡面去 當初我沒拆分到pod庫 ,最開始是因為pod庫要上傳到公開 後來知道了碼雲,知道了可以上傳到私有的伺服器, 但是公司的專案是svn維護的,並沒有這樣的許可權,自己擅自做也不太好。

元件開發04 如何將一些靜態打包成動態

筆者打造出來了5個基礎元件,滿懷信心準備大幹一場時候,發現業務元件用到支付寶 , 微信支付 SDK ,微博 SDK ,高德地圖 SDK 等靜態庫. a ,.framework 檔案時候,連結到元件時候報錯誤,而且還不容易解決,因為我整個工程都是 use_fram

iOS 元件開發(一):遠端私有的基本使用

隨著專案功能的不斷增加,越來越多的開發人員加入,業務主線也隨之越來越多,造成耦合越來越嚴重,編譯越來越慢,測試不獨立等一系列問題。為了解決此類情況,我們可以考慮到使用元件化開發 概念 元件化就是將一個單一工程的專案, 分解成為各個獨立的元件, 然後

Pod 建立私有引用三方Framework和libs的配置方法

使用pod管理庫已經用了3年,當然也做過私有庫,但在做私有庫的時候有些東西並沒有弄得非常清楚,最近專案需要用到將自己的工程打成Framework並將這個Framework做成pod來供其他人去引用,鼓搗了大概幾個小時弄了一個例子,下面和大家分享一下過程和結果。這個Pod工程我