pod私有庫的創(chuàng)建和使用

注:因為最近公司需求澡刹,本文為參考他人網(wǎng)上資源后進行的嘗試,可能與多個網(wǎng)上資源重復

cocoapods的原理

  1. Pods 項目最終會編譯成一個名為 libPods.a 的文件耘婚,主項目只需要依賴這個 .a 文件即可罢浇。
  2. 對于資源文件,CocoaPods 提供了一個名為 Pods-resources.sh 的 bash 腳本,該腳本在每次項目編譯的時候都會執(zhí)行嚷闭,將第三方庫的各種資源文件復制到目標目錄中攒岛。
  3. CocoaPods 通過一個名為 Pods.xcconfig 的文件來在編譯時設(shè)置所有的依賴和參數(shù)。

工具依賴

?  ~ nvm --version
0.31.3

?  ~ ruby --version
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

?  ~ pod --version
1.2.1

?  ~ git --version
git version 2.11.0 (Apple Git-81)

tip:本文跳過cocoapods安裝

查看本地pod 倉庫

本地已經(jīng)有一個master庫(安裝pod后自動就會存在胞锰,官方的目錄)
OFToolSpec是后來創(chuàng)建的一個私有庫

Type:版本管理工具類型及分枝名
URL:git倉庫地址
Path:本地倉庫地址(在根目錄下.cocoapods下)

?  ~ pod repo

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/xiaodou_chenxiaoxiang/.cocoapods/repos/master

OFToolSpec
- Type: git (master)
- URL:  https://git.coding.net/one_fools/OFToolRepo.git
- Path: /Users/xiaodou_chenxiaoxiang/.cocoapods/repos/OFToolSpec

2 repos

創(chuàng)建pod lib

在桌面創(chuàng)建PodPrivate文件灾锯,然后在終端進入PodPrivate文件并運行命令 pod lib create OFPublicTool創(chuàng)建私有庫模版

?  ~ cd Desktop 
?  Desktop mkdir PodPrivate
?  Desktop cd PodPrivate 
?  PodPrivate ls
?  PodPrivate pod lib create OFPublicTool

以下是配置選擇,可以使用默認選項(帶有下劃線的選項嗅榕,并且除了Prefix前綴設(shè)置顺饮,其他的不區(qū)分大小寫)

  1. 工程語言
  1. 是否需要Demo
  2. 測試框架
  3. 是否需要view測試
  4. 工程前綴
//設(shè)置使用的語言
What language do you want to use?? [ Swift / ObjC ]
 > ObjC
//是否為library創(chuàng)建一個demo工程
Would you like to include a demo application with your library? [ Yes / No ]
 > 
yes
//使用的單元測試框架(具體請參看下方`單元測試`鏈接)
Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None
//使用UITest
Would you like to do view based testing? [ Yes / No ]
 > no
//你的項目中類的前綴
What is your class prefix?
 > OF

單元測試
然后會在當前目錄生成 OFPublicTool 文件夾,并且會在Xcode中自動打開這個項目
注意可能會有一個警告提示

A86EECEC-4BF2-4789-BC58-558ADD701F17.png

打開OFPublicTool/Example/OFPublicTool.xcworkspace 工程
刪除此處的 ReplaceMe.m文件誊册,在這里創(chuàng)建將要使用私有庫管理的文件
C07AFF42-4781-4443-A45A-C4D1F016B948.png

如下:
F86C3A58-429A-4B39-9C7E-F05C8AAFB23B.png

然后修改此處的 OFPublicTool.podspec文件领突,下面標注必須修改的地方

05A1876C-4EE2-4B2B-B241-C39AD98AD3F4.png

