创建pod模版项目
使用pod命令创建私有库模板项目
pod lib create 私有库名,如创建一个名为PodspecLib的库
pod lib create PodspecLib
接下来提示你选择库的信息
分别是:
- 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自动打开工程
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 库名的时候,每个库有一个简单的介绍,指的就是这个descriptions.homepage
主页,一般都填写git仓库的主页URLs.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
- 解决pod lib lint/repo push不支持i386编译&只能真机运行的库
- pod lib lint 命令添加 --skip-import-validation 参数,lint 将跳过验证 pod 是否可以导入。
- pod trunk push 命令添加 --skip-import-validation 参数,push 将跳过验证 pod 是否可以导入。