步驟總覽
- 創建一個
git
倉庫用來做內部私有庫的Spec Repo
- 創建私有
Pod
組件庫 - 將
podspec
文件加入私有Sepc Repo
中 - 查找和使用內部組件庫
創建一個git
倉庫用來做內部私有庫的Spec Repo
image.png
創建私有Pod
組件庫
- 了解原理
- 用
pod install
命令的時候,為什么可以直接把代碼或者資源直接導入到我們的工程的?其實在我們的本地有目前支持cocoapods
所有項目的信息,我們可以打開~/.cocoapods/repos/Specs
目錄,目錄里面有很多的文件夾,在這些文件夾中我們項目中所使用的第三庫NIMSDK
,進入目錄下,我們搜索NIMSDK
,會發現有很多NIMSDK.podspec.json
文件,這是一個json格式的文件,打開后看到下面的代碼,對比這些同名字的,主要是版本號的不同
image.png
image.png - 上圖可以清楚看到有關
NIMSDK
的信息,比如git地址,開源協議,簡介等。有了這些數據cocoapods
就可以找到需要同步的資源的位置。在Specs
文件夾下的所有索引信息其實都是從cocoapods
的官方git
主分支https://github.com/CocoaPods/Specs上同步下來的。整個cocoapods的運作過程可以參照下圖
- 通過上述簡介,其實制作
cocoapods
倉庫的步驟無非就兩步:- 制作podspec索引文件,文件中放入需要同步的資源的
git
或者svn
地址 - 把制作的podspec索引文件推到官方的git遠程主分支上
- 制作podspec索引文件,文件中放入需要同步的資源的
- 用
- 如果我們的庫是新建的,那么別的使用者的本地分支上是沒有對應的
.podspec.json
文件的,也就相應獲取不到。這個時候使用者需要使用pod repo update
命令去遠程重新獲取更新本地分支~/.cocoapods/repos
文件是一個隱藏目錄,默認是看不到隱藏目錄的,但是我們可以通過Terminal
執行以下命令控制隱藏文件的顯示與否
defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder
顯示
defaults write com.apple.finder AppleShowAllFiles -boolean false ; killall Finder
隱藏- pod install 和 pod update 的區別
使用install 會優先安裝Podfile.lock文件中的內容,而不會主動更新Podfile.lock文件.而執行pod update方法會主動獲取最新的庫,并更新Podfile.lock文件,這兩個命令都會升級CocoaPods的spec
倉庫
- 創建私有
Spec Repo
-
Terminal
執行以下命令
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
pod repo add YTDevice https://github.com/Yakov1012/YTDevice.git
image.png - 前后可以看到
~/.cocoapods/repos/Specs
的變化,多出來我們自己新建的YTDeviceRepo
image.png
image.png
-
- 創建私有
Pod
組件庫- 在
Terminal
中cd
進入要創建項目的目錄
桌面目錄 - 然后執行以下命令
#pod lib create [項目名]
pod lib create YTDevice
- 之后他會問你四個問題
- 是否需要一個例子工程
- 選擇一個測試框架
- 是否基于View測試
- 類的前綴
- 在
image.png
- 回答完以上問題,會自動在桌面創建一個
YTDevice
項目
├── Example
demo APP
│ ├── YTDevice.xcodeproj
│ ├── YTDevice.xcworkspace
│ ├── Podfile
demo APP 的依賴描述文件
│ ├── Podfile.lock
│ └── Tests
demo APP 的依賴文件
│ ├── Pods
demo APP組件的目錄
├── LICENSE
開源協議 默認MIT
│ ├── Assets
資源文件
│ └── Classes
│ │ └── ReplaceMe.m 此處用于存放自己實現庫的相關代碼!!!
類文件
├── YTDevice.podspec
第三步要創建的podspec文件
└── README.md
MarkDown格式的README
- 添加實現代碼
- 在
YTDevice
項目中,添加我們的實現代碼,注意把實現代碼加入到ReplaceMe.m
所在目錄
image.png - 開發模式下測試pod庫的代碼
- 打開Example工程目錄Podfile文件
pod 'MyLib', :path => '../' # 指定路徑
- 然后在Example工程目錄下執行
pod update
命令安裝依賴,打開項目工程,可以看到庫文件都被加載到Pods子項目中了,不過它們并沒有在Pods目錄下,而是跟測試項目一樣存在于Development Pods/YTDevcie
中,這是因為我們是在本地測試,而沒有把podspec
文件添加到Spec Repo
中的緣故
image.png
- 在
- 本地
pod
組件庫,與遠程git
庫鏈接
在Terminal
中cd
進入YTDevice項目的根目錄,并執行以下命令
git add . # 添加文件
git commit -s -m "初始化YTDeviece庫"
git remote add origin https://github.com/Yakov1012/YTDevice.git #與遠端倉庫鏈接
git push origin master #提交到遠端倉庫
git tag -m "first release" '1.0.1' #打上標簽,這個很重要
git push --tags #推送tag到遠端倉庫
將podspec
文件加入私有Sepc Repo
中
- 配置YTDevice庫的
podspec
文件
image.png
#
# Be sure to run `pod lib lint YTDevice.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'YTDevice'
s.version = '1.0.1'
s.summary = 'YTDevice.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
設備工具類,可查詢當前設備名稱,版本號等
DESC
s.homepage = 'https://github.com/Yakov1012/YTDevice'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Yakov1012' => '1446486761@qq.com' }
s.source = { :git => 'https://github.com/Yakov1012/YTDevice.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'YTDevice/Classes/**/*'
# s.resource_bundles = {
# 'YTDevice' => ['YTDevice/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
- 編輯完
YTDevice.podspec
文件后,需要驗證一下這個YTDevice.podspec文件是否可用- 在
Terminal
中執行cd進入YTDevice項目根目錄然后,執行命令pod lib lint
-
看到以下輸出代表驗證成功
image.png
image.png
- 在
- Example工程目錄下執行
pod update
命令安裝依賴,打開項目工程,現在可以看到庫文件都被加載到Pods子項目中了
#pod 'YTDevice', :path => '../' # 指定路徑
pod 'YTDevice', :podspec => '../YTDevice.podspec' # 指定podspec文件
-
pod search
可能出現以下問題,根據提示解決即可
image.png
image.png
刪除Assets
和Classes
image.png
出現以上界面代表搜索成功
CocoaPods 在主干上發布pods
CocoaPods Trunk 是一個基于授權的CocoaPodsAPI服務。 要在主干上發布或者更新庫,需要注冊。
- 注冊CocoaPods賬戶信息
使用trunk方式, 在終端執行如下代碼
使用github郵箱和用戶名
pod trunk register 郵箱地址 '用戶名' --verbose
image.png
上圖會提示你打開你的郵箱,打開確認鏈接,即可注冊成功image.png
成功之后可以終端執行如下代碼:
pod trunk me
查看自己的注冊信息, 以后當你有了自己的開源Pod庫, 也可以用此方式隨時查看自己發布過的Pods
image.png
image.png
然后去郵箱驗證,驗證后,可以通過命令 pod trunk me來查看賬號所有Session
然后通過命令pod trunk push來發布pod。
image.png
image.png