最新的CocoaPods的使用教程(二)

背景

上一篇博客最新的CocoaPods的使用教程(一)里主要講解了CocoPods得簡單的日常使用。但是我們經常會想把自己的開源庫讓別人通過 **pod install **來使用。網上有好多博客說如何使用Cocoapods創(chuàng)建私有的podspec以及如何把自己的開源庫發(fā)布到CocoasPods等等,而我在看他們的時候好多寫的都比較模糊、比較費解。因為我比較笨吧,經過我一步一步琢磨親測過后,我有了一個很好地理解。在這里我盡量的詳細說明一下(當然我也有很多沒有考慮的地方,大家都是凡人嘛_,我也是煩人)

beautiful girl.jpg

前言

這一篇博客主要講解創(chuàng)建CocoaPods的私有庫。希望這一篇博客能讓你們少走點彎路,讓你私有庫靈活運用。下一篇博客會介紹創(chuàng)建CocoaPods的開源庫。主要講解內容目錄:

一. 創(chuàng)建項目的Podspec索引文件

二. 創(chuàng)建CocoaPods的私有庫

三. CocoaPods私有庫管理的原理

四. 常用命令匯總

一. 創(chuàng)建項目的Podspec索引文件

作用:索引作用,就是讓命令能找到我們的代碼(私有庫或開源庫)

創(chuàng)建命令:進入我們在工程根目錄或者開源庫根目錄中初始化一個Podspec文件:

pod spec create JYPodTest

該命令將在本目錄產生一個名為JYPodTest.podspec文件。用編輯器打開該文件,里面已經有非常豐富的說明文檔。下面介紹如何聲明第三方庫的代碼目錄和資源目錄,還有該第三方庫所依賴ios核心框架和第三方庫。這是我的podspec文件:

Pod::Spec.new do |s|

  s.name         = "JYPodTest"
  s.version      = "0.0.1"
  s.summary      = "open souurse Test With JYPodTest."
  s.homepage     = "https://git.coding.net/Dely/JYPodTest.git"
  s.license      = 'MIT'
  s.author             = { "Dely" => "jiayaoit@126.com" }
  s.platform     = :ios, "7.0"
  s.source       = { :git => "https://git.coding.net/Dely/JYPodTest.git", :tag => s.version }
  s.source_files  = "JYPodTest/*.{h,m}"
  s.resources = "*.jpg", "*.md", "*.mobileprovision"
  s.frameworks  = "UIKit", "Foundation"

end

各個參數(shù)含義:

s.name 聲明庫的名稱
s.summary 對這個庫的簡短說明介紹
s.version 當前庫的版本
s.homepage 聲明庫的主頁
s.license 所采用的授權版本
s.author 庫的作者
s.platform 庫運行的平臺和系統(tǒng)的最低版本
s.source 庫的倉庫地址以及版本號或者committed等
s.source_files 聲明庫的源代碼的位置,庫的真正路徑(一般是相對路徑)所以這個地方不能填錯。這個目錄下的文件都會進行編譯。
s.resources 存放我們不想?yún)⑴c編譯的資源文件
s.frameworks聲明了庫所依賴的系統(tǒng)核心庫
s.dependency我們開發(fā)的庫中也可能還依賴第三方庫,例如JSONKit,那么,就可以做如下聲明:s.dependency "JSONKit", "~> 1.4",如果有多個就寫多個

上面的屬性基本上夠用,如果還想引入更多參數(shù),請自行查看。
注意點:地址一定要寫正確,各個文件的路徑要寫正確,

二. 創(chuàng)建CocoaPods的私有庫

1. 把代碼托管到代碼托管平臺上

托管在github或者coding,SVN,公司私有服務器等,選擇哪一個沒影響(只是一個地址)。下面我把他托管到coding上(連接快點),
我采用只是包含源代碼的文件夾(如下目錄結構),xcode新建工程里面包含源代碼也一樣,只要路徑寫正確就ok。

源代碼目錄結構.png
  • 1.新建遠程倉庫:github或coding,公司內部服務器等等上都可以
遠程倉庫建立成功.png
  • 2.本地文件初始化倉庫
    • 如果是xcode新建一個工程,里面包含庫的源代碼。xcode會自動git init初始化倉庫,跳過初始化這一步
    • 如果是只是包含源代碼的文件夾,需要對這個源代碼文件夾初始化如下:
