目錄
- [創建與維護](# 1)
- 移除本地倉庫
- 移除本地倉庫中的lib.podspec
- Trunk發布自己的Pods
- 參考申明
<h2 id=1>創建與維護</h2>
下面詳細分為7個步驟來學習和掌握這項技能
<h3 id="1.1">創建并設置一個私有的Spec Repo</h3>
首先我們在github上建立一個自己的倉庫 LocalPod(倉庫名字任意)
-
在本地創建Spec Repo
# pod repo add [Private Repo Name] [對應的.git url] $ pod repo add LocalPod https://github.com/Maoyis/LocalPod.git
進入 ~/.cocoapods/repos 目錄此時就能看到我們自己的pod倉庫了
PS: 如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應Git倉庫的權限的前提下執行相同的命令添加這個Spec Repo即可。
<h3 id="1.2">創建PodLib(針對從零創建lib)</h3>
建好本地倉庫后我們來建一個自己的庫(lib), 如果已經有一個lib只需要添加并配置相應的podspec文件就行可忽略此步直接到下一階段。不過看看總不會有壞處的(?????)
創建一個lib(庫),詳見pod lib創建自己的lib。開始前首先得給我們的lib建一個版本庫(git,svn都行)創建一個
-
跳轉到一個用來保存自己庫的文件夾下來創建一個lib(推薦單獨創建一個專門用來保存自己的庫),并在該目錄執行
#pod lib create [libName] $ pod lib create QXFullGestureView
執行后正常情況下會有一個交互:
lib使用的語言swif/ObjeC
是否創建一個demo
選擇什么測試框架 [ Specta / Kiwi / None ]
是否進行UI測試
類的前綴
然后就會在該目錄創建一個lib
- 添加相關要生成lib的文件到Pod文件夾:(libName)/(libName)/Classes, 當然還要刪除ReplaceMe.m文件(只要在提交前刪除掉就好)
-
該步驟非必要,主要正對pod lib creat時創建過demo時觀察變化
$cd Example $pod update
此時再展開工程會發現文件已經添加到了項目中,但卻在開發模式pod文件加下(Development Pods)。
<h3 id="1.3">創建lib所對應的podspec文件-(針對已存在的lib)</h3>
- 在lib文件夾下執行
pod spec create QXFullGestureView https://github.com/Maoyis/MyLibrary.git
<h3 id="1.4">配置podspec與驗證</h3>
-
配置MyLibrary.podspec(ruby文件)詳情
s.name = 'QXFullGestureView ' ##名字必須與libname相同 s.version = '0.1.0' #版本必須為0.0.0格式 s.summary = 'all gesture view' #關于庫的一個簡短描述 s.description = <<-DESC TODO: 備注文字(較長描述) DESC #是否支持arc s.requires_arc = true #文件主頁 s.homepage = 'https://github.com/Maoyis/QXFullGestureView ' #開源協議 s.license = { :type => 'MIT', :file => 'LICENSE' } #作者信息 s.author = { 'Maoyis' => 'xxxxxx@qq.com' } #源文件所在網絡路徑 s.source = { :git => 'https://github.com/Maoyis/QXFullGestureView .git', :tag => s.version.to_s } #支持版本 s.ios.deployment_target = '7.0' #公開頭文件名 s.public_header_files = 'Pod/Classes/**/*.h' #依賴的框架 s.frameworks = 'UIKit', 'MapKit' #依賴庫 s.dependency 'AFNetworking', '~> 2.3'
-
完成上面主要配置(并非所有配置)后,驗證一下這個文件是否可用。執行:
#測試podspec檢查是否存在問題 $ pod lib lint //通過結果 -> QXFullGestureView (0.1.0) QXFullGestureView passed validation. # 如果失敗也可以試試, 針對無法正確找到lib.podspec $ pod lib lint --source https://github.com/Maoyis/QXFullGestureView .git #如果有警告可以忽略 $ pod lib lint --allow-warnings
<h3 id="1.5">本地測試與提交</h3>
- 準備:創建一個項目(如果沒pod lib創建或沒創建demo 否則跳過步驟1)配置Podfile
platform :ios, '7.0'
pod 'MyLibrary', :path => '……/podTest/QXFullGestureView ' #指定路徑
pod 'MyLibrary', :podspec => '……/QXFullGestureView .podspec' #指定podspec文件
pod install
-
編寫代碼,導入lib驗證是否可以正常使用
pod lib lint
由于人處于開發階段,此時再展開工程會發現文件已經添加到了項目中,但卻在開發模式Development Pods文件夾下(Development Pods)。
-
將lib提交到遠端倉庫
#跳轉到lib目錄下 $cd [libFolder] #由于lib已經在git版本控制下就不需要初始化,直接添加文件提交 $ git add . $ git commit -s -m "Initial Commit of Library" #添加遠端倉庫(這里要用到第二個空倉庫存儲lib區別第一個用來存儲本地Spec Repo) $ git remote add origin https://github.com/Maoyis/QXFullGestureView .git #提交到遠端倉庫 $ git push origin master
-
由于podspec文件中獲取Git版本控制的項目還需要tag號,所以我們要打上一個tag,
$ git tag -m "release 0.1.0" "0.1.0" $ git push --tags #推送tag到遠端倉庫
接下來我們就要發布測試版為正式版了(提交自己的podspec到私有或公有Spec Repo)
<h3 id="1.6">向私有的Spec Repo中提交自己的podspec</h3>
-
提交podspec到自己的Spec Repo
#pod repo [第一步建立的本地倉庫] [要上傳的podspec] $ pod repo push LocalPod QXFullGestureView.podspec
執行完畢后本地查看本地倉庫就可以看到對應的 文件夾/版本文件夾/上傳的podspec
并且你會看到
Pushing the `QXSpecRepo' repo
To https://github.com/Maoyis/LocalPod.git
對,他還會自動推送最新的Space Repo 到綁定的版本控制中心
-
搜索自己的lib
pod searchQXFullGestureView
到這里一個屬于自己的pod庫就大功告成了
<h3 id="1.7">在自己項目中使用</h3>
這里既不贅述了,唯一需要注意的是pod install、Updat默認不會去本地Pod文件夾查找lib,只會默認在master文件夾中尋找
所以我們必須在Podfile文件中加入查找源
#我們自己的私有spec倉庫的地址
source 'https://github.com/Maoyis/LocalPod.git'
#官方倉庫的地址
source 'https://github.com/CocoaPods/Specs.git'
<h3 id="1.8">更新維護podspec</h3>
添加新文件到Classes, 修改對應的podspec配置
-
驗證配置無誤
$pod lib lint
更新demo調用(非必要影響步驟)
pod update-
提交到遠端代碼托管服務器
$ git add . $ git commit -m"new version" $ git push origin master # 打上新tag $ git tag -m"version 1.0.1" "1.0.1" $ git push --tags
-
提交本地pod倉庫
$ pod repo push QXSpecRepo MyLibrary.podspec
<h2 id="2"> 移除本地倉庫</h2>
# pod repo remove [Private Repo Name]
$ pod repo remove QXSpecRepo
刪除前:
刪除后:
<h2 id="3">移除本地倉庫中的lib.podspec</h2>
前往~/.cocoapods/repos 將其對應文件夾文件夾刪除,更新本地倉庫
$ git add --all .
$ git commit -m "remove unuseful pods"
$ git push origin master
<h2 id="4">Trunk發布自己的Pods</h2>
-
注冊Trunk獲取推送資格
#通過郵箱和用戶名注冊 #pod trunk register [your mailbox] [your Name] --description='mybook' $ pod trunk register youaolanyi@foxmail.com Maoyis --description='mybook'
-
等到到一份郵件,點擊郵件中的鏈接后驗證是否可以查到自己信息:
pod trunk me
-
完成準備工作后就可以push spec到cocoapod了
#在工程根目錄(包含有.podspec) pod trunk push *.podspec
pod trunk push 命令會首先驗證你本地的podspec文件(是否有錯誤),之后會上傳spec文件到trunk,最后會將你上傳的podspec文件轉換為需要的json文件。
-
更新本地repo
#更新方式有多種,個人覺得這個比較保險 pod setup
查看本地文件夾(~/.cocoapods/repos/master/Specs)中repo master是否同步了自己的庫