方法一:优先尝试此方法
方法二:
原因:制作私有库的文件夹,物理路径下没有.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可参考
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)