項(xiàng)目想要模塊化唯欣、組件化居触,就必須了解如何創(chuàng)建CocoaPods庫(kù),如何創(chuàng)建CocoaPods庫(kù)呢痹屹,今天我們就來(lái)動(dòng)手開(kāi)始從頭建立屬于自己的CocoaPods庫(kù)吧章郁!
創(chuàng)建公有pod庫(kù)
1. 注冊(cè)CocoaPods賬戶(hù)信息(已注冊(cè)過(guò)請(qǐng)略過(guò))
創(chuàng)建一個(gè)開(kāi)源pod庫(kù), 首先我們需要注冊(cè)CocoaPods賬戶(hù), 使用trunk方式在終端執(zhí)行:
$ pod trunk register '郵箱地址' '用戶(hù)名' --description=‘描述內(nèi)容’ --verbose
可以使用GitHub郵箱和用戶(hù)名, 然后在你的郵箱中會(huì)收到確認(rèn)郵件在瀏覽器中點(diǎn)擊鏈接確認(rèn)即注冊(cè)成功,
成功之后可以終端執(zhí)行:
$ pod trunk me
2. 創(chuàng)建共享庫(kù)文件, 上傳到公有倉(cāng)庫(kù)
在GitHub上創(chuàng)建一個(gè)公開(kāi)項(xiàng)目,創(chuàng)建指南 Using Pod Lib Create
如果自己新建的庫(kù)志衍,可以用下面代碼創(chuàng)建
$ pod lib create 庫(kù)名
項(xiàng)目中必須包含這幾個(gè)文件:
1. 共享文件夾:文件夾存放著你要共享的內(nèi)容, 也就是其他人pod得到的文件, .podspec文件中的
source_files需要指定此文件路徑及文件類(lèi)型
2. LICENSE:開(kāi)源許可證暖庄,默認(rèn)一般選擇MIT;
3. README.md:倉(cāng)庫(kù)說(shuō)明
4. 庫(kù)描述文件.podspec:本庫(kù)的各項(xiàng)信息描述, 需要提交給CocoaPods, pod通過(guò)這個(gè)文件查找到你共享的庫(kù).
然后可以使用SourceTree等工具上傳你的代碼到公共倉(cāng)庫(kù), 或使用命令行上傳代碼到遠(yuǎn)端倉(cāng)庫(kù), 如何操作可以移步:Git常用命令.
3. 編輯*.podspec文件
.podspec
是用Ruby
的配置文件,描述你項(xiàng)目的信息楼肪,現(xiàn)在創(chuàng)建庫(kù)后已自動(dòng)生成*.podspec文件
自己想要?jiǎng)?chuàng)建podspec文件雄驹,執(zhí)行以下命令
$ pod spec create 庫(kù)名
.podspec
文件內(nèi)容
Pod::Spec.new do |s|
s.name = "LMBannerView" # 項(xiàng)目名稱(chēng)
s.version = "0.0.1" # 版本號(hào) 與 你倉(cāng)庫(kù)的 標(biāo)簽號(hào) 對(duì)應(yīng)
s.summary = "輪播圖" # 項(xiàng)目簡(jiǎn)介
s.description = <<-DESC
這中間寫(xiě)描述內(nèi)容
DESC
s.homepage = "https://github.com/1805441570@qq.com/test" # 你的主頁(yè)
s.license = { :type => 'MIT', :file => 'LICENSE' } # 開(kāi)源證書(shū)
s.author = { "limeng" => "1805441570@qq.com" } # 作者信息
# 你的倉(cāng)庫(kù)地址,不能用SSH地址
s.source = { :git => "https://github.com/limeng99/LMBannerView", :tag => "0.0.1"}
# 代碼位置淹辞, LMBannerView/**/*.{h,m} 表示 ** 文件夾下所有的.h和.m文件
s.source_files = "LMBannerView/Classes/*.{h,m}"
s.requires_arc = true # 是否啟用ARC
s.platform = :ios, "8.0" # 平臺(tái)及支持的最低版本
s.frameworks = "UIKit", "Foundation" # 支持的框架
# s.dependency "AFNetworking", "~> 2.3" # 依賴(lài)庫(kù)
end
驗(yàn)證 .podspec
文件的格式是否正確医舆,cd
到 *.podspec
文件所在的目錄下
$ pod lib lint 庫(kù)名.podspec --allow-warnings
例如: $ pod lib lint LMBannerView.podspec --allow-warnings
驗(yàn)證成功會(huì)出現(xiàn):
-> LMBannerView (0.0.1)
LMBannerView passed validation.
4. 給倉(cāng)庫(kù)打Tag
標(biāo)簽相當(dāng)于將你的倉(cāng)庫(kù)的一個(gè)壓縮包,用于穩(wěn)定存儲(chǔ)當(dāng)前版本象缀。標(biāo)簽號(hào)與你在 s.version = "0.0.1"
的版本號(hào)一致 0.0.1
創(chuàng)建標(biāo)簽
$ git tag -a 0.0.1 -m '標(biāo)簽說(shuō)明'
推送到遠(yuǎn)程
$ git push origin --tags
5. 發(fā)布 *.podspec
倉(cāng)庫(kù)目錄下執(zhí)行
$ pod trunk push LMBannerView.podspec --allow-warnings
將你的 *.podspec 發(fā)布到公有的 speecs 上蔬将,這一步操作包括:
1. 更新本地 pods庫(kù) ~/.cocoaPods.repo/master
2. 驗(yàn)證*.podspec格式是否正確
3. 將 *.podspec 文件轉(zhuǎn)成 JSON 格式
4. 對(duì) master 倉(cāng)庫(kù)進(jìn)行合并、提交
成功后會(huì)出現(xiàn)Congrats
信息如下:
limMac-2:LMBannerView limengmeng$ pod trunk push LMBannerView.podspec --allow-warnings
Updating spec repo `trunk`
Validating podspec
-> LMBannerView (0.1.3)
- WARN | github_sources: Github repositories should end in `.git`.
- 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 and one is not being generated automatically. (in target 'App' from project 'App')
Updating spec repo `trunk`
--------------------------------------------------------------------------------
?? Congrats
?? LMBannerView (0.1.3) successfully published
?? December 6th, 02:40
?? https://cocoapods.org/pods/LMBannerView
?? Tell your friends!
--------------------------------------------------------------------------------
6. 使用倉(cāng)庫(kù)
發(fā)布到Cocoapods后央星,在終端更新本地pods倉(cāng)庫(kù)信息
$ pod setup
$ pod search LMBannerView
如果`search`出現(xiàn)以下錯(cuò)誤:
[!] Unable to find a pod with name, author, summary, or description matching `LMBannerView`
刪除 cocoapods 的索引霞怀,然后重新 search
$ rm ~/Library/Caches/CocoaPods/search_index.json
$ pod search LMBannerView
終端輸出:Creating search index for spec repo 'artsy'.. Done!
會(huì)觸發(fā)cocoapods重新拉這個(gè)索引文件
7. 更新維護(hù)
- 更新
*.podspec
中的版本號(hào) - 打上標(biāo)簽推送流程
-
pod trunk push *.podspec
推送到pods
倉(cāng)庫(kù)
8. 遇到的問(wèn)題
xcodebuild: Returned an unsuccessful exit code.
error,*.podspec
文件里面設(shè)置的s.ios.deployment_target = '8.0'
莉给,最低支持版本為8.0
毙石,而在代碼里面用到 了xib
,里面勾了Use Safe Area Layout Guides
颓遏,項(xiàng)目支持最低版本為9.0
徐矩,Build
不會(huì)報(bào)錯(cuò),執(zhí)行pod lib lint *.podspec
報(bào)xcodebuild: Returned an unsuccessful exit code.
叁幢,原來(lái)是Use Safe Area Layout Guides
的問(wèn)題滤灯,修改*.podspec
文件s.ios.deployment_target = '9.0'
修復(fù)了這個(gè)問(wèn)題xib
報(bào)Use Safe Area Layout Guides
error, 修改xib
的Builds for
選項(xiàng) 改為Deployment Target (9.0)
創(chuàng)建私有庫(kù)
私有Pod庫(kù)和公有Pod庫(kù)的創(chuàng)建方式?jīng)]有什么區(qū)別, 不一樣的是管理他們的spec repo不一樣
所以我們需要自己創(chuàng)建一個(gè)跟CocoaPods/Specs類(lèi)似的倉(cāng)庫(kù)來(lái)管理內(nèi)部創(chuàng)建的Pod庫(kù)的podspec文件, 供內(nèi)部人員更新和依賴(lài)使用內(nèi)部Pod組件庫(kù)。
私有repo的構(gòu)建形式有兩種, 一種是私有g(shù)it服務(wù)器上面創(chuàng)建曼玩,一種是本機(jī)創(chuàng)建鳞骤。本機(jī)創(chuàng)建請(qǐng)參考官方文檔:Private Pods.
這里介紹的是在公司內(nèi)部搭建的git服務(wù)器上面創(chuàng)建整個(gè)服務(wù)的方式。
1. 創(chuàng)建一個(gè)git倉(cāng)庫(kù)用來(lái)做內(nèi)部私有庫(kù)的Spec Repo
在私有服務(wù)器創(chuàng)建一個(gè)倉(cāng)庫(kù),一個(gè)用來(lái)存放所有共享庫(kù)的podspec, 這里創(chuàng)建好之后的內(nèi)部SSH協(xié)議地址是:git@git.xxxx:podspecs/xxx.git, 創(chuàng)建的私有倉(cāng)庫(kù)給到的http/https地址也一樣.終端輸入命令:
$ pod repo add PodSpec git@git.xxxx:podspecs/xxx.git
將PodSpec添加到本地repo, 添加成功后可以在/.cocoapods/repos/目錄下可以看到官方的specs:master和剛剛加入的specs:PodSpec
2. 創(chuàng)建私有Pod組件庫(kù)
這一步跟上面創(chuàng)建共有pod庫(kù)方式是一致的黍判。即創(chuàng)建git工程豫尽,podspace文件,pod lib lint , 打tag 顷帖。但不是用trunk方式提交到master上
3. 將podspec加入私有Sepc repo中
公有庫(kù)使用trunk方式將.podspec文件發(fā)布到CocoaPods/Specs, 內(nèi)部的pod組件庫(kù)則是添加到我們第一步創(chuàng)建的私有Spec repo中去, 在終端執(zhí)行:
$ pod repo push podspec名稱(chēng) Demo.podspec
添加成功之后PodSpec中會(huì)包含新建Demo庫(kù)的podspec信息, 可以前往~/.cocoapods/repos下的PodSpec文件夾中查看, 同時(shí)git服務(wù)器中的遠(yuǎn)端也更新了.
4.查找和使用內(nèi)部組件庫(kù)
執(zhí)行pod search Demo庫(kù) 就能查到剛剛創(chuàng)建好的庫(kù)了美旧,然后在想要使用此組件的工程的Podfile中加入pod 'Demo', '~>0.0.1'即可使用內(nèi)部組件啦渤滞!
值得注意的是:必須在Podfile前面需要添加你的私有Spec repo的git地址source, pod install時(shí), 才能在私有repo中查找到私有庫(kù), 像這樣:
source 'git@git.xxx.net:podspecs/PodSpec.git'
platform :ios, '9.0'
target "test" do
pod 'Demo', '~>0.0.1'
end
本文首發(fā)于我的個(gè)人博客 https://limeng99.club/,轉(zhuǎn)載請(qǐng)標(biāo)明出處陈症。