創(chuàng)建pod模版項(xiàng)目
使用pod命令創(chuàng)建私有庫(kù)模板項(xiàng)目
pod lib create 私有庫(kù)名,如創(chuàng)建一個(gè)名為PodspecLib的庫(kù)
pod lib create PodspecLib
接下來(lái)提示你選擇庫(kù)的信息

分別是:
- What platform do you want to use?? [ iOS / macOS ]
使用哪個(gè)平臺(tái)?
我們創(chuàng)建的是iOS平臺(tái)的庫(kù),填寫iOS - What language do you want to use?? [ Swift / ObjC ]
使用哪種語(yǔ)言開(kāi)發(fā)庫(kù)?
這里填寫Swift,使用OC語(yǔ)言的同學(xué)可以填ObjC - Would you like to include a demo application with your library? [ Yes / No ]
庫(kù)里是否需要一個(gè)demo?
基本上所有庫(kù)都需要一個(gè)測(cè)試的demo,方便測(cè)試驗(yàn)證庫(kù)是否正確
這里填寫Yes - Which testing frameworks will you use? [ Quick / None ]
是否使用Quick單元測(cè)試框架?
熟悉Quick測(cè)試框架的可以填上,Demo項(xiàng)目會(huì)以pod形式集成Quick框架,不熟悉的話填寫None即可 -
Would you like to do view based testing? [ Yes / No ]
是否需要對(duì)視圖View進(jìn)行測(cè)試?
一般都沒(méi)必要,這里填寫No
填寫完了以后會(huì)使用Xcode自動(dòng)打開(kāi)工程
image.png
podspec私有庫(kù)配置文件的解讀
官網(wǎng)語(yǔ)法:https://guides.cocoapods.org/syntax/podspec.html#group_subspecs
#
# Be sure to run `pod lib lint PodspecLib.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'PodspecLib' # 庫(kù)名稱,不能跟現(xiàn)有cocoapods倉(cāng)庫(kù)里的庫(kù)名同名,同名會(huì)有沖突,一般可以加上個(gè)人的私有前綴
s.version = '0.1.0' # 庫(kù)的版本號(hào),一般以0.0.1版本開(kāi)始,注意這里的版本號(hào)要跟git里tag標(biāo)簽一樣,每個(gè)版本都需要打上跟version同樣名稱的tag,并推送到遠(yuǎn)程倉(cāng)庫(kù)
s.summary = 'A short description of PodspecLib.' # 概要
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
# description指的是對(duì)庫(kù)的描述,平時(shí)我們使用pod search 庫(kù)名的時(shí)候,每個(gè)庫(kù)有一個(gè)簡(jiǎn)單的介紹,指的就是這個(gè)description
s.homepage = 'https://github.com/252797991@qq.com/PodspecLib' # 主頁(yè),一般都填寫git倉(cāng)庫(kù)的主頁(yè)URL
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } # license默認(rèn)就好,不要去改動(dòng)
s.author = { '252797991@qq.com' => '252797991@qq.com' } # 作者相關(guān)信息,一般形式是'作者名' => '聯(lián)系方式'
s.source = { :git => 'https://github.com/252797991@qq.com/PodspecLib.git', :tag => s.version.to_s } # 源碼,這里填寫庫(kù)的Git地址,別人使用你的庫(kù)時(shí),pod是根據(jù)這個(gè)Git地址來(lái)打包編譯的
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' # 社交地址,可以填寫自己對(duì)應(yīng)博客或網(wǎng)站的地址
s.ios.deployment_target = '9.0' # 庫(kù)發(fā)布的iOS適配版本號(hào),一般指最低支持的iOS版本
s.source_files = 'PodspecLib/Classes/**/*' # 庫(kù)的源碼,需要明確指定,pod編譯打包庫(kù)時(shí)編譯的就是這里指定的源碼,一般都以通配符形式匹配
# s.resource_bundles = {
# 'PodspecLib' => ['PodspecLib/Assets/*.png']
# }
# resource_bundles指的是資源文件,一般指圖片、xib、storyboard、配置文件等
# s.public_header_files = 'Pod/Classes/**/*.h'
# 開(kāi)放的公共頭
# s.frameworks = 'UIKit', 'MapKit'
# 私有庫(kù)需要依賴系統(tǒng)的哪些framework,需要這里明確指定
# s.dependency 'AFNetworking', '~> 2.3'
# s.dependency 'RestKit/ObjectMapping'
# s.dependency 'RestKit/Network'
# s.dependency 'RestKit/CoreData'
# 私有庫(kù)如果需要依賴其他第三方pod,需要這里指定,多個(gè)時(shí)需要同樣格式指定多個(gè)
# s.vendored_frameworks = ['framework/*.framework', 'SDK/*.framework']
s.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.xcframework'
s.vendored_libraries = 'Framework/*.a'
s.resource ='Framework/*.bundle'
s.source_files = 'Build/ThingMbedtls.xcframework/ios-arm64/ThingMbedtls.framework/Headers/*'
s.vendored_frameworks = 'Build/ThingMbedtls.xcframework'
s.user_target_xcconfig = {
"CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES": "YES",
"EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64"
}
s.pod_target_xcconfig = {
"CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES": "YES",
"DEFINES_MODULE": "YES",
"EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64",
"OTHER_LDFLAGS": "-all_load",
"HEADER_SEARCH_PATHS": "$(PODS_TARGET_SRCROOT)/mbedtls/include/mbedtls/"
}
end
s.name
庫(kù)名稱,不能跟現(xiàn)有cocoapods倉(cāng)庫(kù)里的庫(kù)名同名,同名會(huì)有沖突,一般可以加上個(gè)人的私有前綴s.version
庫(kù)的版本號(hào),一般以0.0.1版本開(kāi)始,注意這里的版本號(hào)要跟git里tag標(biāo)簽一樣,每個(gè)版本都需要打上跟version同樣名稱的tag,并推送到遠(yuǎn)程倉(cāng)庫(kù)s.summary
庫(kù)概要s.description
description指的是對(duì)庫(kù)的描述,平時(shí)我們使用pod search 庫(kù)名的時(shí)候,每個(gè)庫(kù)有一個(gè)簡(jiǎn)單的介紹,指的就是這個(gè)descriptions.homepage
主頁(yè),一般都填寫git倉(cāng)庫(kù)的主頁(yè)URLs.license
license默認(rèn)就好,不要去改動(dòng)s.author
作者相關(guān)信息,一般形式是'作者名' => '聯(lián)系方式's.source
源碼,這里填寫庫(kù)的Git地址,別人使用你的庫(kù)時(shí),pod是根據(jù)這個(gè)Git地址來(lái)打包編譯的s.social_media_url
社交地址,可以填寫自己對(duì)應(yīng)博客或網(wǎng)站的地址s.ios.deployment_target
庫(kù)發(fā)布的iOS適配版本號(hào),一般指最低支持的iOS版本s.source_files
庫(kù)的源碼,需要明確指定,pod編譯打包庫(kù)時(shí)編譯的就是這里指定的源碼,一般都以通配符形式匹配s.resource_bundles
資源文件,一般指圖片、xib、storyboard、配置文件等,庫(kù)里引用資源文件需要注意得是資源文件路徑是在 庫(kù)名.bundle 里s.public_header_files
開(kāi)放的公共頭s.frameworks
私有庫(kù)需要依賴系統(tǒng)的哪些framework,需要這里明確指定s.dependency
私有庫(kù)如果需要依賴其他第三方pod,需要這里指定,多個(gè)時(shí)需要同樣格式指定多個(gè),需要注意的是這里的依賴不支持git形式的pod,如:pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git's.vendored_frameworks
依賴本地第三方framework
s.vendored_frameworks = ['SDK.framework', 'SDK/dependency.framework']
引用本地私有pod
pod "PodspecLib", :path => "../PodspecLib"
或者
pod 'PodspecLib', :podspec => '../PodspecLib/PodspecLib.podspec'
編寫庫(kù)源碼
發(fā)布pod
- 本地驗(yàn)證podspec有效性
pod lib lint PodspecLib.podspec --allow-warnings - 將工程代碼上傳到遠(yuǎn)程倉(cāng)庫(kù)
- 添加tag標(biāo)簽并把tag推送到遠(yuǎn)程倉(cāng)庫(kù),tag標(biāo)簽值要與podspec中的版本號(hào)一致
git tag 0.0.1
git push --tags
- 將podspec提交到本地pod倉(cāng)庫(kù)
前往文件夾 ~/.cocoapods/repos去查看PodspecLib目錄下的文件如下
pod repo push PodspecLib PodspecLib.podspec --allow-warnings
- 將podspec提交到cocopod官方
pod trunk register xxx@qq.com '姓名'
pod trunk push PodspecLib.podspec --allow-warnings
或 pod trunk push --allow-warnings
發(fā)布成功后:https://cocoapods.org/pods/PodspecLib
- 如果是第一次發(fā)布Pod,那么trunk之后需要去Claim your Pod認(rèn)領(lǐng)下。
認(rèn)領(lǐng)填寫的信息可以通過(guò)以下命令查詢:
pod trunk info PodspecLib
- 查看自己的注冊(cè)信息
pod trunk me
- 假設(shè)你的pod是由多人維護(hù)的,你也能夠加入其它維護(hù)者
pod trunk add-owner ARAnalytics kyle@cocoapods.org
- 解決pod lib lint/repo push不支持i386編譯&只能真機(jī)運(yùn)行的庫(kù)
- pod lib lint 命令添加 --skip-import-validation 參數(shù),lint 將跳過(guò)驗(yàn)證 pod 是否可以導(dǎo)入。
- pod trunk push 命令添加 --skip-import-validation 參數(shù),push 將跳過(guò)驗(yàn)證 pod 是否可以導(dǎo)入。
