ios 创建私有库pod,podspec

创建pod模版项目

使用pod命令创建私有库模板项目
pod lib create 私有库名,如创建一个名为PodspecLib的库

pod lib create PodspecLib

接下来提示你选择库的信息


image.png

分别是:

  • What platform do you want to use?? [ iOS / macOS ]
    使用哪个平台?
    我们创建的是iOS平台的库,填写iOS
  • What language do you want to use?? [ Swift / ObjC ]
    使用哪种语言开发库?
    这里填写Swift,使用OC语言的同学可以填ObjC
  • Would you like to include a demo application with your library? [ Yes / No ]
    库里是否需要一个demo?
    基本上所有库都需要一个测试的demo,方便测试验证库是否正确
    这里填写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进行测试?
    一般都没必要,这里填写No
    填写完了以后会使用Xcode自动打开工程


    image.png

podspec私有库配置文件的解读

官网语法: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' # 库名称,不能跟现有cocoapods仓库里的库名同名,同名会有冲突,一般可以加上个人的私有前缀
  s.version          = '0.1.0' # 库的版本号,一般以0.0.1版本开始,注意这里的版本号要跟git里tag标签一样,每个版本都需要打上跟version同样名称的tag,并推送到远程仓库
  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默认就好,不要去改动
  s.author           = { '252797991@qq.com' => '252797991@qq.com' } # 作者相关信息,一般形式是'作者名' => '联系方式'
  s.source           = { :git => 'https://github.com/252797991@qq.com/PodspecLib.git', :tag => s.version.to_s } # 源码,这里填写库的Git地址,别人使用你的库时,pod是根据这个Git地址来打包编译的
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' # 社交地址,可以填写自己对应博客或网站的地址

  s.ios.deployment_target = '9.0' # 库发布的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'
  # 私有库需要依赖系统的哪些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
    库名称,不能跟现有cocoapods仓库里的库名同名,同名会有冲突,一般可以加上个人的私有前缀

  • s.version
    库的版本号,一般以0.0.1版本开始,注意这里的版本号要跟git里tag标签一样,每个版本都需要打上跟version同样名称的tag,并推送到远程仓库

  • s.summary
    库概要

  • s.description
    description指的是对库的描述,平时我们使用pod search 库名的时候,每个库有一个简单的介绍,指的就是这个description

  • s.homepage
    主页,一般都填写git仓库的主页URL

  • s.license
    license默认就好,不要去改动

  • s.author
    作者相关信息,一般形式是'作者名' => '联系方式'

  • s.source
    源码,这里填写库的Git地址,别人使用你的库时,pod是根据这个Git地址来打包编译的

  • s.social_media_url
    社交地址,可以填写自己对应博客或网站的地址

  • s.ios.deployment_target
    库发布的iOS适配版本号,一般指最低支持的iOS版本

  • s.source_files
    库的源码,需要明确指定,pod编译打包库时编译的就是这里指定的源码,一般都以通配符形式匹配

  • s.resource_bundles
    资源文件,一般指图片、xib、storyboard、配置文件等,库里引用资源文件需要注意得是资源文件路径是在 库名.bundle 里

  • s.public_header_files
    开放的公共头

  • s.frameworks
    私有库需要依赖系统的哪些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'

编写库源码

发布pod

  • 本地验证podspec有效性
    pod lib lint PodspecLib.podspec --allow-warnings
  • 将工程代码上传到远程仓库
  • 添加tag标签并把tag推送到远程仓库,tag标签值要与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


发布成功后:https://cocoapods.org/pods/PodspecLib

  • 如果是第一次发布Pod,那么trunk之后需要去Claim your Pod认领下。
    认领填写的信息可以通过以下命令查询:

pod trunk info PodspecLib

  • 查看自己的注冊信息

pod trunk me

  • 假设你的pod是由多人维护的,你也能够加入其它维护者

 pod trunk add-owner ARAnalytics kyle@cocoapods.org

  1. 解决pod lib lint/repo push不支持i386编译&只能真机运行的库
  • pod lib lint 命令添加 --skip-import-validation 参数,lint 将跳过验证 pod 是否可以导入。
  • pod trunk push 命令添加 --skip-import-validation 参数,push 将跳过验证 pod 是否可以导入。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容