ios 創(chuàng)建私有庫pod,podspec

創(chuàng)建pod模版項目

使用pod命令創(chuàng)建私有庫模板項目
pod lib create 私有庫名,如創(chuàng)建一個名為PodspecLib的庫

pod lib create PodspecLib

接下來提示你選擇庫的信息


image.png

分別是:

  • 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 庫名的時候,每個庫有一個簡單的介紹,指的就是這個description

  • s.homepage
    主頁,一般都填寫git倉庫的主頁URL

  • s.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

  1. 解決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)入。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容