創(chuàng)建git私有倉庫(使用coding

申請賬號后創(chuàng)建Git私有倉庫項目


BACDCF36-B34C-4F97-B7F2-86DFFB1ED4F2.png

之后需要在頁面上獲取的信息有


9C15D4BB-9BE8-4204-B8F2-559A344ACEEE.png

創(chuàng)建pod私有庫

把相關(guān)的信息修改到 OFPublicTool.podspec
以下是我的修改

s.summary          = 'My PublicTool.'
s.homepage         = 'https://coding.net/u/one_fools/p/OFPublicTool'
s.source           = { :git => 'https://git.coding.net/one_fools/OFPublicTool.git', :tag => s.version.to_s }

之后進入 Example目錄使用 pod update命令

?  Example git:(master) ? pod update

發(fā)現(xiàn)有報錯信息 The validator for Swift projects uses Swift 3.0 by default...

35FAF51B-C569-43C4-A7A4-32D56D281351.png

不過上面有寫到echo "2.3" > .swift-version
繼續(xù)使用此命令,然后再來一次

?  Example git:(master) ? echo "2.3" > .swift-version
?  Example git:(master) ? pod update

安裝成功后發(fā)現(xiàn)下面的警告并沒有消失(暫時不管)
對項目進行 command + B構(gòu)建一次應該會成功案怯,然后在項目中 OFViewController.m 中引入

#import "OFPublicTool.h"

并對項目再次進行 command + B構(gòu)建君旦,若成功,說明 OFPublicTool.podspec 中的source_files路徑是正確的

若是報錯無法找到文件:

接下來用pod的命令檢查一下此文件下的lib嘲碱。
后退到podspec文件存在的目錄下

?  OFPublicTool git:(master) ? pod lib lint

 -> OFPublicTool (0.1.0)

OFPublicTool passed validation.

如果出現(xiàn)此處提示說明檢查通過

pod spec lint命令檢查一下遠程的lib金砍,現(xiàn)在沒有提交到git私有倉庫,一定會報錯的

?  OFPublicTool git:(master) ? pod spec lint

 -> OFPublicTool (0.1.0)
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://git.coding.net/one_fools/OFPublicTool.git /var/folders/dr/688z508n1fb2m9bh9kqs5_ch0000gn/T/d20170520-7169-ee52z2 --template= --single-branch --depth 1 --branch 0.1.0

Cloning into '/var/folders/dr/688z508n1fb2m9bh9kqs5_ch0000gn/T/d20170520-7169-ee52z2'...
fatal: Remote branch 0.1.0 not found in upstream origin
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

發(fā)現(xiàn)報了一個錯誤麦锯,需要一個tag 0.1.0恕稠,下面將本地文件提交到git私有倉庫并打一個0.1.0的tag

?  OFPublicTool git:(master) ? git add .
?  OFPublicTool git:(master) ? git commit -m"first commit"
?  OFPublicTool git:(master) git remote add origin https://git.coding.net/one_fools/OFPublicTool.git
?  OFPublicTool git:(master) git push origin master
?  OFPublicTool git:(master) git tag -m"tag 0.1.0" 0.1.0
?  OFPublicTool git:(master) git push --tags

git操作不再細述
上傳成功之后再次用 pod spec lint命令檢查一下遠程的lib

?  OFPublicTool git:(master) pod spec lint

 -> OFPublicTool (0.1.0)

Analyzed 1 podspec.

OFPublicTool.podspec passed validation.

?  OFPublicTool git:(master) 

發(fā)現(xiàn)通過檢查,這時候可以去私有倉庫看一下會發(fā)現(xiàn)已經(jīng)上傳成功了

本地測試podspec文件

我們可以創(chuàng)建一個新的項目扶欣,在這個項目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件鹅巍,看是否可用。 在Podfile中我們可以這樣編輯料祠,有兩種方式

platform :ios, '8.0'
 
target 'XDTestPod' do
  pod 'OFPublicTool', :path => '~/.cocoapods/repos/OFPublicToolSpec'      #指定路徑
  pod 'OFPublicTool', :podspec => '~/.cocoapods/repos/OFPublicToolSpec/OFPublicTool.podspec'  #指定podspec文件
end

然后執(zhí)行pod install命令安裝依賴骆捧,打開項目工程,可以看到庫文件都被加載到Pods子項目中了髓绽,不過它們并沒有在Pods目錄下敛苇,而是跟測試項目一樣存在于Development Pods/PodTestLibrary中,這是因為我們是在本地測試顺呕,而沒有把podspec文件添加到Spec Repo中的緣故枫攀。

向Spec Repo提交podspec

但是現(xiàn)在還沒完,接下來我們把podspec文件上傳的我們自己的spec倉庫里株茶,而不是cocoapods的倉庫来涨。
下面我們創(chuàng)建本地倉庫并把這個podspec文件上傳進去

?  OFPublicTool git:(master) pod repo
?  OFPublicTool git:(master) pod repo add OFPublicToolSpec https://git.coding.net/one_fools/OFPublicTool.git
?  OFPublicTool git:(master) pod repo

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/xiaodou_chenxiaoxiang/.cocoapods/repos/master

OFPublicToolSpec
- Type: git (tags/0.1.0^0)
- URL:  https://git.coding.net/one_fools/OFPublicTool.git
- Path: /Users/xiaodou_chenxiaoxiang/.cocoapods/repos/OFPublicToolSpec

OFToolSpec
- Type: git (master)
- URL:  https://git.coding.net/one_fools/OFToolRepo.git
- Path: /Users/xiaodou_chenxiaoxiang/.cocoapods/repos/OFToolSpec

3 repos

然后上傳

?  OFPublicTool git:(master) pod repo push OFPublicToolSpec OFPublicTool.podspec 

Validating spec
 -> OFPublicTool (0.1.0)

Updating the `OFPublicToolSpec' repo

Already up-to-date.

Adding the spec to the `OFPublicToolSpec' repo

 - [Update] OFPublicTool (0.1.0)

Pushing the `OFPublicToolSpec' repo

To https://git.coding.net/one_fools/OFPublicTool.git
   8632a92..98f3d44  master -> master

上傳成功

最后檢驗

?  OFPublicTool git:(master) pod search OFPublicTool
Creating search index for spec repo 'OFPublicToolSpec'.. Done!
[!] Unable to find a pod with name, author, summary, or description matching `OFPublicTool`

發(fā)現(xiàn)報錯,這是因為search index中緩存沒有清理忌卤,再次搜索會等待一段時間

?  OFPublicTool git:(master) rm ~/Library/Caches/CocoaPods/search_index.json
?  OFPublicTool git:(master) pod search OFPublicTool

添加到Cocoapods的官方庫

添加到Cocoapods的官方庫扫夜,可以使用trunk工具,具體可以查看官方文檔驰徊。

pod trunk register 631292061@qq.com 'Ec631292' ---verbose  #注冊trunk笤闯,郵箱以及用戶名請使用大家自己的。執(zhí)行這個語句后棍厂,你的郵箱將會受到一封帶有驗證鏈接的郵件颗味,如果沒有請去垃圾箱找找,有可能被屏蔽了牺弹。點擊郵件的鏈接就完成了trunk注冊流程浦马。
pod trunk me #如果終端顯示了你的用戶名和昵稱,則說明注冊成功张漂。
pod trunk push OFPublicTool.podspec #通過trunk上傳你的podspec文件晶默,要cd到podspec文件所在目錄執(zhí)行

最后在一個新項目里引入使用,測試是否ok航攒,只需要在項目的Podfile里增加以下一行代碼即可

pod 'OFPublicTool', '~> 0.1.0'

注:每當你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令磺陡。

更新維護podspec

Pod::Spec.new do |s|
  s.name             = 'OFPublicTool'
  s.version          = '0.1.3'
  s.summary          = 'My PublicTool.'
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://coding.net/u/one_fools/p/OFPublicTool'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'ECwlf' => '631292061@qq.com' }
  s.source           = { :git => 'https://git.coding.net/one_fools/OFPublicTool.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

  s.subspec 'iCarousel' do |iCarousel|
    iCarousel.source_files = 'XDLibrary/Classes/iCarousel/**/*'
    iCarousel.public_header_files = 'XDLibrary/Classes/iCarousel/**/*.h'
  end

  s.subspec 'XDProgress' do |progress|
    progress.source_files = 'XDLibrary/Classes/XDProgress/**/*'
    progress.public_header_files = 'XDLibrary/Classes/XDProgress/**/*.h'
    progress.dependency 'MBProgressHUD', '~> 1.0.0'
  end

  # s.source_files = 'XDLibrary/Classes/**/*'
  
  # s.resource_bundles = {
  #   'XDLibrary' => ['XDLibrary/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end

因為我們創(chuàng)建了subspec所以項目整體的依賴dependency,源文件source_files漠畜,頭文件public_header_files币他,資源文件resource等都移動到了各自的subspec中陵刹,每個subspec之間也可以有相互的依賴關(guān)系赂韵,比如XDProgress依賴于MBProgressHUD。不同的子模塊之間還能互相依賴锐帜。

編輯完成之后瘾敢,在測試項目里pod update一下拍冠,幾個子項目都被加進項目工程了,寫代碼驗證無誤之后簇抵,就可以將這個工程push到遠端倉庫庆杜,并打上新的tag->1.0.0。
最后再次使用pod lib lint驗證編輯好的podsepc文件正压,沒有自身的WARNING或者ERROR之后欣福,就可以再次提交到Spec Repo中了,命令跟之前是一樣的

pod repo push OFPublicToolSpec OFPublicTool.podspec 

之后再次到~/.cocoapods/repos/OFPublicToolSpec目錄下查看已經(jīng)有兩個版本了焦履。

最后介紹一下如何刪除一個私有Spec Repo拓劝,只需要執(zhí)行一條命令即可

pod repo remove OFPublicToolSpec

這樣這個Spec Repo就在本地刪除了,我們還可以通過

 pod repo add OFPublicToolSpec https://git.coding.net/one_fools/OFPublicTool.git

再把它給加回來嘉裤。
如果我們要刪除私有Spec Repo下的某一個podspec怎么操作呢郑临,此時無需借助Cocoapods,只需要cd到~/.cocoapods/repos/OFPublicToolSpec目錄下屑宠,刪掉庫目錄,然后在將Git的變動push到遠端倉庫即可.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厢洞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躺翻,老刑警劉巖丧叽,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異公你,居然都是意外死亡踊淳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門陕靠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迂尝,“玉大人,你說我怎么就攤上這事剪芥÷⒖” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵税肪,是天一觀的道長溉躲。 經(jīng)常有香客問我,道長寸认,這世上最難降的妖魔是什么签财? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮偏塞,結(jié)果婚禮上唱蒸,老公的妹妹穿的比我還像新娘。我一直安慰自己灸叼,他們只是感情好神汹,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著古今,像睡著了一般屁魏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捉腥,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天氓拼,我揣著相機與錄音,去河邊找鬼抵碟。 笑死桃漾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拟逮。 我是一名探鬼主播撬统,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼敦迄!你這毒婦竟也來了恋追?” 一聲冷哼從身側(cè)響起凭迹,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苦囱,沒想到半個月后嗅绸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡沿彭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年朽砰,在試婚紗的時候發(fā)現(xiàn)自己被綠了尖滚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喉刘。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漆弄,靈堂內(nèi)的尸體忽然破棺而出睦裳,到底是詐尸還是另有隱情,我是刑警寧澤撼唾,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布廉邑,位于F島的核電站,受9級特大地震影響倒谷,放射性物質(zhì)發(fā)生泄漏蛛蒙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一渤愁、第九天 我趴在偏房一處隱蔽的房頂上張望牵祟。 院中可真熱鬧,春花似錦抖格、人聲如沸诺苹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽收奔。三九已至,卻和暖如春滓玖,著一層夾襖步出監(jiān)牢的瞬間坪哄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工势篡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翩肌,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓殊霞,卻偏偏與公主長得像摧阅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绷蹲,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容