//進入源代碼根目錄
cd ~/Desktop/JYPodTest
//git初始化
git init
git init 初始化倉庫.png
  • 3.在庫根目錄下創(chuàng)建Podspec文件
//進入源代碼根目錄
cd ~/Desktop/JYPodTest
//創(chuàng)建Podspec文件
pod spec create JYPodTest
創(chuàng)建Podspec文件.png

現(xiàn)在我們的目錄如下:

目錄多一個podspec文件.png
//進入源代碼根目錄
cd ~/Desktop/JYPodTest
//添加到git得暫存區(qū)
git add -A
//提交到本地倉庫
git commit -m "first commit"
//添加遠端倉庫地址
git remote add origin https://git.coding.net/Dely/JYPodTest.git
//把本地代碼推送到遠端倉庫
git push -u origin master
庫的源代碼推送到遠程倉庫.png
遠程倉庫目錄.png
  • 5.對源代碼打tag,推送到遠端倉庫
    因為下面編輯podspec文件中需要獲取Git版本控制的源代碼,所以我們要打上一個tag,
    你也可以在podspec文件中保存你的commitid,或者分支來獲取相應的源代碼。不過基本上都是打tag。
//進入源代碼根目錄
cd ~/Desktop/JYPodTest
//新建一個tag
git tag 0.0.1
//tag推送到遠端
git push origin 0.0.1
打tag推送到遠端倉庫.png

2. 編輯podspec文件

做完上面這些就可以編輯podspec文件了。最開始已經講解了這個文件的寫法。
注意:庫目錄的各個路徑要對應,tag版本要和上面tag對應起來
podspec文件內容如下:

Pod::Spec.new do |s|

  s.name         = "JYPodTest"
  s.version      = "0.0.1"
  s.summary      = "open source Test With JYPodTest."
  s.homepage     = "https://git.coding.net/Dely/JYPodTest.git"
  s.license      = 'MIT'
  s.author             = { "Dely" => "jiayaoit@126.com" }
  s.platform     = :ios, "7.0"
  s.source       = { :git => "https://git.coding.net/Dely/JYPodTest.git", :tag => s.version }
  s.source_files  = "JYPodTest/*.{h,m}"
  s.resources = "*.jpg", "*.md", "*.mobileprovision"
  s.frameworks  = "UIKit", "Foundation"

end

編輯好保存起來推送到遠程倉庫:

cd ~/Desktop/JYPodTest
git add -A
git commit -m "修改pod spec文件"
git push origin master

3.驗證Podspec文件的有效性

注意 注意:本地驗證之前一定要保證我們的源代碼和tag已經同步到遠端倉庫,否則驗證會找不到相應代碼和tag的。

進入根目錄下驗證

cd ~/Desktop/JYPodTest
pod spec lint JYPodTest.podspec 
//可以使用下面。顯示具體問題。以及忽略所有警告
//pod spec lint JYPodTest.podspec --verbose --allow-warnings
podspec驗證通過.png

注意:錯誤error一定是不可以的,必須要把錯誤修改掉。警告最好修改,可是使用--allow-warnings忽略警告

如果Podspec文件無效,由于問題各種各樣,請Google解決!一定要保證文件的有效性哦,

  • 有人會為我為什么根目錄不要 LICENSE文件?不需要,因為我們現(xiàn)在是私有庫哦,不要驗證這些開源授權的東西。下一篇博客說道開源才會需要這個文件。
  • 有人會問我修改了podspec文件需要推送到遠端?需要。因為私有庫驗證會驗證你遠端的podspec文件
  • 有人會問我修改了podspec文件tag需要重新打和推送到遠端?不需要。除非你源代碼有改動,需要重新發(fā)一個版本。

4.本地測試Podspec文件

我們可以創(chuàng)建一個新的項目,在這個項目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用。 在Podfile中我們可以這樣編輯,有兩種方式

platform :ios, '7.0'
 
target 'JYTest' do
pod 'JYPodTest', :path => '~/Desktop/JYPodTest'  # 指定路徑
#pod 'JYPodTest', :podspec => '~/Desktop/JYPodTest/JYPodTest.podspec'  #指定podspec文件
end

