CocoaPods 系列之三 Podspec 語法說明

CocoaPods 系列之一 制作公開庫
CocoaPods 系列之二 更新公開庫
CocoaPods 系列之三 Podspec 語法說明
CocoaPods 系列之四 Podspec subspec
CocoaPods 系列之五 Private Pods(譯文) 制作私有庫
CocoaPods 系列之六 Private Pods 制作私有庫從0到1
CocoaPods 系列之七 我遇到的驗證不過

先上官方語法說明,英語好的移步下面的鏈接
https://guides.cocoapods.org/syntax/podspec.html#specification

一 Podspec文件作用

Podspec語法就是一個規范,這個規范聲明你的庫包含哪些文件,去哪里獲得庫的源代碼,庫的名字,版本,說明等等。

Podspecs 一定要放在倉庫的根目錄(如果不放,各種bug等著呢),并且庫文件應該存儲于根目錄。文件不支持遍歷父目錄。

二 如何生成 Pod Spec 文件

命令格式:pod spec create + 名字
例如: pod spec crate TestSpec
保證pod安裝成功
在命令行執行
任何路徑下都可以執行這個命令,并且幫你生成TestSpec.podspec的文件

三 上個實例

Pod::Spec.new do |spec|
spec.name = 'Reachability'
spec.version = '3.1.0'
spec.license = { :type => 'BSD' }
spec.homepage = 'https://github.com/tonymillion/Reachability'
spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.source_files = 'Reachability.{h,m}'
spec.framework = 'SystemConfiguration'
end

四 在podspec文件里, # 后面的是注釋

五 podspec文件的開始和結束

Pod::Spec.new do |s|
end

上面這兩行是這個文件的開始和結束

六 name

是否必須聲明:是
解釋:Pod庫的名字
例如:spec.name = 'AFNetworking'

七 version

是否必須聲明: 是
解釋:Pod 庫的版本說明,支持語義化版本https://semver.org/lang/zh-CN/
例如:spec.version = '0.0.1'

八 swift_version

是否必須聲明:否
解釋: pod庫支持的swift版本
例如:spec.swift_version = '3.2'

九 cocoapods_version

是否必須聲明:否
解釋: pod庫支持的CocoaPods版本
例如:spec.cocoapods_version = '>= 0.36'

十 ### authors

是否必須聲明:是
解釋:pod庫作者的名字和郵箱
例如:
spec.author = 'Darth Vader'
spec.authors = 'Darth Vader', 'Wookiee'
spec.authors = { 'Darth Vader' => 'darthvader@darkside.com',
'Wookiee' => 'wookiee@aggrrttaaggrrt.com' }
可以看出,可以設置多個

十一 social_media_url

是否必須聲明:否
例如:
spec.social_media_url = 'https://twitter.com/cocoapods'

十二 license

是否必須聲明:是
解釋:pod庫許可證的類型(也就是軟件授權協議),各個協議的不同https://www.cnblogs.com/Vito2008/p/4806677.html
例如:
spec.license = 'MIT'
spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }
spec.license = { :type => 'MIT', :text => <<-LICENSE
Copyright 2012
Permission is granted to...
LICENSE
}

十三 homepage

是否必須聲明:是
解釋:pod庫的主頁,主頁用來說明這個庫的,可以是githup上庫的地址,沒有可以亂寫
例如:
spec.homepage = 'http://www.example.com'

十四 source

是否必須聲明:是
解釋:指定代碼地址。一般是git地址,后面可以跟tag--標簽,branch-分支,commit-版本號,submodules-子目錄,有了這些類型才知道取哪次提交的代碼。
例如:
spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
:tag => spec.version.to_s }

spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
:tag => "v#{spec.version}", :submodules => true }

spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
:sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }

支持的key:
:git => :tag, :branch, :commit, :submodules

:svn => :folder, :tag, :revision

:hg => :revision

:http => :flatten, :type, :sha256, :sha1

十五 summary

是否必須聲明:是
解釋:Pod庫的簡要說明。字數最多為140字。描述應該剪短,但是內容豐富。
例如:
s.summary = 'A delightful iOS and OS X networking framework.這是iOS的網絡庫'

十六 description

是否必須聲明:否
解釋:Pod的描述(description)比摘要(summary)更詳細。
比如:
spec.description = <<-DESC
Computes the meaning of life.
Features:
1. Is self aware
...
42. Likes candies.
DESC

十七 screenshots

