背景
上一篇博客最新的CocoaPods的使用教程(一)里主要講解了CocoPods得簡(jiǎn)單的日常使用嘶摊。但是我們經(jīng)常會(huì)想把自己的開源庫(kù)讓別人通過 **pod install **來使用延蟹。網(wǎng)上有好多博客說如何使用Cocoapods創(chuàng)建私有的podspec
以及如何把自己的開源庫(kù)發(fā)布到CocoasPods等等,而我在看他們的時(shí)候好多寫的都比較模糊叶堆、比較費(fèi)解阱飘。因?yàn)槲冶容^笨吧,經(jīng)過我一步一步琢磨親測(cè)過后,我有了一個(gè)很好地理解沥匈。在這里我盡量的詳細(xì)說明一下(當(dāng)然我也有很多沒有考慮的地方蔗喂,大家都是凡人嘛_,我也是煩人)
前言
這一篇博客主要講解創(chuàng)建CocoaPods的私有庫(kù)高帖。希望這一篇博客能讓你們少走點(diǎn)彎路缰儿,讓你私有庫(kù)靈活運(yùn)用。下一篇博客會(huì)介紹創(chuàng)建CocoaPods的開源庫(kù)散址。主要講解內(nèi)容目錄:
一. 創(chuàng)建項(xiàng)目的Podspec索引文件
二. 創(chuàng)建CocoaPods的私有庫(kù)
三. CocoaPods私有庫(kù)管理的原理
四. 常用命令匯總
一. 創(chuàng)建項(xiàng)目的Podspec索引文件
作用:索引作用乖阵,就是讓命令能找到我們的代碼(私有庫(kù)或開源庫(kù))
創(chuàng)建命令:進(jìn)入我們?cè)诠こ谈夸浕蛘唛_源庫(kù)根目錄中初始化一個(gè)Podspec文件:
pod spec create JYPodTest
該命令將在本目錄產(chǎn)生一個(gè)名為JYPodTest.podspec文件。用編輯器打開該文件预麸,里面已經(jīng)有非常豐富的說明文檔瞪浸。下面介紹如何聲明第三方庫(kù)的代碼目錄和資源目錄,還有該第三方庫(kù)所依賴ios核心框架和第三方庫(kù)师崎。這是我的podspec文件:
Pod::Spec.new do |s|
s.name = "JYPodTest"
s.version = "0.0.1"
s.summary = "open souurse Test With JYPodTest."
s.homepage = "https://git.coding.net/Dely/JYPodTest.git"
s.license = 'MIT'
s.author = { "Dely" => "jiayaoit@126.com" }
s.platform = :ios, "7.0"
s.source = { :git => "https://git.coding.net/Dely/JYPodTest.git", :tag => s.version }
s.source_files = "JYPodTest/*.{h,m}"
s.resources = "*.jpg", "*.md", "*.mobileprovision"
s.frameworks = "UIKit", "Foundation"
end
各個(gè)參數(shù)含義:
s.name
聲明庫(kù)的名稱
s.summary
對(duì)這個(gè)庫(kù)的簡(jiǎn)短說明介紹
s.version
當(dāng)前庫(kù)的版本
s.homepage
聲明庫(kù)的主頁(yè)
s.license
所采用的授權(quán)版本
s.author
庫(kù)的作者
s.platform
庫(kù)運(yùn)行的平臺(tái)和系統(tǒng)的最低版本
s.source
庫(kù)的倉(cāng)庫(kù)地址以及版本號(hào)或者committed等
s.source_files
聲明庫(kù)的源代碼的位置默终,庫(kù)的真正路徑(一般是相對(duì)路徑)所以這個(gè)地方不能填錯(cuò)。這個(gè)目錄下的文件都會(huì)進(jìn)行編譯犁罩。
s.resources
存放我們不想?yún)⑴c編譯的資源文件
s.frameworks
聲明了庫(kù)所依賴的系統(tǒng)核心庫(kù)
s.dependency
我們開發(fā)的庫(kù)中也可能還依賴第三方庫(kù)齐蔽,例如JSONKit,那么床估,就可以做如下聲明:s.dependency "JSONKit", "~> 1.4"
,如果有多個(gè)就寫多個(gè)
上面的屬性基本上夠用含滴,如果還想引入更多參數(shù),請(qǐng)自行查看丐巫。
注意點(diǎn):地址一定要寫正確谈况,各個(gè)文件的路徑要寫正確,
二. 創(chuàng)建CocoaPods的私有庫(kù)
1. 把代碼托管到代碼托管平臺(tái)上
托管在github或者coding,SVN,公司私有服務(wù)器等递胧,選擇哪一個(gè)沒影響(只是一個(gè)地址)碑韵。下面我把他托管到coding上(連接快點(diǎn)),
我采用只是包含源代碼的文件夾(如下目錄結(jié)構(gòu))缎脾,xcode新建工程里面包含源代碼也一樣祝闻,只要路徑寫正確就ok。
- 1.新建遠(yuǎn)程倉(cāng)庫(kù):github或coding遗菠,公司內(nèi)部服務(wù)器等等上都可以
-
2.本地文件初始化倉(cāng)庫(kù)
- 如果是xcode新建一個(gè)工程联喘,里面包含庫(kù)的源代碼。xcode會(huì)自動(dòng)
git init
初始化倉(cāng)庫(kù)辙纬,跳過初始化這一步 - 如果是只是包含源代碼的文件夾豁遭,需要對(duì)這個(gè)源代碼文件夾初始化如下:
- 如果是xcode新建一個(gè)工程联喘,里面包含庫(kù)的源代碼。xcode會(huì)自動(dòng)
//進(jìn)入源代碼根目錄
cd ~/Desktop/JYPodTest
//git初始化
git init
- 3.在庫(kù)根目錄下創(chuàng)建Podspec文件
//進(jìn)入源代碼根目錄
cd ~/Desktop/JYPodTest
//創(chuàng)建Podspec文件
pod spec create JYPodTest
現(xiàn)在我們的目錄如下:
-
4.把源代碼推送到遠(yuǎn)程倉(cāng)庫(kù)(我是coding)
庫(kù)的源代碼對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)的地址為:https://git.coding.net/Dely/JYPodTest.git
//進(jìn)入源代碼根目錄
cd ~/Desktop/JYPodTest
//添加到git得暫存區(qū)
git add -A
//提交到本地倉(cāng)庫(kù)
git commit -m "first commit"
//添加遠(yuǎn)端倉(cāng)庫(kù)地址
git remote add origin https://git.coding.net/Dely/JYPodTest.git
//把本地代碼推送到遠(yuǎn)端倉(cāng)庫(kù)
git push -u origin master
-
5.對(duì)源代碼打tag,推送到遠(yuǎn)端倉(cāng)庫(kù)
因?yàn)橄旅婢庉媝odspec文件中需要獲取Git版本控制的源代碼贺拣,所以我們要打上一個(gè)tag蓖谢,
你也可以在podspec文件中保存你的commitid捂蕴,或者分支來獲取相應(yīng)的源代碼。不過基本上都是打tag蜈抓。
//進(jìn)入源代碼根目錄
cd ~/Desktop/JYPodTest
//新建一個(gè)tag
git tag 0.0.1
//tag推送到遠(yuǎn)端
git push origin 0.0.1
2. 編輯podspec文件
做完上面這些就可以編輯podspec文件了启绰。最開始已經(jīng)講解了這個(gè)文件的寫法昂儒。
注意:庫(kù)目錄的各個(gè)路徑要對(duì)應(yīng)沟使,tag版本要和上面tag對(duì)應(yīng)起來
podspec文件內(nèi)容如下:
Pod::Spec.new do |s|
s.name = "JYPodTest"
s.version = "0.0.1"
s.summary = "open source Test With JYPodTest."
s.homepage = "https://git.coding.net/Dely/JYPodTest.git"
s.license = 'MIT'
s.author = { "Dely" => "jiayaoit@126.com" }
s.platform = :ios, "7.0"
s.source = { :git => "https://git.coding.net/Dely/JYPodTest.git", :tag => s.version }
s.source_files = "JYPodTest/*.{h,m}"
s.resources = "*.jpg", "*.md", "*.mobileprovision"
s.frameworks = "UIKit", "Foundation"
end
編輯好保存起來推送到遠(yuǎn)程倉(cāng)庫(kù):
cd ~/Desktop/JYPodTest
git add -A
git commit -m "修改pod spec文件"
git push origin master
3.驗(yàn)證Podspec文件的有效性
注意 注意:本地驗(yàn)證之前一定要保證我們的源代碼和tag已經(jīng)同步到遠(yuǎn)端倉(cāng)庫(kù),否則驗(yàn)證會(huì)找不到相應(yīng)代碼和tag的渊跋。
進(jìn)入根目錄下驗(yàn)證
cd ~/Desktop/JYPodTest
pod spec lint JYPodTest.podspec
//可以使用下面腊嗡。顯示具體問題。以及忽略所有警告
//pod spec lint JYPodTest.podspec --verbose --allow-warnings
注意:錯(cuò)誤error一定是不可以的拾酝,必須要把錯(cuò)誤修改掉燕少。警告最好修改,可是使用--allow-warnings
忽略警告
如果Podspec文件無效蒿囤,由于問題各種各樣客们,請(qǐng)Google解決!一定要保證文件的有效性哦材诽,
- 有人會(huì)為我為什么根目錄不要 LICENSE文件底挫?不需要,因?yàn)槲覀儸F(xiàn)在是私有庫(kù)哦脸侥,不要驗(yàn)證這些開源授權(quán)的東西建邓。下一篇博客說道開源才會(huì)需要這個(gè)文件。
- 有人會(huì)問我修改了podspec文件需要推送到遠(yuǎn)端睁枕?需要官边。因?yàn)樗接袔?kù)驗(yàn)證會(huì)驗(yàn)證你遠(yuǎn)端的podspec文件
- 有人會(huì)問我修改了podspec文件tag需要重新打和推送到遠(yuǎn)端?不需要外遇。除非你源代碼有改動(dòng)注簿,需要重新發(fā)一個(gè)版本。
4.本地測(cè)試Podspec文件
我們可以創(chuàng)建一個(gè)新的項(xiàng)目跳仿,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件诡渴,看是否可用。 在Podfile中我們可以這樣編輯塔嬉,有兩種方式
platform :ios, '7.0'
target 'JYTest' do
pod 'JYPodTest', :path => '~/Desktop/JYPodTest' # 指定路徑
#pod 'JYPodTest', :podspec => '~/Desktop/JYPodTest/JYPodTest.podspec' #指定podspec文件
end
然后執(zhí)行pod install
命令安裝依賴玩徊,打開項(xiàng)目工程,可以看到庫(kù)文件都被加載到Pods子項(xiàng)目中了谨究,不過它們并沒有在Pods目錄下恩袱,而是跟測(cè)試項(xiàng)目一樣存在于Development Pods/JYPodTest中吩翻,這是因?yàn)槲覀兪窃诒镜販y(cè)試辨嗽,而沒有把podspec文件添加到Spec Repo中的緣故。
在項(xiàng)目中編寫代碼所袁,測(cè)試庫(kù)文件無誤后就可以開始下一步了,提交podspec到Spec Repo中澈吨。
5.向Repo提交私有的podspec
- 1.新建一個(gè)我們保存podspec文件的遠(yuǎn)端倉(cāng)庫(kù)
我們的遠(yuǎn)端的podspec倉(cāng)庫(kù)地址為:https://git.coding.net/Dely/JYPodspec.git
-
2.給cocoapods添加私有repo
終端輸入:
pod repo add JYPod https://git.coding.net/Dely/JYPodspec.git
查看是否添加成功:
pod repo list
- 3.將JYPodTest.podspec文件添加到podspec遠(yuǎn)端倉(cāng)庫(kù)和本地repo/JYPod里
//兩個(gè)參數(shù):添加的私有repo名 JYPod 將要添加的Podspec路徑
pod repo push JYPod ~/Desktop/JYPodTest/JYPodTest.podspec --allow-warnings
這個(gè)命令有兩個(gè)作用:
- 第一:在本地repo/JYPod倉(cāng)庫(kù)添加我們的podspec文件
- 第二:在我們的遠(yuǎn)端存放podspec倉(cāng)庫(kù)里push最新的podspec文件
出線下面信息說明添加成功:
此時(shí)打開本地~/.cocoapods/repos/JYPod
目錄查看
遠(yuǎn)端podspec倉(cāng)庫(kù)也會(huì)同步過來podspec信息:
6.如何引用私有庫(kù)
上面都完成的話把敢,那我們看看能不能搜索到我忙的私有庫(kù)
pod search JYPodTest
如何使用呢?在前面本地驗(yàn)證的工程里修改Podfile文件如下:
source 'https://git.coding.net/Dely/JYPodspec.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
target 'JYTest' do
pod 'JYPodTest', '~> 0.0.1' #私有庫(kù)
pod 'JYCarousel', '~> 0.0.1' #開源庫(kù)
end
注意:我們添加我們的遠(yuǎn)端podspec倉(cāng)庫(kù)地址時(shí)谅辣,一定一定要把開源庫(kù)CococaPods的podspec的github地址寫上(上一篇博客有提到)
執(zhí)行pod update
命令看看
工程變化:
從上面項(xiàng)目可以看到修赞,我們自己的庫(kù)文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了,而不再是Development Pods桑阶。到現(xiàn)在是不是有一種成就感_
特別插入: 特別插入: 特別插入: 還有另一種方式引用私有庫(kù)哦**
這種方式我們上一篇博客里提到過柏副,自定義Podfile的寫法里提到,
我們同樣修改我們的測(cè)試工程的Podfile文件:
platform :ios, '7.0'
target 'JYTest' do
pod 'JYPodTest', :git => 'https://git.coding.net/Dely/JYPodTest.git' #指定私有庫(kù)遠(yuǎn)程倉(cāng)庫(kù)地址,還可以指定tag,committed等
end
執(zhí)行pod update看看效果:
這種寫法比較方便蚣录,直接指定源代碼的git倉(cāng)庫(kù)地址就可以了割择,也不需要在Podfile引入source的podspec的倉(cāng)庫(kù)地址,
這種寫法維護(hù):只要修改源代碼,然后在需要發(fā)布新版本的時(shí)候打tag萎河,更改podspec的內(nèi)容推送到倉(cāng)庫(kù)就可以了荔泳。
缺點(diǎn)就是寫法不美觀
我們現(xiàn)在的項(xiàng)目就是采用這種引入方式_
7.更新維護(hù)私有庫(kù)
上面已經(jīng)建立好我忙的私有庫(kù)了,我們不可能一直是一個(gè)版本一輩子只用一樣的代碼吧虐杯。所以我們要更新維護(hù)我忙的私有庫(kù)源代碼玛歌。
1.修改我們的私有源代碼
我們對(duì)我忙的私有庫(kù)做了大量大量的改動(dòng),需要發(fā)布新版本了厦幅。這里我們也大量改動(dòng)一下:添加一張圖片_
2.推送到私有庫(kù)遠(yuǎn)端
- 我們對(duì)這個(gè)新版本打一個(gè)打tag沾鳄,比如:1.0.0 ,然后push到遠(yuǎn)端倉(cāng)庫(kù)
- 修改podspec文件确憨,根據(jù)你代碼改動(dòng)修改译荞,tag和目錄結(jié)構(gòu)等
- 驗(yàn)證podspec有效性,跟上面一樣休弃。進(jìn)行本地驗(yàn)證吞歼,然后在向repo提交podspec文件。驗(yàn)證保證通過塔猾。不通過繼續(xù)修改直至通過篙骡,推送到遠(yuǎn)端私有庫(kù)
pod spec lint JYPodTest.podspec --allow-warnings
注意 注意:本地驗(yàn)證之前一定要保證我們的源代碼和tag已經(jīng)同步到遠(yuǎn)端倉(cāng)庫(kù),否則驗(yàn)證會(huì)找不到相應(yīng)代碼和tag的丈甸。
3.再次向repo提交podspec文件
驗(yàn)證好podspec文件有效性之后糯俗,之后就可以再次向repo提交我們的最新podspec文件了,命令和之前一樣
//兩個(gè)參數(shù):添加的私有repo名 JYPod 將要添加的Podspec路徑
pod repo push JYPod ~/Desktop/JYPodTest/JYPodTest.podspec --allow-warnings
我們?cè)俅蜷_目錄~/.cocoapods/repos/JYPod
目錄下你會(huì)看到我們的倉(cāng)庫(kù)里多了一個(gè)1.0.0版本
我們pod search JYPodTest
看下睦擂,會(huì)出現(xiàn)兩個(gè)版本哦
我們?cè)谖覀兊臏y(cè)試項(xiàng)目Podfile文件引用1.0.0版本得湘。pod update 就可以了
3.Repo 添加和刪除命令
如何刪除一個(gè)Spec Repo,只需要執(zhí)行一條命令即可
pod repo remove JYPod
添加Spec Repo
pod repo add JYPod https://git.coding.net/Dely/JYPodspec.git
查看Spec repo列表
pod repo list
如果我們要?jiǎng)h除私有Spec Repo下的某一個(gè)podspec怎么操作呢顿仇,此時(shí)無需借助Cocoapods淘正,只需要cd到~/.cocoapods/repos/JTPod目錄下摆马,刪掉庫(kù)目錄
rm -Rf JYPodTest
然后在將Git的變動(dòng)push到遠(yuǎn)端倉(cāng)庫(kù)即可
git add -A
git commit -m "remove unuseful pods"
git push origin master
我們直接在遠(yuǎn)端podspec倉(cāng)庫(kù)添加庫(kù)目錄,我們可以再本地~/.cocoapods/repos/JTPod目錄下拉取
git pull origin master
//或者更新所有的本地podspec文件
//pod repo update
小結(jié): 創(chuàng)建CocoaPods的私有庫(kù)到這里頁(yè)系統(tǒng)的講解完了。私有庫(kù)最核心的就是podspec文件鸿吆,這個(gè)文件也是CocoaPods的最核心的囤采。
三. CocoaPods私有庫(kù)管理的原理
其實(shí)Cocoapods就是通過一個(gè)podspec文件來管理的,本地
~/.cocoapods/repos
下得各個(gè)目錄(不管開源庫(kù)master惩淳,私有庫(kù)JYPod)蕉毯。這些目錄其實(shí)就是我們從遠(yuǎn)端倉(cāng)庫(kù)clone下來的,跟遠(yuǎn)端保持一樣黎泣。我們pod search
命令就會(huì)在本地目錄下查找?guī)臁?/p>只不過私有庫(kù)有我們自己的podspec遠(yuǎn)端倉(cāng)庫(kù)恕刘,我們能pull和push缤谎,有我們自己控制抒倚。而開源庫(kù)的master我們只有pull的權(quán)限而已,沒啥太多東西哦坷澡,
我們
pod install
或者pod update
CocoaPods就會(huì)根據(jù)我們podspec文件里的配置來找到我們的源代碼托呕,然后安裝我們的依賴庫(kù)。
四. 常用命令匯總
1. pod spec create JYPodTest
初始化一個(gè)Podspec文件
**2. pod spec lint JYPodTest.podspec **
驗(yàn)證Podspec文件的有效性
//可以使用下面频敛。顯示具體問題--verbose项郊。以及忽略所有警告 --allow-warnings
//pod spec lint JYPodTest.podspec --verbose --allow-warnings
3. pod repo add JYPod https://git.coding.net/Dely/JYPodspec.git
給cocoapods添加私有repo
//相當(dāng)于git remote add origin https://git.coding.net/Dely/JYPodspec.git
4. pod repo list
查看Spec repo列表
5.pod repo push JYPod ~/Desktop/JYPodTest/JYPodTest.podspec --allow-warnings
//將JYPodTest.podspec文件添加到podspec遠(yuǎn)端倉(cāng)庫(kù)和本地repo/JYPod里
//兩個(gè)參數(shù):添加的私有repo名 JYPod 將要添加的Podspec路徑
6. pod repo remove JYPod
刪除一個(gè)Spec repo
結(jié)尾:
創(chuàng)建CocoaPods私有庫(kù)基本上就這些內(nèi)容了,不知道我的介紹你是否能理解斟赚,這東西需要自己操作學(xué)習(xí)一下着降,那樣會(huì)理解比較深刻。下一篇博客我會(huì)介紹創(chuàng)建CocoaPods的開源庫(kù)拗军,把我們的開源庫(kù)發(fā)布到CocoaPods上。
我的開源庫(kù)喜歡請(qǐng)賞賜我一個(gè)star吧-------->最簡(jiǎn)單方便的iOS輪播開源庫(kù):JYCarousel
如果你喜歡我的文章請(qǐng)點(diǎn)個(gè)喜歡哦_(樓主好生不要臉胺⑶帧)