然后執(zhí)行pod install命令安裝依賴,打開項目工程,可以看到庫文件都被加載到Pods子項目中了,不過它們并沒有在Pods目錄下,而是跟測試項目一樣存在于Development Pods/JYPodTest中,這是因為我們是在本地測試,而沒有把podspec文件添加到Spec Repo中的緣故。

EFB51088-8478-443A-BE22-D7D90F04EA35.png

在項目中編寫代碼,測試庫文件無誤后就可以開始下一步了,提交podspec到Spec Repo中。

5.向Repo提交私有的podspec

  • 1.新建一個我們保存podspec文件的遠端倉庫

我們的遠端的podspec倉庫地址為:https://git.coding.net/Dely/JYPodspec.git

遠程存放podmec的倉庫.jpg
  • 2.給cocoapods添加私有repo
    終端輸入:
pod repo add JYPod https://git.coding.net/Dely/JYPodspec.git

查看是否添加成功:

pod repo list
添加成功.png
  • 3.將JYPodTest.podspec文件添加到podspec遠端倉庫和本地repo/JYPod里
//兩個參數(shù):添加的私有repo名 JYPod  將要添加的Podspec路徑
 pod repo push JYPod ~/Desktop/JYPodTest/JYPodTest.podspec --allow-warnings

這個命令有兩個作用:

  • 第一:在本地repo/JYPod倉庫添加我們的podspec文件
  • 第二:在我們的遠端存放podspec倉庫里push最新的podspec文件

出線下面信息說明添加成功:


添加成功.png

此時打開本地~/.cocoapods/repos/JYPod目錄查看

本地私有repo.png

遠端podspec倉庫也會同步過來podspec信息:

遠端podspec.png

6.如何引用私有庫

上面都完成的話,那我們看看能不能搜索到我忙的私有庫

pod search JYPodTest
搜索到私有庫JYPodTest.png

如何使用呢?在前面本地驗證的工程里修改Podfile文件如下:


source 'https://git.coding.net/Dely/JYPodspec.git'
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '7.0'
 
target 'JYTest' do
pod 'JYPodTest', '~> 0.0.1'  #私有庫
pod 'JYCarousel', '~> 0.0.1' #開源庫
end

注意:我們添加我們的遠端podspec倉庫地址時,一定一定要把開源庫CococaPods的podspec的github地址寫上(上一篇博客有提到)

執(zhí)行pod update命令看看

pod update

工程變化:


工程變化.png

從上面項目可以看到,我們自己的庫文件已經出現(xiàn)在Pods子項目中的Pods子目錄下了,而不再是Development Pods。到現(xiàn)在是不是有一種成就感_


特別插入: 特別插入: 特別插入: 還有另一種方式引用私有庫哦**
這種方式我們上一篇博客里提到過,自定義Podfile的寫法里提到,
我們同樣修改我們的測試工程的Podfile文件:

platform :ios, '7.0'

target 'JYTest' do
pod 'JYPodTest', :git => 'https://git.coding.net/Dely/JYPodTest.git' #指定私有庫遠程倉庫地址,還可以指定tag,committed等
end

執(zhí)行pod update看看效果:

pod udpate.png

這種寫法比較方便,直接指定源代碼的git倉庫地址就可以了,也不需要在Podfile引入source的podspec的倉庫地址,
這種寫法維護:只要修改源代碼,然后在需要發(fā)布新版本的時候打tag,更改podspec的內容推送到倉庫就可以了。
缺點就是寫法不美觀

我們現(xiàn)在的項目就是采用這種引入方式_


7.更新維護私有庫

上面已經建立好我忙的私有庫了,我們不可能一直是一個版本一輩子只用一樣的代碼吧。所以我們要更新維護我忙的私有庫源代碼。

1.修改我們的私有源代碼

我們對我忙的私有庫做了大量大量的改動,需要發(fā)布新版本了。這里我們也大量改動一下:添加一張圖片_

修改源代碼.png

2.推送到私有庫遠端

  • 我們對這個新版本打一個打tag,比如:1.0.0 ,然后push到遠端倉庫
  • 修改podspec文件,根據(jù)你代碼改動修改,tag和目錄結構等
  • 驗證podspec有效性,跟上面一樣。進行本地驗證,然后在向repo提交podspec文件。驗證保證通過。不通過繼續(xù)修改直至通過,推送到遠端私有庫