是否必須:否
解釋: 這個用的人很少,用圖片的方式去介紹庫
例如:
spec.screenshot = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'

spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]

十八 documentation_url

是否必須:否
解釋:
例如:

十九 prepare_command

是否必須:否
解釋:
例如:
spec.prepare_command = 'ruby build_files.rb'
spec.prepare_command = <<-CMD
sed -i 's/MyNameSpacedHeader/Header/g' .//.h
sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./
/.h
CMD

二十 static_framework

是否必須:否
解釋:過
例如:
spec.static_framework = true

二十一 deprecated

是否必須:否
解釋:pod庫是否被棄用
例如:
spec.deprecated = true

二十二 deprecated_in_favor_of

是否必須:否
解釋:曾經被被棄用的名字
例如:
spec.deprecated_in_favor_of = 'NewMoreAwesomePod'

二十三 Platform

是否必須:否
解釋:庫支持的平臺,如果空則默認支持所有的平臺,iOS系統和osx系統。當你支持多系統時,應該用deployment_target代替
例如:
spec.platform = :osx, '10.8'
spec.platform = :ios
spec.platform = :osx

二十四 deployment_target

是否必須:否
解釋:平臺支持的最小版本
例如:
spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'

十二五 dependency

是否必須:否
解釋:你的庫依賴的其它庫。
~> 符號是要求的,因為這個符號提供了很好的版本控制。
比如 ~> 1.0.1會要求版本是在>= 1.0.1,但不會大于 1.1
比如 ~> 1.0 將會匹配1.0,1.0.1,1.1,但不會大于2.0
例如:
spec.dependency 'AFNetworking', '~> 1.0'
spec.ios.dependency 'MBProgressHUD', '~> 0.5'

如果是多個依賴

s.dependency 'YYModel','~> 1.0.4'
s.dependency 'AFNetworking','~> 3.2.0'
s.dependency 'Reachability','~> 3.2

二十六 requires_arc

是否必須:否
解釋:允許你指定哪個文件使用ARC。或者所有的文件都是用ARC。不支持ARC的文件會添加 -fno-objc-arc.
例如:
spec.requires_arc = true
spec.requires_arc = false
spec.requires_arc = 'Classes/Arc'
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

二十七 framworks

是否必須:否
解釋:庫需要添加的系統庫
例如:
spec.ios.framework = 'CFNetwork'
spec.frameworks = 'QuartzCore', 'CoreData'

二十八 weak_frameworks

是否必須:否
解釋:A list of frameworks that the user’s target needs to weakly link against.
例如:
spec.weak_framework = 'Twitter'
spec.weak_frameworks = 'Twitter', 'SafariServices'

二十九 libraries

是否必須: 否
解釋: A list of system libraries that the user’s target (application) needs to link against.
例如:
spec.ios.library = 'xml2'
spec.libraries = 'xml2', 'z'

三十 compiler_flags

是否必須:否
解釋: 應該傳遞給編譯器的標志列表
例如:
spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

三十一 pod_target_xcconfig

是否必須:否
解釋:Any flag to add to the final private pod target xcconfig file.
例如:
spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

三十二 user_target_xcconfig

是否必須:否
解釋:
例如:
spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }

三十三 prefix_header_contents

是否必須:否
解釋:
例如:
spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'

三十四 prefix_header_file

是否必須:否
解釋:
例如:
spec.prefix_header_file = 'iphone/include/prefix.pch'
spec.prefix_header_file = false

三十五 module_name

是否必須:否
解釋:
例如:
spec.module_name = 'Three20'

三十六 header_dir

是否必須:否
解釋:
例如:
spec.header_dir = 'Three20Core'

三十七

是否必須:否
解釋:
例如:
spec.header_mappings_dir = 'src/include'

三十八 source_files

是否必須:否
解釋:
例如:
spec.source_files = 'Classes//.{h,m}'
spec.source_files = 'Classes/
/.{h,m}', 'More_Classes/*/.{h,m}'

將匹配所有的文件
c
將匹配所有c開頭的文件
*c 將匹配所有c結尾的文件
*c *將匹配所有有c的文件

三十九 public_header_files

是否必須: 否
解釋:包含的這些頭文件將暴露給用戶并且從中生成文檔,在構建時,這些頭文件將出現在構建目錄中。如果沒有指定,那么source_files中的所有頭文件都被認為是公眾的。
例如:
規格。public_header_files = 'Headers / Public / *。h'

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

推薦閱讀更多精彩內容