本文源自本人的學習記錄整理與理解,其中參考閱讀了部分優秀的博客和書籍,盡量以通俗簡單的語句轉述。引用到的地方如有遺漏或未能一一列舉原文出處還望見諒與指出,另文章內容如有不妥之處還望指教,萬分感謝。
podspec文件基本操作
Pod::Spec.new do |s|
# 名稱
s.name = 'XXEncryptKit'
#版本號
s.version = '0.1.0'
#簡短介紹
s.summary = '簡介'
#詳細介紹
s.description = <<-DESC
XXEncryptKit description
DESC
#主頁,這里要填寫可以訪問到的地址,不然驗證不通過
s.homepage = 'https://www.baidu.com'
#截圖
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
#開源協議
s.license = 'MIT'
#作者信息
s.author = { 'dingyuping' => 'dingyuping@51nbapi.com' }
#項目地址,不支持ssh的地址,驗證不通過,只支持HTTP和HTTPS,最好使用HTTPS,這里用的碼云(免費的)
s.source = { :git => 'https://gitee.com/xingxingstyle/MZFTestModule.git', :tag => s.version.to_s }
#多媒體介紹地址
# s.social_media_url = 'https://twitter.com/<twitter_username>'
#支持的平臺及版本
s.ios.deployment_target = '8.0'
#是否使用ARC,如果指定具體文件,則具體的文件使用ARC
#s.requires_arc = true
#代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,如果有多個目錄下則用逗號分開,如果需要在項目中分組顯示,這里也要做相應的設置
s.source_files = 'XXEncryptKit/Classes/**/*'
#資源文件地址
s.resource_bundles = {
'XXEncryptKit' => ['XXEncryptKit/Assets/*.png']
}
#公開頭文件地
#s.public_header_files = 'XXEncryptKit/Classes/**/*.h'
# buildsetting相關設置, 這里講bitcode設置為NO, C++ Standard Library設置為libstdc++
#s.xcconfig = {
# 'ENABLE_BITCODE' => 'NO',
# 'CLANG_CXX_LIBRARY' => 'libstdc++'
# }
#該pod依賴的系統framework,多個用逗號隔開
#s.frameworks = 'UIKit','CoreGraphics'
#該pod依賴的系統library,多個用逗號隔開
#s.libraries = 'iconv','sqlite3','stdc++','z'
#第三方.a文件
#s.vendored_libraries = 'XXEncryptKit/Classes/ThirdParty/*.a'
#第三方frameworks文件
#s.vendored_frameworks = 'XXEncryptKit/Classes/ThirdParty/*.framework'
#依賴關系,該項目所依賴的其他庫,如果有多個需要填寫多個s.dependency
#s.dependency 'AFNetworking', '~> 2.3'
end
podspec驗證相關參數的作用:
Options:
--allow-warnings
: 忽略警告,即可以允許有警告也可以通過驗證
--use-libraries
: 使用靜態庫安裝規范,當包含依賴的第三方或自定義的靜態庫需要添加此規范
--use-modular-headers
: 如果是OC和swift 的混編
需要加上
--sources=https://cdn.cocoapods.org/
: 指定索引庫的源,多個源必須用逗號分隔
--local-only
: 不執行將回購推到其遠程服務器的步驟
--no-private
: 包括僅適用于公共回購的檢查
--skip-import-validation
: 跳過驗證pod是否可以導入
--skip-tests
: 在驗證期間跳過構建和運行測試
--commit-message="Fix bug in pod"
: 添加自定義提交消息。如果沒有指定提交消息,則打開默認編輯器
--use-json
: 在將其推送到repo之前,將podspec轉換為JSON
--swift-version=VERSION
: 在標記規范時應該使用的SWIFT_VERSION。這優先于規范中指定的Swift版本或. Swift版本文件
--no-overwrite
: 不允許將覆蓋現有規范的推送
Inherited options:
--silent
: 顯示所有信息
--verbose
: 顯示更多調試信息
--no-ansi
: 顯示沒有ANSI代碼的輸出
--help
: 顯示指定命令的幫助橫幅
podspec目錄分層
使用subspec來實現目錄分層。
目錄分層的好處:
目錄分層,結構清晰;
使用pod引入一個三方庫時,可以只引入一個subspec
而不用將整個三方庫引入。
例如AFNetworking:
- 下面舉例說明,如圖所示的目錄結構:
├── XYHStoreKit
│
│ └── Classes
│ └── XYHStoreKit.h
│ └── XYHFMDB
│ ├──XYHFMDB.h
│ └── FMDB
│ ├── FMDatabase.h
│ ├── FMDatabase.m
│ └── XYH
│ ├── XYHDB.h
│ ├── XYHDB.h
│ └── XYHKeyChainStore
│ ├── XYHKeyChainStore.h
│ ├── XYHKeyChainStore.m
│ └── XYHKeyedArchiverStore
│ ├── XYHKeyedArchiverStore.h
│ ├── XYHKeyedArchiverStore.m
├── README.md
寫法如下:
#頭文件~XYHStoreKit.h 在最外層
s.source_files = 'XYHStoreKit/Classes/XYHStoreKit.h'
s.public_header_files = 'XYHStoreKit/Classes/XYHStoreKit.h'
#XYHFMDB
s.subspec 'XYHFMDB' do |ss|
#XYHFMDB.h頭文件
ss.source_files = 'XYHStoreKit/Classes/XYHFMDB/XYHFMDB.h'
#公開頭文件
ss.public_header_files = 'XYHStoreKit/Classes/XYHFMDB/XYHFMDB.h'
ss.subspec 'FMDB' do |sss|
sss.source_files = 'XYHStoreKit/Classes/XYHFMDB/FMDB/**/*'
sss.public_header_files = 'XYHStoreKit/Classes/XYHFMDB/FMDB/*.h'
#配置依賴的系統庫
sss.libraries = 'sqlite3'
end
ss.subspec 'XYH' do |sss|
sss.source_files = 'XYHStoreKit/Classes/XYHStoreKit/XYH/**/*'
#配置依賴的系統框架
sss.frameworks = 'UIKit','CoreData'
#XYH中依賴了XYH之外的模塊FMDB
sss.dependency 'XYHStoreKit/XYHFMDB/FMDB'
end
end
#XYHKeyChainStore
s.subspec 'XYHKeyChainStore' do |ss|
#引入XYHKeyChainStore中所有資源文件
ss.source_files = 'XYHStoreKit/Classes/XYHKeyChainStore/**/*'
#公開XYHKeyChainStore模塊中的頭文件
ss.public_header_files = 'XYHStoreKit/Classes/XYHKeyChainStore/*.h'
end
#XYHKeyedArchiverStore
s.subspec 'XYHKeyedArchiverStore' do |ss|
ss.source_files = 'XYHStoreKit/Classes/XYHKeyedArchiverStore/**/*'
ss.public_header_files = 'XYHStoreKit/Classes/XYHKeyedArchiverStore/XYHKeyedArchiverStore.h'
#依賴的三方庫,pod庫或者可以是自身的subspec
ss.dependency 'XYHStoreKit/XYHFMDB'
ss.dependency 'XYHStoreKit/XYHKeyChainStore'
end