隨著公司項(xiàng)目越來(lái)越多,不同項(xiàng)目間會(huì)有很多相同的功能代碼。比如:網(wǎng)絡(luò)獲取射富、信息彈框矢门、登陸等盆色,將這些封裝成模塊module做成Cocoapods私有庫(kù)或者Framework就很有必要了。這兒我想簡(jiǎn)單記錄下Cocoapods私有庫(kù)的搭建祟剔,如有錯(cuò)誤 歡迎指正隔躲。
Framework 見(jiàn)我另一篇文章:ios Framework制作 (和踩過(guò)的坑)
搭建Cocoapods私有庫(kù)
1、環(huán)境
Cocoapods環(huán)境峡扩,具體環(huán)境的配置過(guò)程其他文章有很多蹭越,就不說(shuō)了。
2教届、搭建
私有庫(kù)搭建組要有兩部分:創(chuàng)建 repo 私有庫(kù)的索引庫(kù) spec响鹃、創(chuàng)建私有庫(kù)并發(fā)布到索引庫(kù)。
<1>創(chuàng)建 repo 私有庫(kù)的索引庫(kù) spec
在git上創(chuàng)建索引庫(kù) spec案训,我這兒用碼云舉例买置,方法和創(chuàng)建項(xiàng)目是一樣的。
然后就有了索引庫(kù)的地址:https://gitee.com/*******/test-module-specs.git
將索引庫(kù)添加到本地倉(cāng)庫(kù)
// pod repo add specs庫(kù)名 specs庫(kù)地址
pod repo add TestModuleSpecs https://gitee.com/******/test-module-specs.git
查看是否添加成功
pod repo list
//可以看到已經(jīng)添加成功
TestModuleSpecs
- Type: git (master)
- URL: https://gitee.com/*********/test-module-specs.git
- Path: /Users/*******/.cocoapods/repos/TestModuleSpecs
<2>創(chuàng)建私有庫(kù)并發(fā)布到索引庫(kù)
第一步:先在git上創(chuàng)建私有庫(kù)强霎,還是以碼云舉例忿项。
然后就有了私有庫(kù)地址:
https://gitee.com/*************/test-module-one.git
第二步:創(chuàng)建私有庫(kù)模板
//創(chuàng)建私有庫(kù)模板
pod lib create TestModuleOne
//下面是私有庫(kù)的簡(jiǎn)單配置
//選擇平臺(tái)
What platform do you want to use?? [ iOS / macOS ]
> ios
//選擇編程語(yǔ)言
What language do you want to use?? [ Swift / ObjC ]
> objc
//選擇是否創(chuàng)建測(cè)試demo
Would you like to include a demo application with your library? [ Yes / No ]
> yes
//選擇測(cè)試框架
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> none
//是否視圖測(cè)試
Would you like to do view based testing? [ Yes / No ]
> no
//類(lèi)前綴
What is your class prefix?
> LU
這就得到了庫(kù)模板:
這就創(chuàng)建好了私有庫(kù)模塊了
編輯私有庫(kù)索引 TestModuleOne.podspec
version 功能版本,建議和tag保持一致城舞,版本從0.1.0開(kāi)始轩触。
summary 功能概要,需要填寫(xiě)更新家夺,否則lint檢測(cè)無(wú)法通過(guò)脱柱。
description 功能描述,可以選擇性刪除拉馋,否則lint檢測(cè)無(wú)法通過(guò)榨为。
homepage 資源首頁(yè),私有庫(kù)對(duì)應(yīng)的瀏覽器地址煌茴。
resource 資源地址随闺,git克隆地址。建議使用http/https蔓腐,git類(lèi)型有權(quán)限控制矩乐。
source_file 類(lèi)資源文件,默認(rèn)Classes下的所有文件回论,放置私有庫(kù)核心文件绰精。
resources Bundle資源文件(不推薦使用)撒璧,會(huì)合并至MainBundle中,訪問(wèn)便利笨使,但會(huì)存在命名沖突問(wèn)題卿樱。個(gè)別SDK必須放在MainBundle中才能使用,比如微博SDKA蛞7钡鳌!靶草。
resource_files Bundle資源文件(推薦使用)蹄胰,單獨(dú)的Bundle文件,不與MainBundle合并奕翔,使用內(nèi)部資源時(shí)和MainBundle路徑有區(qū)別TU!派继!宾袜。
exclude_files 指定不被包含的文件、目錄
vendored_libraries 內(nèi)部包含的.a靜態(tài)庫(kù) 例如'ModuleName/Classes/Lib/*.{a}'
vendored_framework 內(nèi)部包含的.framework靜態(tài)庫(kù) 例如'ModuleName/Classes/Framework/***.framework'
static_framework 指定pod加靜態(tài)庫(kù)標(biāo)簽 true/false
指定支持的架構(gòu)驾窟,如果因?yàn)閕386等架構(gòu)問(wèn)題lint檢測(cè)不通過(guò)庆猫,可以在檢測(cè)時(shí)添加 --skip-import-validation參數(shù)
s.xcconfig = {
'VALID_ARCHS' => 'armv7 arm64e armv7s arm64 x86_64',
}
如果支持單文件目錄下的文件引用,可以設(shè)置subspec
s.default_subspec = 'Core'
s.subspec 'Core' do |core|
core.dependency 'MBProgressHUD'
core.source_files = "DYFoundationFramework/Classes/**/*.{h,m}"
end
s.subspec 'OldCommonTools' do |oct|
oct.dependency 'SAMKeychain'
oct.source_files = "DY****Framework/Classes/Object-C/DY****Tools/**/*.{h,m}"
end
驗(yàn)證.podspec文件的格式是否正確
// 本地驗(yàn)證pod能否通過(guò)驗(yàn)證绅络,如果失敗使用下面命令: pod lib lint --verbose查看原因
pod lib lint
// 或者使用pod lib lint --allow-warnings忽略警告錯(cuò)誤
pod lib lint --allow-warnings
// 當(dāng)庫(kù)中引用了其他三方庫(kù)
pod lib lint --allow-warnings --use-libraries
將私有庫(kù)代碼提交到git
git remote add origin https://gitee.com/********/test-module-one.git
git add .
git commit -a -m "第一次提交 版本為0.1.0"
git pull origin master --allow-unrelated-histories
git push -f origin master
git tag 0.1.0
git push origin 0.1.0
podspec文件中的地址要和遠(yuǎn)程倉(cāng)庫(kù)保持一致
git push -f origin master月培,本地強(qiáng)制上傳到遠(yuǎn)程,把遠(yuǎn)程的覆蓋恩急,這兒是第一次上傳杉畜,所有就用本地代碼覆蓋掉遠(yuǎn)端代碼了。
這兒就已經(jīng)吧私有庫(kù)代碼提交到git上了
第三步:將私有庫(kù)發(fā)布
//pod repo push 索引庫(kù)名 私有庫(kù).podspec
pod repo push TestModuleSpecs TestModuleOne.podspec --allow-warnings
//檢查一下是否成功
pod search TestModuleOne
-> TestModuleOne (0.1.0)
A short description of TestModuleOne.
pod 'TestModuleOne', '~> 0.1.0'
- Homepage: https://gitee.com/********/test-module-one
- Source: https://gitee.com/******/test-module-one.git
- Versions: 0.1.0 [TestModuleSpecs repo]
這就算是搭建完成了
補(bǔ)充
- XIB和storeboard文件需要放到Assets文件下衷恭,并在podspec文件中設(shè)置路徑.
s.resource_bundles = {
'xxx' => ['xxx/Assets/*']
}
- 庫(kù)中用到MRC文件此叠,需要在podspec中設(shè)置
non_arc_files = 'xxx/Classes/Bluetooth/protobuf-v1/xxx.{h,m}'
s.exclude_files = non_arc_files
s.subspec 'no-arc' do |sp|
sp.source_files = non_arc_files
sp.requires_arc = false
end
- 在庫(kù)中導(dǎo)入其他三方庫(kù)頭文件,需要用"#import <<#header#>>"方式匾荆,不然pod lib lint會(huì)失敗。例如:
#import <Masonry/Masonry.h>