團(tuán)隊(duì)管理開發(fā),資源整合維護(hù)精置,或者其他情況计寇,需要建立私有庫(kù),不被別人訪問脂倦。
如果是團(tuán)隊(duì)管理開發(fā)私有庫(kù)番宁,需要釋放私有庫(kù)權(quán)限給團(tuán)隊(duì)成員。
廢話不多說(shuō)了赖阻,開始蝶押。
另外兩篇文章:
Swift/Objective-C-使用Cocoapods創(chuàng)建/管理公共庫(kù)
Swift/Objective-C-使用Cocoapods創(chuàng)建/管理公共庫(kù)(高級(jí)用法)
梳理創(chuàng)建流程:
- 基礎(chǔ)
- 開始前準(zhǔn)備工作;
- 檢查庫(kù)名是否被占用火欧;
- 在遠(yuǎn)程端創(chuàng)建一個(gè)私有(Private)的索引庫(kù)(版本庫(kù)棋电,Spec repo)和一個(gè)私有(Private)的代碼庫(kù)(pod)茎截,待用;
- 將遠(yuǎn)程端私有索引庫(kù)添加(clone)到本地的
~/.cocoapods/repos
文件夾下赶盔,并查看結(jié)果企锌; - 創(chuàng)建本地工程(兩種方式);
- 添加自己封裝的源代碼于未、資源文件到工程指定目錄下撕攒;
- 配置工程中的.podspec文件;
- 通過
pod install
或pod update
命令更新demo工程沉眶,并編譯運(yùn)行是否有錯(cuò)誤(每次更改信息后都需要更新編譯demo工程打却,保證添加的源代碼、資源文件無(wú)誤谎倔,若無(wú)demo工程可忽略此步驟)柳击; - 通過Pod命令驗(yàn)證本地.podspec文件(若有錯(cuò)誤,修改后再次驗(yàn)證片习,直到通過驗(yàn)證)捌肴;
- 通過Git命令提交本地工程到遠(yuǎn)程端的私有代碼庫(kù),并且添加tag藕咏;
- 通過Pod命令驗(yàn)證遠(yuǎn)程端.podspec文件(若有錯(cuò)誤状知,修改后再次驗(yàn)證,直到通過驗(yàn)證)孽查;
- 提交.podsepc文件到私有索引庫(kù)饥悴,并更新到本地私有索引庫(kù)(至此完成私有庫(kù)的創(chuàng)建);
- 檢驗(yàn)1:通過
pod search 私有庫(kù)名
命令搜索自己的私有庫(kù)盲再; - 檢驗(yàn)2:新建測(cè)試項(xiàng)目西设,在Podfile中引入自己的私有庫(kù)
pod '私有庫(kù)'
,及引入時(shí)的注意事項(xiàng)答朋,然后再次檢查是否可引入贷揽,是否可用; - 中級(jí)
- 現(xiàn)有私有庫(kù)的更新管理維護(hù)梦碗;
- 本地索引庫(kù)管理的其他命令禽绪;
一、開始前的準(zhǔn)備
- GitHub或碼云或GitLab或其他存儲(chǔ)庫(kù)的賬號(hào)(我這里用的是GitLab)洪规;
- 用Sourcetree管理自己的私有庫(kù)(需要注冊(cè)Sourcetree賬號(hào))印屁,或者通過終端命令進(jìn)行管理(以終端命令為例);
二斩例、檢查你要?jiǎng)?chuàng)建的私有庫(kù)的庫(kù)名是否已經(jīng)被占用
為什么我們要先檢查一下自己創(chuàng)建的私有庫(kù)的庫(kù)名是否被占用呢雄人?因?yàn)槲抑皠?chuàng)建公共庫(kù)的時(shí)候,我的庫(kù)名在Cocoapods中已存在樱拴,在驗(yàn)證的時(shí)候沒提示我?guī)烀徽加媚埽阶詈笠徊教峤坏臅r(shí)候提交不到GitHub上洋满,說(shuō)我的庫(kù)名已被占用,所以只能重新來(lái)一遍了珍坊。另一方面牺勾,如果你的私有庫(kù)和公共庫(kù)有重名的,當(dāng)你在項(xiàng)目的Podfile文件pod你的私有庫(kù)時(shí)阵漏,當(dāng)pod找不到你的私有庫(kù)就會(huì)去公共庫(kù)搜索有沒有和這個(gè)庫(kù)名一樣的庫(kù)驻民,如果有就會(huì)下載這個(gè)同名的公共庫(kù)了,這樣pod的就不是自己想引入的私有庫(kù)了履怯,所以需要在創(chuàng)建私有代碼/索引庫(kù)前檢查一下自己創(chuàng)建的私有庫(kù)的庫(kù)名是否被占用回还。這里以私有索引庫(kù)名為例。
$ pod search JYPrivateRepoTest0
[!] Unable to find a pod with name, author, summary, or description matching `JYPrivateRepoTest0`
如上信息叹洲,沒有搜索到與我的庫(kù)名相關(guān)信息柠硕,說(shuō)明該庫(kù)名沒有被占用,可以使用运提』热幔或者搜索到幾個(gè)或許多與你的庫(kù)名相似的庫(kù),你仔細(xì)瀏覽一下有沒有和你一樣的庫(kù)名民泵,若沒有則可以使用癣丧。
注意:
要記住自己創(chuàng)建的私有庫(kù)名一定不要跟Github上的第三方庫(kù)重名,否則會(huì)搜不到栈妆。即便能搜索得到胁编,pod進(jìn)來(lái)的庫(kù)也不一定是你自己的私有庫(kù),有可能是Github上重名的公共第三方庫(kù)鳞尔,而不是自己的私有庫(kù)嬉橙。因?yàn)閜od集成時(shí)會(huì)先從Github上的公共第三方庫(kù)查找,然后才是私有庫(kù)中查找铅檩。
三憎夷、在遠(yuǎn)程端創(chuàng)建一個(gè)私有索引庫(kù)(版本庫(kù))和一個(gè)私有代碼庫(kù)(待用)
我這里是在GitLab上創(chuàng)建的私有索引庫(kù)和私有代碼庫(kù)莽鸿,根據(jù)自己的情況在相應(yīng)平臺(tái)創(chuàng)建你的私有索引庫(kù)和私有代碼庫(kù)昧旨。
-
創(chuàng)建一個(gè)私有索引庫(kù),庫(kù)名為
JYPrivateRepoTest0
祥得,如下圖所示:注意:
可見等級(jí) 選擇的是私有
選項(xiàng)兔沃。如果在GitHub上創(chuàng)建,那選擇的是Private
選項(xiàng)级及。 -
創(chuàng)建一個(gè)私有代碼庫(kù)乒疏,庫(kù)名為
JYPrivateLibTest0
,如下圖所示:
注意:
如果你計(jì)劃在本地創(chuàng)建pod饮焦,你應(yīng)該具有對(duì)git地址push的訪問權(quán)怕吴。
四窍侧、添加(clone)遠(yuǎn)程端私有索引庫(kù)到本地
- 將遠(yuǎn)程端私有索引庫(kù)(Repo)添加到本地的
~/.cocoapods/repos
文件夾下,運(yùn)行命令如下:
/// pod repo add JYPrivateRepoTest0 [私有索引庫(kù)地址]
$ pod repo add JYPrivateRepoTest0 https://git.asd.net/pod/JYPrivateRepoTest0.git
Cloning spec repo `JYPrivateRepoTest0` from `https://git.asd.net/pod/JYPrivateRepoTest0.git`
-
查看
~/.cocoapods/repos
文件夾下clone的私有索引庫(kù)转绷,如下圖:
注意:
master文件夾是cocoapods創(chuàng)建的公共索引庫(kù)文件夾伟件,其中存放的是cocoapods中所有公共庫(kù)的各個(gè)版本的.podsepc文件。JYPrivateRepoTest0文件夾是自己創(chuàng)建的私有索引庫(kù)文件夾议经,存放的是自己的私有庫(kù)下各個(gè)版本的.podsepc文件斧账。 校驗(yàn)?zāi)惚镜靥砑拥乃接兴饕龓?kù)的安裝是否成功,并準(zhǔn)備好煞肾。命令如下:
$ cd ~/.cocoapods/repos/JYPrivateRepoTest0
$ pod repo lint
五咧织、創(chuàng)建本地私有代碼庫(kù)工程(兩種方式)
- 通過終端Pod命令創(chuàng)建本地私有代碼庫(kù)模板工程(項(xiàng)目)
- 打開終端,cd 到存放工程的目標(biāo)目錄下
$ cd Desktop/PrivateRepository/
- 創(chuàng)建本地私有代碼庫(kù)(模板工程)到目標(biāo)目錄下籍救,命令如下:
/// pod lib create [工程名] --template-url=URL(自己的工程模板地址)
/// 工程名:一般和遠(yuǎn)程端私有代碼庫(kù)名一致
/// 注意:要使用自己的私有代碼庫(kù)模板习绢,可以添加參數(shù)--template-url =URL,其中URL是包含兼容模板的git repo蝙昙。
$ pod lib create JYPrivateLibTest0
在創(chuàng)建過程中毯炮,需要配置幾個(gè)信息,如下:
Cloning `https://github.com/CocoaPods/pod-template.git` into `JYPrivateLibTest0`.
Configuring JYPrivateLibTest0 template.
------------------------------
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. )
# 私有庫(kù)應(yīng)用的平臺(tái)
What platform do you want to use?? [ iOS / macOS ]
> iOS
# 私有庫(kù)使用的編程語(yǔ)言
What language do you want to use?? [ Swift / ObjC ]
> Swift
# 是否需要在私有代碼庫(kù)工程中生成一個(gè)demo應(yīng)用程序(項(xiàng)目)耸黑,需要或不需要根據(jù)自己喜好選擇(建議選擇Yes桃煎,因?yàn)檫@樣你可以隨時(shí)查看你創(chuàng)建的庫(kù)是否正確可用)
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
# 是否需要使用測(cè)試框架,根據(jù)自己情況選擇大刊,我這里不需要
Which testing frameworks will you use? [ Quick / None ]
> None
# 是否需要做基于視圖的測(cè)試为迈,根據(jù)自己情況選擇,我這里不需要
Would you like to do view based testing? [ Yes / No ]
> No
Running pod install on your new library.
Analyzing dependencies
Fetching podspec for `JYPrivateLibTest0` from `../`
Downloading dependencies
Installing JYPrivateLibTest0 (0.1.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `JYPrivateLibTest0.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
[!] Automatically assigning platform `ios` with version `9.3` on target `JYPrivateLibTest0_Example` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
Ace! you're ready to go!
We will start you off by opening your project in Xcode
open 'JYPrivateLibTest0/Example/JYPrivateLibTest0.xcworkspace'
To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `http://guides.cocoapods.org/making/making-a-cocoapod`.
關(guān)于以上配置問題的解釋請(qǐng)參見Cocoapods - Using Pod Lib Create
注意:
若是Objective-C平臺(tái)會(huì)有不同的問題需要配置缺菌,這里以Swift為例葫辐。
至此本地私有代碼庫(kù)模板工程創(chuàng)建完成。
若選擇了創(chuàng)建demo工程伴郁,本地私有代碼庫(kù)模板工程創(chuàng)建完成后耿战,會(huì)自動(dòng)打開demo工程。
pod lib create 工程名
命令焊傅,會(huì)自動(dòng)創(chuàng)建.podspec
文件剂陡、README.md
文件和LICENSE
開源協(xié)議文件等。
- 終端cd 到PrivateRepository目錄下狐胎,運(yùn)行tree命令查看本地私有代碼庫(kù)模板工程目錄結(jié)構(gòu)鸭栖,如下:
$ tree JYPrivateLibTest0 -L 2
JYPrivateLibTest0
├── Example # demo工程文件夾
│ ├── JYPrivateLibTest0
│ ├── JYPrivateLibTest0.xcodeproj
│ ├── JYPrivateLibTest0.xcworkspace
│ ├── Podfile # demo的依賴描述文件
│ ├── Podfile.lock
│ ├── Pods # demo依賴的第三方庫(kù)文件夾
│ └── Tests
├── JYPrivateLibTest0 # 存放源代碼和資源文件的文件夾
│ ├── Assets # 存放資源文件的文件夾
│ └── Classes # 存放源文件的文件夾
├── JYPrivateLibTest0.podspec # 庫(kù)的配置文件
├── LICENSE # 開源協(xié)議,默認(rèn)MIT
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
10 directories, 5 files
可通過brew 安裝 tree握巢,命令: $ brew install tree
文件夾目錄結(jié)構(gòu)晕鹊,Example
文件夾下是demo工程,JYPrivateLibTest0
文件夾下是存放私有代碼庫(kù)源代碼文件、資源文件等溅话,如下圖:
- 將遠(yuǎn)程端的私有代碼庫(kù)clone到本地目標(biāo)目錄下,然后添加幾個(gè)必要的文件
通過Sourcetree軟件或者終端Git命令飞几,將遠(yuǎn)程端的私有代碼庫(kù)clone到本地目標(biāo)目錄下带射,此步驟不過多描述,git命令參考循狰。
cd 到你clone的私有代碼庫(kù)工程目錄下窟社,在目錄下添加
.podspec
文件到工程中,命令如下:
/// 以下三種方式都可以創(chuàng)建.podspec文件绪钥,選擇其中一種創(chuàng)建即可
/// pod spec create [文件名(與工程名一致)]
$ pod spec create JYPrivateLibTest0
或者
/// touch [文件名.podspec]
$ touch JYPrivateLibTest0.podspec
或者
/// vim [文件名.podspec]
$ vim JYPrivateLibTest0.podspec
- 添加README.md文件和LICENSE開源協(xié)議文件灿里,可以從別的項(xiàng)目中copy過來(lái),然后修改修改程腹。如果你在第三步創(chuàng)建私有代碼庫(kù)的時(shí)候匣吊,選擇創(chuàng)建了這兩個(gè)文件,那這步請(qǐng)?zhí)^寸潦。
注意:
LICENSE開源協(xié)議文件必須要有色鸳,因?yàn)镃ocoapods不允許沒有LICENSE開源協(xié)議文件的庫(kù)到Cocoapods上。
六见转、添加自己封裝的源代碼命雀、資源文件到工程目錄下
在Xcode打開的demo工程目錄下的pod中,找到ReplaceMe.swift文件斩箫,右擊Show in Finder吏砂,查看源文件存放的真正目錄位置。Classes文件夾存放源代碼文件乘客,Assets文件夾存放資源文件狐血。
-
將自己封裝的源代碼文件、資源文件易核,分別放到Classes和Assets文件夾下即可匈织。將無(wú)用的ReplaceMe.swift文件刪除。
添加后的目錄牡直,如下圖:注意:
如果你不想用系統(tǒng)自動(dòng)幫你創(chuàng)建的Classes和Assets文件夾缀匕,那么你可以直接刪掉,根據(jù)自己喜好重新創(chuàng)建/存放相關(guān)內(nèi)容井氢。切記
不要忘記修改.podspec文件中相應(yīng)的路徑配置弦追,否則會(huì)由于路徑問題岳链,驗(yàn)證的時(shí)候找不到對(duì)應(yīng)的文件而驗(yàn)證失敗花竞。
七、配置工程中的.podspec文件
.podspec文件描述了Pod庫(kù)的一個(gè)版本。一個(gè)索引庫(kù)约急,隨著時(shí)間的推移零远,將有許多的版本。它包括關(guān)于應(yīng)該從何處獲取源厌蔽、使用什么文件牵辣、應(yīng)用構(gòu)建設(shè)置以及其他通用元數(shù)據(jù)(如其名稱、版本和描述)的詳細(xì)信息奴饮。
Specs Repo是GitHub上的存儲(chǔ)庫(kù)纬向,其中包含所有可用pods的列表。每個(gè)庫(kù)都有一個(gè)單獨(dú)的文件夾戴卜,其中包含該pod可用版本的子文件夾逾条。
在Xcode打開的demo工程中,找到
Podspec Metadata
文件夾下的工程名.podspec
文件投剥。如果沒有demo工程师脂,可以直接打開工程文件夾,然后找到.podspec文件江锨,然后右鍵選擇打開方式->文本編輯/Xcode吃警,或者終端vim
編輯等。我的配置如下:
Pod::Spec.new do |s|
s.name = 'JYPrivateLibTest0' #工程名稱
s.version = '1.0.0' # 版本號(hào)
s.summary = '這是一個(gè)私有測(cè)試庫(kù)啄育!' # 簡(jiǎn)短介紹
s.homepage = 'https://git.asd.net/pod/JYPrivateLibTest0' # 主頁(yè),這里要填寫可以訪問到的地址酌心,不然驗(yàn)證不通過
s.license = { :type => 'MIT', :file => 'LICENSE' } # 開源協(xié)議
s.author = { 'JYanshao' => '你的郵箱地址' } # 作者信息
s.source = { :git => 'https://git.asd.net/pod/JYPrivateLibTest0.git', :tag => s.version.to_s } # 遠(yuǎn)程端私有代碼庫(kù)地址,這里不支持ssh的地址挑豌,驗(yàn)證不通過谒府,只支持HTTP和HTTPS,最好使用HTTPS
s.ios.deployment_target = '8.0' # 支持的平臺(tái)及版本
s.requires_arc = true # 是否使用ARC浮毯,如果指定具體文件完疫,則具體的文件使用ARC
s.source_files = 'JYPrivateLibTest0/Classes/**/*' # 源代碼文件路徑,**/*表示Classes目錄及其子目錄下所有文件债蓝,如果有多個(gè)目錄下則用逗號(hào)分開壳鹤,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置
s.swift_version = '4.0' # 項(xiàng)目中使用的Swift版本饰迹,多個(gè)用“,”隔開
end
.podspec
文件中的配置參數(shù)說(shuō)明芳誓,請(qǐng)參見Cocoapods-Podspec語(yǔ)法參考 或者 使用Cocoapods創(chuàng)建/管理公共庫(kù)
八、更新demo工程啊鸭,并編譯運(yùn)行demo锹淌,是否成功
終端運(yùn)行$ cd Example/
命令,到Example文件夾目錄下赠制,然后運(yùn)行pod install
或pod update
命令更新demo工程赂摆,并在Xcode中編譯運(yùn)行demo,看是否有錯(cuò)誤,有錯(cuò)誤及時(shí)修改烟号,保證能運(yùn)行成功绊谭。有錯(cuò)誤存在會(huì)驗(yàn)證不通過。(若無(wú)demo工程可忽略此步驟)
注意:
每次更改私有代碼庫(kù)工程中的相關(guān)信息后汪拥,都需要更新編譯demo工程达传,保證無(wú)誤。
九迫筑、通過Pod命令驗(yàn)證本地.podspec文件
該驗(yàn)證過程不會(huì)訪問網(wǎng)絡(luò)宪赶,且僅僅是一個(gè)驗(yàn)證不會(huì)添加文件到某文件夾下。
- 終端下脯燃,運(yùn)行pod驗(yàn)證命令逊朽,如下:
$ pod lib lint
或者
$ pod lib lint --allow-warnings /// --allow-warnings參數(shù):允許忽略警告
-> JYPrivateLibTest0 (1.0.0)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
JYPrivateLibTest0 passed validation.
顯示JYPrivateLibTest0 passed validation.
表示通過驗(yàn)證。
注意:
若驗(yàn)證過程中有錯(cuò)誤曲伊,驗(yàn)證失敗叽讳,修改后再次驗(yàn)證,直到通過驗(yàn)證坟募。
- 在驗(yàn)證過程中遇到的錯(cuò)誤:
- 錯(cuò)誤信息如下:
$ pod lib lint
[!] Unable to find a podspec in the working directory
原因:我所在的目錄不是JYPrivateLibTest0工程目錄下岛蚤,而是Example目錄下,驗(yàn)證時(shí)找不到要驗(yàn)證的.podspec文件懈糯,所以導(dǎo)致錯(cuò)誤涤妒。應(yīng)該cd到JYPrivateLibTest0工程目錄下,然后進(jìn)行命令驗(yàn)證赚哗。
- 錯(cuò)誤信息如下:
$ pod lib lint
-> JYPrivateLibTest0 (1.0.0)
- WARN | [iOS] swift: The validator used Swift 3.2 by default because no Swift version was specified. To specify a Swift version during validation, add the `swift_version` attribute in your podspec. Note that usage of the `--swift-version` parameter or a `.swift-version` file is now deprecated.
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
- NOTE | xcodebuild: warning: Swift 3 mode has been deprecated and will be removed in a later version of Xcode. Please migrate "App" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu. (in target 'App')
- NOTE | xcodebuild: warning: Swift 3 mode has been deprecated and will be removed in a later version of Xcode. Please migrate "JYPrivateLibTest0" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu. (in target 'JYPrivateLibTest0')
[!] JYPrivateLibTest0 did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it).
You can use the `--no-clean` option to inspect any issue.
仔細(xì)閱讀這條警告(WARN)她紫,大致意思是:你沒有指定使用的swift版本,驗(yàn)證器默認(rèn)使用的是swift 3.2屿储,可能會(huì)出現(xiàn)問題贿讹,希望你在驗(yàn)證期間指定Swift版本,請(qǐng)?jiān)趐odspec中添加“swift_version”屬性够掠。注意“--swift-version”參數(shù)或創(chuàng)建.swift-version隱藏文件的用法現(xiàn)在被棄用民褂。
解決方案:
在.podspec文件中添加s. swift_version = '4.0'
即可。
- 錯(cuò)誤信息如下:
解決方案:
打開Xcode疯潭,找到Preferences -> Locations -> Command Line Tools
赊堪,選擇一個(gè)Xcode版本即可,然后再驗(yàn)證竖哩。如下圖:
十哭廉、通過Git命令,提交本地工程到遠(yuǎn)程端的私有代碼庫(kù)相叁,并且添加tag
$ git add . 或者 $ git add -A
$ git status # 顯示代碼狀態(tài)
$ git commit -m 'Commit the private library for the first time'
$ git remote add origin https://git.asd.net/pod/JYPrivateLibTest0.git
$ git push -u origin master # 執(zhí)行成功遵绰,結(jié)果如下
Counting objects: 77, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (69/69), done.
Writing objects: 100% (77/77), 28.84 KiB | 3.60 MiB/s, done.
Total 77 (delta 17), reused 0 (delta 0)
To https://git.asd.net/pod/JYPrivateLibTest0.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
/// 添加tag標(biāo)記
$ git tag # 查看所有版本號(hào)
$ git tag -m 'First release' '1.0.0' 或者 $ git tag 1.0.0 或者 $ git tag -a '1.0.0' -m 'First release'
$ git push --tags 或者 $ git push --tag # 執(zhí)行成功辽幌,結(jié)果如下
Counting objects: 1, done.
Writing objects: 100% (1/1), 161 bytes | 161.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://git.asd.net/pod/JYPrivateLibTest0.git
* [new tag] 1.0.0 -> 1.0.0
上傳完代碼后,別忘了為這次提交添加tag街立,否則下一步驗(yàn)證會(huì)有問題舶衬,找不到相應(yīng)版本的.podspec文件埠通。
注意:
添加的tag版本號(hào)必須和.podspec文件中的s.version = '1.0.0'
版本號(hào)一致赎离。
Git教程
版本號(hào)-語(yǔ)義化版本控制規(guī)范
十一、通過Pod命令驗(yàn)證遠(yuǎn)程端私有代碼庫(kù)的.podspec文件
該驗(yàn)證過程檢查的是遠(yuǎn)程端的repo和相關(guān)tag標(biāo)記端辱,需要網(wǎng)絡(luò)梁剔。
終端運(yùn)行命令如下:
$ pod spec lint 或者 $ pod spec lint --allow-warnings
-> JYPrivateLibTest0 (1.0.0)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
Analyzed 1 podspec.
JYPrivateLibTest0.podspec passed validation.
JYPrivateLibTest0.podspec passed validation.
:通過驗(yàn)證。
pod spec lint
命令舞蔽,是用來(lái)驗(yàn)證.podspec文件及其他信息的規(guī)范荣病。
注意:
您的podspec應(yīng)該在沒有任何錯(cuò)誤或警告的情況下通過。若驗(yàn)證過程中有錯(cuò)誤渗柿,驗(yàn)證失敗个盆,修改后再次驗(yàn)證,直到通過驗(yàn)證朵栖。
- 在驗(yàn)證過程中遇到的錯(cuò)誤:
- 錯(cuò)誤信息如下:
$ pod spec lint
-> JYPrivateLibTest0 (1.0.0)
- ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://git.asd.net/pod/JYPrivateLibTest0.git /var/folders/qt/d9rd9h7n2m3cb9014qph7xkm0000gn/T/d20190225-68380-po85y6 --template= --single-branch --depth 1 --branch 1.0.0
Cloning into '/var/folders/qt/d9rd9h7n2m3cb9014qph7xkm0000gn/T/d20190225-68380-po85y6'...
warning: Could not find remote branch 1.0.0 to clone.
fatal: Remote branch 1.0.0 not found in upstream origin
) during validation.
Analyzed 1 podspec.
[!] The spec did not pass validation, due to 1 error.
該問題是由于我還沒有把代碼提交到遠(yuǎn)程端的私有代碼庫(kù)颊亮,還有沒有給代碼庫(kù)添加tag,就驗(yàn)證了陨溅,所以在驗(yàn)證的時(shí)候找不到對(duì)應(yīng)版本下的.podspec文件终惑。
解決方案:
1)將本地工程提交到遠(yuǎn)程端私有代碼庫(kù);2)給代碼庫(kù)添加tag门扇。
十二雹有、保存.podsepc文件并提交到遠(yuǎn)程端私有索引庫(kù)
將.podspec文件提交到遠(yuǎn)程端私有索引庫(kù),運(yùn)行命令如下:
$ pod repo push JYPrivateRepoTest0 JYPrivateLibTest0.podspec
Validating spec # 1. 驗(yàn)證規(guī)范
-> JYPrivateLibTest0 (1.0.0)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
Updating the `JYPrivateRepoTest0' repo # 2. 更新repo
Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.
Adding the spec to the `JYPrivateRepoTest0' repo # 3. 添加到本地repo
- [Add] JYPrivateLibTest0 (1.0.0)
Pushing the `JYPrivateRepoTest0' repo # 4. 提交到遠(yuǎn)程端的私有索引庫(kù)
pod repo push [REPO] [NAME.podspec]
此命令的執(zhí)行經(jīng)歷了四個(gè)步驟:
- 驗(yàn)證spec文件及其他信息的規(guī)范
- 更新本地的repo索引庫(kù)
- 添加工程中的spec文件到本地的私有索引庫(kù)中(會(huì)自動(dòng)創(chuàng)建工程文件夾和版本文件夾)
- 提交spec文件到遠(yuǎn)程端的私有索引庫(kù)中
至此就完成了私有庫(kù)的創(chuàng)建臼寄。
十三霸奕、檢驗(yàn)1:通過pod search 私有庫(kù)名
命令,搜索自己的私有庫(kù)
完成了私有庫(kù)的創(chuàng)建吉拳。那么搜索一下我們的私有庫(kù)吧铅祸,運(yùn)行
$ pod search JYPrivateLibTest0
搜索結(jié)果如下:
-> JYPrivateLibTest0 (1.0.0)
這是一個(gè)私有測(cè)試庫(kù)!
pod 'JYPrivateLibTest0', '~> 1.0.0'
- Homepage: https://git.asd.net/pod/JYPrivateLibTest0
- Source: https://git.asd.net/pod/JYPrivateLibTest0.git
- Versions: 1.0.0 [JYPrivateRepoTest0 repo]
(END)
十四合武、檢驗(yàn)2:新建測(cè)試項(xiàng)目临梗,pod '私有庫(kù)'
,再次檢查是否可引入稼跳,是否可用盟庞,及注意事項(xiàng)
新建一個(gè)工程,在Podfile文件中pod我們的私有庫(kù)汤善,pod 'JYPrivateLibTest0'
注意:
1)引入私有庫(kù)的時(shí)候什猖,除了pod 'JYPrivateLibTest0' 外還需要通過source
引入私有庫(kù)對(duì)應(yīng)的索引庫(kù)地址票彪,如:source 'https://git.asd.net/pod/JYPrivateRepoTest0.git' # 自己的私有索引庫(kù)地址
。
2)若你的私有庫(kù)還依賴了第三方公共庫(kù)或者自己的其他私有庫(kù)不狮,第三方公共庫(kù)或者自己的其他私有庫(kù)對(duì)應(yīng)的索引庫(kù)地址也需要引入降铸。
具體用法如下:
# Uncomment the next line to define a global platform for your project
platform :ios, '8.0'
use_frameworks!
# 引入自己的私有庫(kù)/第三方庫(kù) 對(duì)應(yīng)的索引庫(kù)地址
source 'https://git.asd.net/pod/JYPrivateRepoTest0.git' # 自己的私有索引庫(kù)地址
source 'https://github.com/CocoaPods/Specs.git' # 公共索引庫(kù)地址
target 'test2' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
# Pods for test2
target 'test2Tests' do
inherit! :search_paths
# Pods for testing
end
target 'test2UITests' do
inherit! :search_paths
# Pods for testing
end
pod 'JYPrivateLibTest0'
end
注意:
source 后邊是索引庫(kù)(版本庫(kù))的地址,而不是代碼庫(kù)的地址摇零。
若不引入索引庫(kù)地址推掸,在pod install
時(shí)會(huì)報(bào)找不到你的私有庫(kù)的錯(cuò)誤,或者其他錯(cuò)誤驻仅。
執(zhí)行 pod install
命令時(shí)谅畅,會(huì)拉取遠(yuǎn)程 Podflie 中 source 標(biāo)記的版本庫(kù)到本地的 repos 文件夾中宋光,然后在 版本庫(kù) 中搜索我們pod ' JYPrivateLibTest0' 的 JYPrivateLibTest0.podspec 文件弧轧。根據(jù) JYPrivateLibTest0.podspec 文件中描述的源碼地址下載并整合到項(xiàng)目中站宗。
中級(jí)
十五臼婆、對(duì)私有庫(kù)的更新和管理
- 修改已有模塊/添加新模塊枷踏,并更新私有代碼庫(kù)闹获,這里以添加新模塊為例硫惕。
-
將新模塊添加到Classes文件夾蛇受,如下圖所示:
修改.podspec配置文件雹顺,升級(jí)版本號(hào)丹墨、添加新模塊文件路徑,其他信息不需要修改无拗。
修改內(nèi)容如下:
s.version = '1.0.1' # 升級(jí)版本號(hào)
s.source_files = 'JYPrivateLibTest0/Classes/**/*', 'JYPrivateLibTest0/Classes/Constant/*' # 指定新模塊地址带到,我的新模塊和已有模塊目錄結(jié)構(gòu)及文件類型一樣,所以可以使用'JYPrivateLibTest0/Classes/**/*'英染,不需要重新指定路徑揽惹。這里只是個(gè)例子,看自己的情況是否需要添加相應(yīng)的文件的路徑四康。
cd 到demo工程目錄下搪搏,運(yùn)行
$ pod install
命令更新demo工程,然后編譯運(yùn)行demo闪金,看有沒有錯(cuò)誤疯溺,有錯(cuò)誤則修改。運(yùn)行
$ pod lib lint
命令驗(yàn)證本地工程中的.podspec文件哎垦,若有錯(cuò)誤修改后再驗(yàn)證囱嫩,直到?jīng)]有問題。上傳本地工程到遠(yuǎn)程端的私有代碼庫(kù)漏设,命令參考上面的第十步墨闲,這里不再累述。
- 錯(cuò)誤:在設(shè)置tag標(biāo)記的時(shí)候郑口,由于忘記寫“-m”參數(shù)鸳碧,造成如下錯(cuò)誤如下:
$ git tag '添加Constant模塊盾鳞,可根據(jù)路徑單獨(dú)pod' '1.0.1'
fatal: Failed to resolve '1.0.1' as a valid ref.
運(yùn)行
$ pod spec lint
命令驗(yàn)證遠(yuǎn)程端私有代碼庫(kù)中的.podspec文件,若有錯(cuò)誤修改后再驗(yàn)證瞻离,直到?jīng)]有問題腾仅。將新版本對(duì)應(yīng)的.podspec文件,提交到遠(yuǎn)程端私有索引庫(kù)和本地私有索引庫(kù)的套利。
至此完成私有庫(kù)新模塊的添加推励,修改私有庫(kù)步驟亦如此。檢驗(yàn)1:搜索剛更改的私有庫(kù)日裙,搜索結(jié)果如下:
-> JYPrivateLibTest0 (1.0.1)
這是一個(gè)私有測(cè)試庫(kù)吹艇!
pod 'JYPrivateLibTest0', '~> 1.0.1'
- Homepage: https://git.asd.net/pod/JYPrivateLibTest0
- Source: https://git.asd.net/pod/JYPrivateLibTest0.git
- Versions: 1.0.1, 1.0.0 [JYPrivateRepoTest0 repo]
- Subspecs:
- JYPrivateLibTest0/Constant (1.0.1)
(END)
- 檢驗(yàn)2:更新實(shí)際項(xiàng)目中的pod惰蜜,并測(cè)試使用昂拂。
十六、其他本地索引庫(kù)管理命令
- 刪除本地的一個(gè)私有索引庫(kù)抛猖,命令如下:
$ pod repo remove JYPrivateRepoTest0
- 把刪除的索引庫(kù)再加回來(lái)格侯,命令如下:
$ pod repo add JYPrivateRepoTest0 https://git.asd.net/pod/JYPrivateRepoTest0.git
- 如果我們要?jiǎng)h除私有Spec Repo下的某一個(gè)podspec怎么操作呢?此時(shí)無(wú)需借助Cocoapods财著,只需要cd到~/.cocoapods/repos/JYPrivateRepoTest0目錄下联四,刪掉庫(kù)目錄,然后再將Git的變動(dòng)push到遠(yuǎn)端倉(cāng)庫(kù)即可撑教。
/// 刪除庫(kù)目錄命令
cd ~/.cocoapods/repos/JYPrivateRepoTest0
rm -rf JYPrivateLibTest0
以上若有不妥請(qǐng)指正朝墩。
Swift/Objective-C-使用Cocoapods創(chuàng)建/管理公共庫(kù)(高級(jí)用法)
參考文章
使用Cocoapods創(chuàng)建/管理公共庫(kù)
iOS,制作屬于自己cocoapods,(framework,bundle)
iOS開發(fā)之Cocoapods的使用與私有pod的制作
Build with CocoaPods