ios podspec学习笔记

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值