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

分別是:
- What platform do you want to use?? [ iOS / macOS ]
使用哪個平臺?
我們創(chuàng)建的是iOS平臺的庫,填寫iOS - What language do you want to use?? [ Swift / ObjC ]
使用哪種語言開發(fā)庫?
這里填寫Swift,使用OC語言的同學(xué)可以填ObjC - Would you like to include a demo application with your library? [ Yes / No ]
庫里是否需要一個demo?
基本上所有庫都需要一個測試的demo,方便測試驗(yàn)證庫是否正確
這里填寫Yes - Which testing frameworks will you use? [ Quick / None ]
是否使用Quick單元測試框架?
熟悉Quick測試框架的可以填上,Demo項目會以pod形式集成Quick框架,不熟悉的話填寫None即可 -
Would you like to do view based testing? [ Yes / No ]
是否需要對視圖View進(jìn)行測試?
一般都沒必要,這里填寫No
填寫完了以后會使用Xcode自動打開工程
image.png
podspec私有庫配置文件的解讀
官網(wǎng)語法: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' # 庫名稱,不能跟現(xiàn)有cocoapods倉庫里的庫名同名,同名會有沖突,一般可以加上個人的私有前綴
s.version = '0.1.0' # 庫的版本號,一般以0.0.1版本開始,注意這里的版本號要跟git里tag標(biāo)簽一樣,每個版本都需要打上跟version同樣名稱的tag,并推送到遠(yuǎn)程倉庫
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指的是對庫的描述,平時我們使用pod search 庫名的時候,每個庫有一個簡單的介紹,指的就是這個description
s.homepage = 'https://github.com/252797991@qq.com/PodspecLib' # 主頁,一般都填寫git倉庫的主頁URL
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } # license默認(rèn)就好,不要去改動
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 } # 源碼,這里填寫庫的Git地址,別人使用你的庫時,pod是根據(jù)這個Git地址來打包編譯的
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' # 社交地址,可以填寫自己對應(yīng)博客或網(wǎng)站的地址
s.ios.deployment_target = '9.0' # 庫發(fā)布的iOS適配版本號,一般指最低支持的iOS版本
s.source_files = 'PodspecLib/Classes/**/*' # 庫的源碼,需要明確指定,pod編譯打包庫時編譯的就是這里指定的源碼,一般都以通配符形式匹配
# s.resource_bundles = {
# 'PodspecLib' => ['PodspecLib/Assets/*.png']
# }
# resource_bundles指的是資源文件,一般指圖片、xib、storyboard、配置文件等
# s.public_header_files = 'Pod/Classes/**/*.h'
# 開放的公共頭
# s.frameworks = 'UIKit', 'MapKit'
# 私有庫需要依賴系統(tǒng)的哪些framework,需要這里明確指定
# s.dependency 'AFNetworking', '~> 2.3'
# s.dependency 'RestKit/ObjectMapping'
# s.dependency 'RestKit/Network'
# s.dependency 'RestKit/CoreData'
# 私有庫如果需要依賴其他第三方pod,需要這里指定,多個時需要同樣格式指定多個
# 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
庫名稱,不能跟現(xiàn)有cocoapods倉庫里的庫名同名,同名會有沖突,一般可以加上個人的私有前綴s.version
庫的版本號,一般以0.0.1版本開始,注意這里的版本號要跟git里tag標(biāo)簽一樣,每個版本都需要打上跟version同樣名稱的tag,并推送到遠(yuǎn)程倉庫s.summary
庫概要s.description
description指的是對庫的描述,平時我們使用pod search 庫名的時候,每個庫有一個簡單的介紹,指的就是這個descriptions.homepage
主頁,一般都填寫git倉庫的主頁URLs.license
license默認(rèn)就好,不要去改動s.author
作者相關(guān)信息,一般形式是'作者名' => '聯(lián)系方式's.source
源碼,這里填寫庫的Git地址,別人使用你的庫時,pod是根據(jù)這個Git地址來打包編譯的s.social_media_url
社交地址,可以填寫自己對應(yīng)博客或網(wǎng)站的地址s.ios.deployment_target
庫發(fā)布的iOS適配版本號,一般指最低支持的iOS版本s.source_files
庫的源碼,需要明確指定,pod編譯打包庫時編譯的就是這里指定的源碼,一般都以通配符形式匹配s.resource_bundles
資源文件,一般指圖片、xib、storyboard、配置文件等,庫里引用資源文件需要注意得是資源文件路徑是在 庫名.bundle 里s.public_header_files
開放的公共頭s.frameworks
私有庫需要依賴系統(tǒng)的哪些framework,需要這里明確指定s.dependency
私有庫如果需要依賴其他第三方pod,需要這里指定,多個時需要同樣格式指定多個,需要注意的是這里的依賴不支持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'
編寫庫源碼
發(fā)布pod
- 本地驗(yàn)證podspec有效性
pod lib lint PodspecLib.podspec --allow-warnings - 將工程代碼上傳到遠(yuǎn)程倉庫
- 添加tag標(biāo)簽并把tag推送到遠(yuǎn)程倉庫,tag標(biāo)簽值要與podspec中的版本號一致
git tag 0.0.1
git push --tags
- 將podspec提交到本地pod倉庫
前往文件夾 ~/.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)填寫的信息可以通過以下命令查詢:
pod trunk info PodspecLib
- 查看自己的注冊信息
pod trunk me
- 假設(shè)你的pod是由多人維護(hù)的,你也能夠加入其它維護(hù)者
pod trunk add-owner ARAnalytics kyle@cocoapods.org
- 解決pod lib lint/repo push不支持i386編譯&只能真機(jī)運(yùn)行的庫
- pod lib lint 命令添加 --skip-import-validation 參數(shù),lint 將跳過驗(yàn)證 pod 是否可以導(dǎo)入。
- pod trunk push 命令添加 --skip-import-validation 參數(shù),push 將跳過驗(yàn)證 pod 是否可以導(dǎo)入。
