podspec 校验报错问题指南

podspec 校验报错问题指南,第1张

解决办法:

方法一:优先尝试此方法

方法二:

原因:制作私有库的文件夹,物理路径下没有.h/.m文件,只有子文件夹

解决办法:

spec.source_files = "ShareUIDemo/ShareUIDemo/*"

附加:

对照路径是否错误

路径书写规则:

source_files:这里要注意的是这里的路径是以xxx.podspec文件为根据,同级的话,就写文件名就好(一般要传pod

的最外层文件夹和xxx.podspec文件是同级的)。往后多级的,逐级加。如果多个的话,就分组加,逗号隔开。下面

针对各种情况给出范例:

1)同级的文件夹B里面只有.h和.m文件

source_files = "B/ .{h,m}"

2)多级文件夹B/C/D(只有最后一级文件夹里面有.h和.m文件

source_files = "B/C/D/ .{h,m}"

3)多级文件夹B/C/D,每个文件夹里面敏亮侍都有.h和.m文件

source_files = "B/ .{h.m}","B/C/ .{h.m}","B/C/D/ .{h.m}"

其中C D可以用 *代替

文件匹配

匹配所有文件

c 匹配以名字C开头的文件

*c匹配以名字c结尾的文件

c 匹配所有名字包含c的文件

**文件夹以及递归子文件夹

?任意一个字桥吵符(注意是一个字符)

[set] 匹配多个字符,支持取反

{p,q} 匹配名字包括p 或者 q的文件

解决办法:

打开你的 Xcode,点开偏好设置(Preferences)

找到Locations,然后键尺Command Line Tools,应该是空的,选择Xcode 版本

重新验证成功

ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code

解决办法:

解决方法:

方法一:首先要检查source_files 路径有没有配置对,我的是目录分级时由于有一个路径配置跟其他的重复导致此错误。

方法二:然后尝试:

pod lib lint 后添加 --skip-import-validation

pod repo push 也添加--skip-import-validation

但可能不通过

方法三:podspec 文件添加x86_64 i386配置

s.pod_target_xcconfig = { 'VALID_ARCHS' =>'x86_64 armv7 arm64' }

具体参照博客: https://www.jianshu.com/p/88180b4d2ab7

解决方法:

执行pod repo push podspec 之前一定要先打tag 并提交,tag要与podspec 中保持一致

安装私有库时 使用use_frameworks!,可能导致编译失败。注释掉即可。

写这篇文章的目的,是在项目组件化中,pod文件目录下的文件夹多级(A>>B>>C)分组遇到的一些问题和解决思路

感兴趣的同学可以去 cocopods关于podspec的介绍 看下介绍

我在组件中遇到的问题是 pod完成到本地项目中 只差册尘能显示两级文件夹

就拿AFNetWorking举例吧 上图

我查询了其他关于组件化的文章,对于pod后的文件夹只显示两级关系,虚禅什么意思,就是AFNetwork>>UIKIt,值显示到这里,而我想要的是AFNetWork>>UIKit>>UIButton,或者AFNetWork>UIKit>UILab这些细分的文件夹

在这期间也查阅了YYkit框架 也是只有两级

不懂这些框架为什么不分的详细一些,也有可能都是在一个分类下吧

我想要的是这种样式 来来 上图

OK 结果都展示完了 下面讲一下思路

关于文件显示 都在podSpec文件里的一个属性控制

source_files 是需要编译文件的文件目录,注意是文件目录而不是工程目录

subspec 相当于把项目划分成几个子模块,需要那部分功能,就引入对应的组件,比如 AFNetworking的podspec 在终端上搜索AFNetWorking 你会发现分成几个小模块,比如你需要检测网络时,就只需要引用 AFNetworking/Reachability 即可

下面是重要的

下面是重要的

下面是重要的

在描述 subspec 时 一定要指定对应的 source_files

如果 source_files 定义错误就会报错误

这个是在指定共享的类库时, 文件路径不对, 也就是设置 s.source_files 字段时, 发生了错误, 这里的路径是相对于 SYBaseKit.podspec 文件的, 如果是与 SYBaseKit.podspec 同级的文件夹, 直接写文件夹名称即可

如果 Tool 文件下还有一个子目录,比如Tool>>NetWork

那么需要这样定义

一定要把父文件的source_files注释掉

一定要把父文件的source_files注释掉

一定姿孙要把父文件的source_files注释掉

否则是没有效果的,本人亲测。

参考文献如下

Cocopods Guide

使用Cocoapods创建私有podspec

谈谈CocoaPods组件二进制化方案

cocopods进阶

了解此处的前提是,对cocoapods私有库有所了解,顷戚并对于私有库来说,基本信息都放在.podspec文件中。我们先来看一下podspec长什么样:

具体各个字段代表的含义,此处就不赘述了。

对于依赖项: dependency

如果这里去掉了注释,代表MJExtension内部依赖了AFNetworking

我们需要的就是所有库中的每个库的依赖项

so,如果我们拿到所有库的podspec,从中获雀迹取dependency 内容,就解决了该问题。

对应的.podspec文件,还有一类文件,.podspec.json

可以通过工程文件中 -- Pods(.xcodeproj同目录下)--》Local Podspecs

该目录下存放的就是.json文件

也可以仔渣通过终端中

//打印转换后的JSON。

$ pod ipc spec Name.podspec

//转换JSON

$ pod ipc spec Name.podspec >>Name.podspec.json

转换成json文件后,我们就可以解析json,来获取该库的依赖项

这里我写了一个shell脚本,通过js插件 将依赖项输出到out.log

方法一还需要自己写脚本,并且Local Podspecs 里面不一定包含所有库的podspec的json文件

那么,还有什么办法呢?

在Local Podspecs 所在同一目录中,即Pods文件下,有一个文件Manifest.lock,这玩意干嘛的?

Manifest.lock 是 Podfile.lock 的副本,每次只要生成 Podfile.lock 时就会生成一个一样的 Manifest.lock 存储在 Pods 文件夹下。在每次项目 Build 的时候,会跑一下脚本检查一下 Podfile.lock 和 Manifest.lock 是否一致。

我们看一下里面长什么样:

这东西不是正是我们所需要的么!

对于这个问题,也只是为了知道工程的所有依赖项,如果某一个组建库出现问题,便于快速定位和不遗漏解决问题。需求解决了,也学到js,js插件能过快速解析json文件输出所需内容。

对于podfile.lock可参考

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12246312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存