目的:
構建自己的一個組件混巧,放在公司的私有pod庫中
然后可以通過cocoapod來導入這個pod庫
在構建私有庫之前趟大,先了解以下幾個基本基本...概念
repo(repository倉庫)
repo只是google用Python腳本寫的調(diào)用git的一個腳本横殴,主要是用來下載钩蚊、管理Android項目的軟件倉庫锻霎。
Pod(代碼庫)
分為
公有庫:放在外網(wǎng)上庙睡,其他開發(fā)者是可以訪問使用的
私有庫:放在本地或者內(nèi)網(wǎng)上事富,只有公司內(nèi)部的人員可以使用
創(chuàng)建公有Pod庫或者私有Pod庫, 實際上原理是一樣的, 都是基于git服務和repo協(xié)議技俐,不一樣的是, 兩者的版本索引查詢方式不一樣, 公有庫的podspec由CocoaPods/Specs管理, 而內(nèi)部私有使用的pod庫需要自己建立一個倉庫(Spec Repo)來管理podspec
podspec文件(spec說明書)
創(chuàng)建pod庫的時候會用到podspec文件將lib的一些信息,比如:版本號统台、作者名雕擂,鏈接地址等,以及其中用到的包括資源贱勃、源碼井赌、需要引用的framework,以及第三庫等等組織起來
Spec Repo(存放spec的倉庫)
Spec Repo,顧名思義,就是存放Spec文件的倉庫贵扰,就是一個容器仇穗,所有公開的Pods都在這個里面,是一個Git倉庫remote端.執(zhí)行 pod setup命令會clone該倉庫到本地的~/.cocoapods/repos目錄下戚绕,可以進入到這個目錄看到master文件夾就是這個官方的Spec Repo了纹坐。
Spec Repo倉庫保存了依賴庫的名稱,版本號,以及spec文件.
因為Spec Repo存放了所有的spec文件,所以很明顯它是一種集中式的依賴庫管理工具.
創(chuàng)建公有Pod庫或者私有Pod庫, 實際上原理是一樣的, 都是基于git服務和repo協(xié)議, 不一樣的是, 兩者的版本索引查詢方式不一樣, 公有庫的podspec由CocoaPods/Specs管理, 而內(nèi)部私有使用的pod庫需要自己建立一個倉庫來管理podspec.
好了,下面我們正式來構建私有的pod庫
構建私有pod庫
-
在公司的私有Git服務器上創(chuàng)建git倉庫:盛放自己的功能組件
1. 必須有文件夾 2. 必須有LICENSE文件(這個好像是通用的舞丛,如果創(chuàng)建項目的時候沒有耘子,直接從其他項目中拷過來一個就行) 3. 必須有 庫描述文件.podspec
-
在公司的私有Git服務器上創(chuàng)建git倉庫用來做內(nèi)部私有庫的Spec Repo(盛放所有功能組件的spec)
"這個Spec Repo必須添加到本地,否則組件clone不下來" pod repo add 庫的名字 庫的地址 比如:pod repo add ymtSpecs git@git.yaomaitong.net:iOSPods/ymtSpecs.git 執(zhí)行這個命令的人球切,必須得有這個庫的操作權限 將ymtSpecs添加到本地repo, 添加成功后可以在/.cocoapods/repos/目錄下可以看到官方的specs:master和剛剛加入的specs:ymtSpecs
-
編寫自己庫的podspec文件谷誓,自己的組件里放一份。
Pod::Spec.new do |s| s.name = "TestModule" s.version = "0.0.5" //版本號最好與組件中的tag保持一致欧聘,否則使用的時候拉取不到最新組件 s.summary = "Test" s.homepage = "http://gitlab.100credit.cn/xxx/TestModule" s.license = "MIT" s.author = { "yyy@163.com" => "yyy@163.com" } s.platform = :ios s.source = { :git => "http://gitlab.100credit.cn/xxx/TestModule.git", :tag => "#{s.version}" } s.source_files = "TestModule" //文件夾下全部拷貝片林,還有一種寫法: TestModule/*.{h,m} end
將這個文件放到spec repo一份
1. 修改podspec中的version
2. 提交代碼端盆,打Tag怀骤,注意:這個tag記得要提價到origin,默認是只在工作副本中打Tag焕妙,"tag = podspec中的version"
3. pod repo push [Specs庫名] Category.podspec 將podspec推送到 spec Repo中
遇到的問題
The NAME.podspec specification does not validate
用pod spec lint --verbose 驗證一下蒋伦,會打印出很多的詳細信息,此時打臃偃怠:The spec did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it).
所以痕届,我重新使用pod repo push Specs xx.podspec --allow-warnings 就成功了
-
fatal: unable to access '...url...': Failed to connect to ...host... port 443: Operation timed out
更新某個庫時,連接超時末患。
解決步驟:
1).pod repo
列出所有(公有庫研叫、私有庫的)本地庫,查看 cocoapods的本地庫路徑璧针,一般都是.cocoapods/repos/master
2). 從報錯信息中嚷炉,可以看到操作失敗的三方庫的名稱、版本號探橱,使用shell命令find
進行查找
find ~/.cocoapods/repos/master -iname 名稱
申屹,會返回在本地庫中的路徑绘证。前往該路徑
3). 三方庫文件夾下會有多個版本文件夾,找到報錯信息中的版本號對應的文件夾哗讥,里面會有一個xxx.podspec.json
嚷那,替換json中source下git地址(可以直接Google,也可以在GitHub上搜索該庫名稱杆煞,看項目介紹魏宽,是否是這個庫的鏡像)。