podspec.learn
创建podspec:
pod spec create 名字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gzn61Zt9-1626867805118)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721161313198.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YJ5zXX1f-1626867805134)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721161337589.png)]
字段含义及使用
一、基本的设置
1 name and version
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBC2zAsF-1626867805136)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721162345650.png)]
版本三段式含义 X.Y.Z
X:大版本号(我们管不了)
Y:向下兼容(),新增功能,递增该号
Z:修复问题,递增该号
2 ccpod版本
spec.cocoapods_version = '>= 0.36'
3 作者信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eW2pbN4k-1626867805138)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721163150234.png)]
名字=>邮箱
还有另外两种方式
spec.author = 'Darth Vader'
spec.authors = 'Darth Vader', 'Wookiee'
4 证书
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAmQMWPZ-1626867805140)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721163728726.png)]
看他意思这个字段不用管,除非自己特殊需求
5 homepage
git的地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAbMyBDs-1626867805141)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721164250241.png)]
6 source
git的地址和版本/tag,其语法可以看下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqwXe8Pn-1626867805149)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721164541840.png)]
7 summary
简短的描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oJrBkjhu-1626867805151)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721164753780.png)]
8 description
更为详细的描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjRDRneP-1626867805152)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721165059894.png)]
9 documentation_url
pod 文档所在地
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMDJAzeR-1626867805153)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721165431937.png)]
10 prepare_command
下载pod之后要运行的bash脚本,这个等会测一下
spec.prepare_command = 'ruby build_files.rb'
spec.prepare_command = <<-CMD
sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
CMD
11 static_framework
对静态库不清楚
之后再学习。
spec.static_framework = true
12 deprecated
这个废弃一般不会用吧
spec.deprecated = true ///该pod已经废弃
13 deprecated_in_favor_of
该pod被弃用了然后被改成了其他的
spec.deprecated_in_favor_of = 'NewMoreAwesomePod'
二、 平台设置
1 platform
指定平台,这个可以,只可指定一次,多个平台用deployment_target
spec.platform = :osx, '10.8'
spec.platform = :ios
spec.platform = :osx
2 deployment_target
多平台支持
spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'
三、构建设置
1 dependency
制定该pod所依赖的其他pod的版本
有一些特殊的语法
~> 1.0.1等价于>=1.0.1但是小于1.1,同样 ~> 1.0等价于1.X.X不会超过2.0
当然不写版本意味着支持所有版本
2 info_plist
将大括号里的值放到项目info。plist中
spec.info_plist = {
'CFBundleIdentifier' => 'com.myorg.MyLib',
'MY_VAR' => 'SOME_VALUE'
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXIKTiKw-1626867805153)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721173030981.png)]
3 requires_arc
是否启用arc
默认是支持
spec.requires_arc = true
4 frameworks
spec.ios.framework = 'CFNetwork'
spec.frameworks = 'QuartzCore', 'CoreData'
5 libraries
???
6 compiler_flags
编译时需要传递的参数
spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'
7 pod_target_xcconfig
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mRepSM4v-1626867805154)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721174928050.png)]
可能是在像buildsetting中配置的差不多
9 module_name header_dir prefix_header_file等这些在buildsettings中应该都有对应。
四 文件模式
podspecs应该位于项目根目录
这一节讲的是*。podspecs的内容规范
1 文件匹配格式
正则表达式等。用到了再看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PYwHVGIe-1626867805155)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721175943598.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PU7MoNd2-1626867805155)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721180037256.png)]
2 看一个例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ab92ddKI-1626867805156)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721180402965.png)]
(1) spec.default_subspecs = ‘Core’, ‘QQ’, ‘Verification’
定义了一个二级的依赖。意思就是说,一级pod在引入的时候执行"pod ‘AFNetwork’", 定义了二级依赖之后就可以这个样写了"AFNetwork/Core".
(2) spec.subspec ‘Core’ do |ss| spec的下一个依赖’Core’ 执行ss中的操作。
(3) ss.source_files = “NWUserSDK/**/.{h,m}”,根据1中的文件读取规范,拿到所有的.{h,m}文件
(4) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4iETE1hQ-1626867805157)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210721181301946.png)]
这个sdk公开的头文件,及外部可以进行引入
3 经过这个例子就学习了一些字段
下面这个private_header_files,public_header_files,build时出错要注意这两项,负责在项目加一个文件夹,文件夹中有文件,由于public_header_files中没有加这个路径,编译时候就找不到
4 vendored_frameworks
pod附带的框架包的路径
spec.ios.vendored_frameworks = 'Frameworks/MyFramework.framework'
5 vendored_libraries
Pod 附带的库的路径。没见过,见过再补充
6 resource_bundles
指定资源文件的路径,问:??
通过沙盒读取这些文件?
官方说最好使用下面这种倒入资源的方式
spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }
spec.resource_bundles = {
'MapBox' => ['MapView/Map/Resources/*.png'],
'MapBoxOtherResources' => ['MapView/Map/OtherResources/*.png']
}
7 resources
.bundle就是SDK的资源列表吗?
spec.resource = 'Resources/HockeySDK.bundle'
spec.resources = ['Images/*.png', 'Sounds/*']
spec.resource给他传入一个资源文件列表
8 exclude_files
排除一些文件,就是build的时候考虑他们
spec.ios.exclude_files = 'Classes/osx'
spec.exclude_files = 'Classes/**/unused.{h,m}'
9 preserve_paths
在下载之后就不能够被删除的文件,应该是可以修改的吧?
spec.preserve_path = 'IMPORTANT.txt'
spec.preserve_paths = 'Frameworks/*.framework'
10 module_map
当这库作为静态库被继承的时候,需要进行映射的map?????什么鬼
spec.module_map = 'source/module.modulemap'
五 subspecs
1 subspecs中的
可以接着四.2的例子来看
其实是一个模块,
子模块继承了spec(父规范的属性)
官网说可以处理重复引起的任何问题,但是当父子指定依赖重复或者冲突的时候,cocoPod会怎样处理呢,这个需要研究一下, 估计是pod install出错,或者以子规范为准。
subspec 'Twitter' do |sp|
sp.source_files = 'Classes/Twitter'
end
subspec 'Pinboard' do |sp|
sp.source_files = 'Classes/Pinboard'
end
还可以new来,两种方式,一种是四.2的例子中的spec.default_subspecs = ‘Core’, ‘QQ’, ‘Verification’,另一种是new
Pod::Spec.new do |s|
s.name = 'RestKit'
s.subspec 'Core' do |cs|
cs.dependency 'RestKit/ObjectMapping'
cs.dependency 'RestKit/Network'
cs.dependency 'RestKit/CoreData'
end
s.subspec 'ObjectMapping' do |os|
end
end
2 测试中的
test_spec.requires_app_host = true
3 scheme
这个字段好像有说发,如果是url scheme的话,就可以在原生层对,不行他有动态的字段。但是可不可以通过代码来指定一下依赖呢
4 test_spec
测试用的先不研究了
5 app_spec
是app的一些配置文件和应用程序依赖,,pod可以指定app的配置文件吗?
6 default_subspecs
规范了子规范需要遵守的配置
spec.default_subspec = 'Core'
spec.default_subspecs = 'Core', 'UI'
spec.default_subspecs = :none