CocoaPods 系列之一 制作公開庫
CocoaPods 系列之二 更新公開庫
CocoaPods 系列之三 Podspec 語法說明
CocoaPods 系列之四 Podspec subspec
CocoaPods 系列之五 Private Pods(譯文) 制作私有庫
CocoaPods 系列之六 Private Pods 制作私有庫從0到1
CocoaPods 系列之七 我遇到的驗(yàn)證不過
先上官方語法說明,英語好的移步下面的鏈接
https://guides.cocoapods.org/syntax/podspec.html#specification
一 Podspec文件作用
Podspec語法就是一個(gè)規(guī)范,這個(gè)規(guī)范聲明你的庫包含哪些文件,去哪里獲得庫的源代碼,庫的名字,版本,說明等等。
Podspecs 一定要放在倉庫的根目錄(如果不放,各種bug等著呢),并且?guī)煳募?yīng)該存儲(chǔ)于根目錄。文件不支持遍歷父目錄。
二 如何生成 Pod Spec 文件
命令格式:pod spec create + 名字
例如: pod spec crate TestSpec
保證pod安裝成功
在命令行執(zhí)行
任何路徑下都可以執(zhí)行這個(gè)命令,并且?guī)湍闵蒚estSpec.podspec的文件
三 上個(gè)實(shí)例
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文件的開始和結(jié)束
Pod::Spec.new do |s|
end
上面這兩行是這個(gè)文件的開始和結(jié)束
六 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' }
可以看出,可以設(shè)置多個(gè)
十一 social_media_url
是否必須聲明:否
例如:
spec.social_media_url = 'https://twitter.com/cocoapods'
十二 license
是否必須聲明:是
解釋:pod庫許可證的類型(也就是軟件授權(quán)協(xié)議),各個(gè)協(xié)議的不同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庫的主頁,主頁用來說明這個(gè)庫的,可以是githup上庫的地址,沒有可以亂寫
例如:
spec.homepage = 'http://www.example.com'
十四 source
是否必須聲明:是
解釋:指定代碼地址。一般是git地址,后面可以跟tag--標(biāo)簽,branch-分支,commit-版本號(hào),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庫的簡要說明。字?jǐn)?shù)最多為140字。描述應(yīng)該剪短,但是內(nèi)容豐富。
例如:
s.summary = 'A delightful iOS and OS X networking framework.這是iOS的網(wǎng)絡(luò)庫'
十六 description
是否必須聲明:否
解釋:Pod的描述(description)比摘要(summary)更詳細(xì)。
比如:
spec.description = <<-DESC
Computes the meaning of life.
Features:
1. Is self aware
...
42. Likes candies.
DESC
十七 screenshots
是否必須:否
解釋: 這個(gè)用的人很少,用圖片的方式去介紹庫
例如:
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
是否必須:否
解釋:曾經(jīng)被被棄用的名字
例如:
spec.deprecated_in_favor_of = 'NewMoreAwesomePod'
二十三 Platform
是否必須:否
解釋:庫支持的平臺(tái),如果空則默認(rèn)支持所有的平臺(tái),iOS系統(tǒng)和osx系統(tǒng)。當(dāng)你支持多系統(tǒng)時(shí),應(yīng)該用deployment_target代替
例如:
spec.platform = :osx, '10.8'
spec.platform = :ios
spec.platform = :osx
二十四 deployment_target
是否必須:否
解釋:平臺(tái)支持的最小版本
例如:
spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'
十二五 dependency
是否必須:否
解釋:你的庫依賴的其它庫。
~> 符號(hào)是要求的,因?yàn)檫@個(gè)符號(hào)提供了很好的版本控制。
比如 ~> 1.0.1會(huì)要求版本是在>= 1.0.1,但不會(huì)大于 1.1
比如 ~> 1.0 將會(huì)匹配1.0,1.0.1,1.1,但不會(huì)大于2.0
例如:
spec.dependency 'AFNetworking', '~> 1.0'
spec.ios.dependency 'MBProgressHUD', '~> 0.5'
如果是多個(gè)依賴
s.dependency 'YYModel','~> 1.0.4'
s.dependency 'AFNetworking','~> 3.2.0'
s.dependency 'Reachability','~> 3.2
二十六 requires_arc
是否必須:否
解釋:允許你指定哪個(gè)文件使用ARC。或者所有的文件都是用ARC。不支持ARC的文件會(huì)添加 -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
是否必須:否
解釋:庫需要添加的系統(tǒng)庫
例如:
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
是否必須:否
解釋: 應(yīng)該傳遞給編譯器的標(biāo)志列表
例如:
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結(jié)尾的文件
*c *將匹配所有有c的文件
三十九 public_header_files
是否必須: 否
解釋:包含的這些頭文件將暴露給用戶并且從中生成文檔,在構(gòu)建時(shí),這些頭文件將出現(xiàn)在構(gòu)建目錄中。如果沒有指定,那么source_files中的所有頭文件都被認(rèn)為是公眾的。
例如:
規(guī)格。public_header_files = 'Headers / Public / *。h'