CocoaPods命令介紹
在上一篇文章中,已經介紹過CocoaPods的幾條基本命令。pod setup
用於初始化本地第三方庫的Spec描述文件,所有的spec文件存都存放在~/.cocoapods
目錄中。pod install
用來安裝或刪除Podfile
文件聲明中的第三方依賴庫。下面繼續介紹其它一些命令。
$ pod list
# 列出所有可用的第三方庫
$ pod search query
搜索名稱包含query
的類庫,query
可以替換爲你想搜索的名字(如json
),不區分大小寫。也可以使用pod search --full query
命令作更仔細的搜索,該命令不但搜索類庫的名稱,同時還搜索類庫的描述文本,所以搜索速度也相對慢一些。
pod list
和pod search
命令只搜索存在於本地~/.cocoapods
文件夾的所有第三方庫,並不會連接到遠程服務器。如果你要從服務器更新本地第三方庫的描述文件,可以:
$ pod repo update master
創建自己項目的Podspec描述文件
CocoaPods還是一個相對年輕的項目,所有的項目的Podspec文件都託管在https://github.com/CocoaPods/Specs。可能有一些庫並未收錄其中。下面我們通過爲微博sso認證登錄庫編寫Podspec文件來學習相關的概念。
初始化一個Podspec文件
$ pod spec create weibo_ios_sdk_sso-oauth
該命令將在本目錄產生一個名爲weibo_ios_sdk_sso-oauth.podspec
的文件。用編輯器打開該文件,裏面已經有非常豐富的說明文檔。下面我們介紹如何聲明第三方庫的代碼目錄
和資源目錄
,還有該第三方庫所依賴ios核心框架和第三方庫。
去除所有的註釋,podspec文件如下所示:
Pod::Spec.new do |s|
s.name = 'ADVProgressBar'
s.version = '0.0.1'
s.license = 'MIT'
s.summary = 'Progress Bar Design with Percentage values.'
s.homepage = 'https://github.com/appdesignvault'
s.author = { 'appdesignvault' => 'appdesignvault' }
s.source = { :git => 'https://github.com/appdesignvault/ADVProgressBar.git', :commit => 'f17b15c15574d6d101cd5fcfd58239e16e806647' }
s.platform = :ios
s.source_files = 'ADVProgressBar/Classes/*.{h,m}'
s.resources = "ADVProgressBar/Resources/*.png"
s.framework = 'UIKit'
s.requires_arc = true
end
其中s.name
和s.summary
用來聲明庫的名稱和一個簡短的說明文檔。pod search
命令就是根據這兩項內容作爲搜索文本的。s.homepage
聲明庫的主頁,s.version
庫原代碼的版本,s.license
所採用的授權版本,s.author
庫的作者。
s.source
聲明原代碼的地址,以微博sso認證登錄庫爲例,它託管在https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth中,在其未尾加上.git
擴展名就是庫的原代碼地址了,所以該行應聲明爲:
s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git'}
對於很多第三方庫而言,在發佈的時候都會打上一個tag
,如版本0.0.1
就會打上一個名爲v0.0.1
的tag
,但是weibo_ios_sdk_sso-oauth庫還未打上所何tag
,我們可以選擇一個最新的commit
來作爲該庫0.0.1版的代碼。s.source
最終如下:
s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d'}
以後我們可以根據該庫不同的版本創建相應的podspec文件,例如0.0.2
,0.1.0
等。
讓我們在瀏覽器中看一下weibo_ios_sdk_sso-oauth的目錄結構:
--
|
+-- demo
|
+-- src
|
+-- .gitignore
|
+-- README.md
demo
目錄保存一個示例項目,src
纔是庫的原代碼目錄。src
的目錄結構如下:
-- src
|
+-- JSONKit
|
+-- SinaWeibo
|
+-- sinaweibo_ios_sdk.xcodeproj
|
+-- SinaWeibo-Prefix.pch
JSONKit
目錄說明這個庫本身依賴於JSONKit
第三方庫。我們可以在podspec文件中的s.dependency
聲明段中聲明。SinaWeibo
目錄纔是包含所有原代碼的目錄,我們需要在s.source_files
中聲明
s.source_files = 'src/SinaWeibo/*.{h,m}'
前一部分src/SinaWeibo/
是一個相對目錄,目錄的層級關係一定要跟代碼庫的保持一致。最後一部分*.{h,m}
是一個類似正則表達式的字符串,表示匹配所有以.h
和.m
爲擴展名的文件。
src/SinaWeibo/
目錄下還有一個SinaWeibo.bundle
目錄,該目錄存放一些資源文件(如圖片等),這些文件並不需要進行編譯。可以使用s.resourcs
聲明
s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
前一部分跟上面相同,**
表示匹配所有子目錄,*.png
表示所有以.png
爲擴展名的圖片文件。
通過查看代碼我們知道,weibo_ios_sdk_sso-oauth
還依賴一個ios的核心庫QuartzCore
s.framework = 'QuartzCore'
在前面我們已經說過,weibo_ios_sdk_sso-oauth
庫自身也依賴於另外一個第三方庫JSONKit
,聲明如下:
s.dependency 'JSONKit', '~> 1.4'
這行聲明與Podfile文件中的聲明類似。
最終的結果如下:
Pod::Spec.new do |s|
s.name = "weibo_ios_sdk_sso-oauth"
s.version = "0.0.1"
s.summary = 'weibo.com sso oauth, 微博sso認證登錄功能'
s.homepage = "https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth"
s.license = 'MIT'
s.author = {'mobileresearch' => 'mobileresearch'}
s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d' }
s.platform = :ios
s.source_files = 'src/SinaWeibo/*.{h,m}'
s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
s.framework = 'QuartzCore'
s.dependency 'JSONKit', '~> 1.4'
end
可以將該spec文件保存到本機的~/.cocoapods/master/
目錄中僅供自己使用,也可以將其提交到CocoaPods/Specs代碼庫中。下面我們將其保存到本機中
$ mkdir -p ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
$ cp weibo_ios_sdk_sso-oauth.podspec ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
是否可以通過搜索找到該庫:
$ pod search weibo
同樣在需要依賴於weibo_ios_sdk_sso-oauth這個庫的項目,可以將下列添加到項目的Podfile文件中
pod 'weibo_ios_sdk_sso_oauth', '0.0.1'
保存文件,並用pod install
安裝weibo_ios_sdk_sso-oauth庫。
轉載請註明原作者