脑子不好,需要记录
概念
1.code repository 代码仓库,主要存放我们提交的代码
2.spec repository 配置仓库,所有的配置按照包名、版本号存放在这个仓库。这个仓库只用来存放.podspec
文件,不存放代码。
一、创建 pod 库
1、使用命令创建 pod 库
- 我为了省事,直接在桌面目录下创建了一个名为
GSWebviewLib
的 pod 库。
使用 pod 命令pod lib create libName
创建 pod 库
libName 为你想要的库的名字,也是后续能通过pod search libName
搜索到的名字
创建pod库
- 上面的命令可能会等待几分钟,耐心等待即可,直到出现下面的视图。
创建成功
2、配置 pod 库
- 配置 pod 库的‘平台’、‘语言’、‘前缀’等等。右侧为答案的选项,需要什么直接在终端上敲对应的命令,然后回车即可,进入下一个配置。(如果什么都不写,直接回车的话,默认选择第一个)。
# 选择使用平台
What platform do you want to use?? [ iOS / macOS ]
> iOS
# 选择编程语言
What language do you want to use?? [ Swift / ObjC ]
> ObjC
# 在你的项目中是否创建一个demo工程
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
# 测试框架选择哪一个
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
# 要不要做视图测试
Would you like to do view based testing? [ Yes / No ]
> No
# 类的前缀
What is your class prefix?
> GS
- 所有的配置都配置完后,会自动打开我们当前的 pod 库。
配置完成
二、pod 项目结构
1、项目结构
系统会自动打开一个 Xcode 工程,具体的结构如下,XXX.podspec
为我们的配置文件。
pod 目录结构
2、xxx.podspec配置
2.1、注意点:
- s.name:名称,为我们对外提供的库名,也是我们通过
pod search xxxx
的名字。 - s.version:版本(tag),需要和我们的 tag 保持一致。
- s.summary:pod search 搜索的关键词
- s.description:description 的文案要比summary 长,否则会有个验证不过的问题。
- s.license:许可证
- s.author:作者
- s.social_media_url:社交网址
- s.platform:平台
- s.source:Git仓库地址,例如在Github地址后边加上 .git 就是Git仓库地址.即我们的项目路径url
- s.source_files:需要包含的源文件 ,下文有详细说明
- s.resources:需要包含的图片等资源文件
- s.dependency:依赖库,如有多个可以这样写,需要用到的frameworks,不需要加.frameworks后缀
- s.requires_arc:是否要求ARC
- s.homepage:主页地址,例如GitHub 地址,主页的网站一定是能访问的。
Pod::Spec.new do |s|
# pod search 搜索的关键字,不需要手动改变
s.name = 'GSWebviewLib'
# 版本号,注意,需要和我们代码里的tag保持一致
s.version = '0.1.0'
# 简介
s.summary = 'webview'
# 详细描述
s.description = <<-DESC
主要封装了 UIWebview 和 WKWebview 在Cordova中的使用,使用插件来和H5交互
DESC
# 项目主页地址,必须是可以访问的地址
s.homepage = 'http://www.baidu.com'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
# 许可证
s.license = { :type => 'MIT', :file => 'LICENSE' }
# 作者
s.author = { 'Tony0822' => 'XXXXXX(会自动生成)' }
# 项目地址
s.source = { :git => 'http://xxxxx@gitlab.xxxx.com/xxxxx/GSWebviewLib.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
# 源码文件的配置路径,所有的代码都在这个目录下
s.source_files = 'GSWebviewLib/Classes/**/*'
# 资源文件的配置路径
# s.resource_bundles = {
# 'GSWebviewLib' => ['GSWebviewLib/Assets/*.png']
# }
# 源码头文件的配置路径
# s.public_header_files = 'Pod/Classes/**/*.h'
# 系统框架的依赖库
# s.frameworks = 'UIKit', 'MapKit'
# 第三方框架的依赖库
# s.dependency 'AFNetworking', '~> 2.3'
- s.source_files 常见写法
* 表示匹配所有文件
*.{h,m} 表示匹配所有以 .h/.m结尾的文件
** 表示匹配所有 子目录
2.2、上面的 podspec 文件修改后,需要进行验证,否则提交不上去
验证 podspec 文件,编辑完 podspec 文件需要验证一下这个文件是否可用 podspec 文件不允许有任何的 warning 或者 error
pod lib lint :
--allow-warnings 允许有任何的Warning
--verbose 获取更多错误信息
--use-libraries 包含.a 需要添加此参数:
-
tag 上传 podspec 文件中需要指定的 tag ,完成上述操作后给项目打 tag
git tag -m"update lib podspec" "1.0.0"
git push --tags
进入到Example
文件夹中验证刚才我们填写的是否有错误
使用pod lib lint NAME
命令可以验证.podspec文件是否符合规范。
也可以使用 pod lib lint
校验
校验
2.3 添加文件
- 在上面podspec 文件中,可以看出,所以的代码都在Classes 文件目录下的。如下,添加
GSLog
类,来测试是否添加成功。
添加对应的文件
- 更新 pod
更新pod
三、创建 podspec
- 使用命令
pod repo add GSWebviewLibSpecs http://xxxx@gitlab.xxxx.com/xxxx/GSWebviewLibSpecs.git
成功后,可以在我们本地的 cocoapods 目录下,会生成一个GSWebviewLibSpecs
文件夹 - 使用命令
pod repo push GSWebviewLibSpecs GSWebviewLib.podspec
会把我们的pod 放到 podspec 中
gao:GSWebviewLib yang$ pod repo add GSWebviewLibSpecs http://xxxx@gitlab.xxxx.com/xxxx/GSWebviewLibSpecs.git
Cloning spec repo `GSWebviewLibSpecs` from `http://xxxx@gitlab.xxxx.com/xxxx/GSWebviewLibSpecs.git`
gao:GSWebviewLib yang$ pod repo push GSWebviewLibSpecs GSWebviewLib.podspec
- 如果报出下面的错误信息
Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.
,
我们只需要在GSWebviewLibSpecs
中添加一个文件,是 仓库不是空仓库即可。
报错.png
- 再次运行,显示正常
成功
- 在 cocoapods 文件中可以查看到如下目录结构
目录结构
使用
创建一个测试工程 ,
# platform :ios, '9.0'
source ‘http://xxxx@xxxx.com/xxxx/GSWebviewLibSpecs.git’ #私有仓库地址
target 'GSPodDemo' do
pod 'GSWebviewLib'
end
添加子文件
如果想在pod后的文件成目录结构,可以定义subspec
s.subspec 'mySecondObject' do |ss|
ss.source_files = 'myBase/mySecondObject/**/*.{h,m}'
end
s.subspec 'handyFrame' do |hf|
hf.source_files = 'myBase/handyFrame/**/*.{h,m}'
end