pod spec lint JYPodTest.podspec --allow-warnings

注意 注意:本地驗證之前一定要保證我們的源代碼和tag已經同步到遠端倉庫,否則驗證會找不到相應代碼和tag的。

3.再次向repo提交podspec文件

驗證好podspec文件有效性之后,之后就可以再次向repo提交我們的最新podspec文件了,命令和之前一樣

//兩個參數(shù):添加的私有repo名 JYPod  將要添加的Podspec路徑
pod repo push JYPod ~/Desktop/JYPodTest/JYPodTest.podspec --allow-warnings
添加成功.png

我們再打開目錄~/.cocoapods/repos/JYPod目錄下你會看到我們的倉庫里多了一個1.0.0版本

repo/JYPod目錄.png

我們pod search JYPodTest看下,會出現(xiàn)兩個版本哦

pod search JYPodTest.png

我們在我們的測試項目Podfile文件引用1.0.0版本。pod update 就可以了

3.Repo 添加和刪除命令

如何刪除一個Spec Repo,只需要執(zhí)行一條命令即可

pod repo remove JYPod

添加Spec Repo

pod repo add JYPod https://git.coding.net/Dely/JYPodspec.git

查看Spec repo列表

pod repo list

如果我們要刪除私有Spec Repo下的某一個podspec怎么操作呢,此時無需借助Cocoapods,只需要cd到~/.cocoapods/repos/JTPod目錄下,刪掉庫目錄

rm -Rf JYPodTest

然后在將Git的變動push到遠端倉庫即可

git add -A
git commit -m "remove unuseful pods"
git push origin master

我們直接在遠端podspec倉庫添加庫目錄,我們可以再本地~/.cocoapods/repos/JTPod目錄下拉取

git pull origin master
//或者更新所有的本地podspec文件
//pod repo update

小結: 創(chuàng)建CocoaPods的私有庫到這里頁系統(tǒng)的講解完了。私有庫最核心的就是podspec文件,這個文件也是CocoaPods的最核心的。

三. CocoaPods私有庫管理的原理

  • 其實Cocoapods就是通過一個podspec文件來管理的,本地~/.cocoapods/repos下得各個目錄(不管開源庫master,私有庫JYPod)。這些目錄其實就是我們從遠端倉庫clone下來的,跟遠端保持一樣。我們pod search命令就會在本地目錄下查找?guī)臁?/p>

  • 只不過私有庫有我們自己的podspec遠端倉庫,我們能pull和push,有我們自己控制。而開源庫的master我們只有pull的權限而已,沒啥太多東西哦,

  • 我們pod install或者pod updateCocoaPods就會根據(jù)我們podspec文件里的配置來找到我們的源代碼,然后安裝我們的依賴庫。

四. 常用命令匯總

1. pod spec create JYPodTest
初始化一個Podspec文件

**2. pod spec lint JYPodTest.podspec **
驗證Podspec文件的有效性
//可以使用下面。顯示具體問題--verbose。以及忽略所有警告 --allow-warnings
//pod spec lint JYPodTest.podspec --verbose --allow-warnings

3. pod repo add JYPod https://git.coding.net/Dely/JYPodspec.git
給cocoapods添加私有repo
//相當于git remote add origin https://git.coding.net/Dely/JYPodspec.git

4. pod repo list
查看Spec repo列表

5.pod repo push JYPod ~/Desktop/JYPodTest/JYPodTest.podspec --allow-warnings
//將JYPodTest.podspec文件添加到podspec遠端倉庫和本地repo/JYPod里
//兩個參數(shù):添加的私有repo名 JYPod 將要添加的Podspec路徑

6. pod repo remove JYPod
刪除一個Spec repo

結尾:

創(chuàng)建CocoaPods私有庫基本上就這些內容了,不知道我的介紹你是否能理解,這東西需要自己操作學習一下,那樣會理解比較深刻。下一篇博客我會介紹創(chuàng)建CocoaPods的開源庫,把我們的開源庫發(fā)布到CocoaPods上。

我的開源庫喜歡請賞賜我一個star吧-------->最簡單方便的iOS輪播開源庫:JYCarousel

如果你喜歡我的文章請點個喜歡哦_(樓主好生不要臉啊)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容