如何編寫一個CocoaPods的spec文件

CocoaPods命令介紹

上一篇文章中,已經介紹過CocoaPods的幾條基本命令。pod setup用於初始化本地第三方庫的Spec描述文件,所有的spec文件存都存放在~/.cocoapods目錄中。pod install用來安裝或刪除Podfile文件聲明中的第三方依賴庫。下面繼續介紹其它一些命令。

$ pod list
# 列出所有可用的第三方庫

$ pod search query

搜索名稱包含query的類庫,query可以替換爲你想搜索的名字(如json),不區分大小寫。也可以使用pod search --full query命令作更仔細的搜索,該命令不但搜索類庫的名稱,同時還搜索類庫的描述文本,所以搜索速度也相對慢一些。

pod listpod 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.names.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.1tag,但是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.20.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庫。

轉載請註明原作者

Oct 16th, 2012

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章