实战 | 一次哭笑不得的 COCOAPODS 解坑之旅
Posted ZeroStatus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战 | 一次哭笑不得的 COCOAPODS 解坑之旅相关的知识,希望对你有一定的参考价值。
WHAT IS COCOAPODS
(什么是COCOAPODS?)
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 44 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.
在我实际项目使用过程中,C
文件的存在给我编写spec
带来了很大问题。
故事是这样的,我们项目中要引用另一个团队编写的.a
库,暂且称为inner.a
。这个库是C
写的,同时,头文件中存在多层嵌套。
这要求在使用该静态库时,要在HEADER_SEARCH_PATHS
中添加头文件的路径。
于是我一开始在podspec中是这么写的
ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" =>"MyLibrary/cfiles/**"}
于是,编译出错了,找不到头文件,因为这个设置在xcode中是这样的:
HEADER_SEARCH_PATHS
Shit!为什么不像上面似的,给加相对路径呢,毕竟是路径的设置嘛。
error: file not found
然而要解决这个问题的关键思路,不是靠猜 COCOAPODS 的路径规则是怎样的,虽然我也是在猜了 4 天之后才找到正确的方法。网上搜索了很多,包括在cocoapods的邮件列表中也有很多的类似的问题,最终还是没能解决我的问题。
① 设置子目录结构保持不变。
ss.header_mappings_dir = "."
② 设置 HEADER_SEARCH_PATHS, 然而这个最关键,我们怎么才知道自己设置的路径到底对不对呢?在执行 pod spec lint {your project}.podspec --verbose 命令后,控制台上的错误信息还是没办法帮到你。因为你并不清楚最终的头文件在什么目录下。怎么办? 其实最关键的是我们忽略了一个重要的参数 --no-clean 。当 pod spec lint 加上这个参数后,当在lint失败后,cocoapods 不会清除对应的目录,我们复制控制台里 pods 的路径,再结合 open 命令便可以进入到 pods 生成的目录,这个时候便一目了然,再去设置头文件搜索路径便轻松多了。另外,在设置 HEADER_SEARCH_PATHS 时,借助 ${PODS_ROOT} 这个环境变量便会让你事半功倍,无论你的头文件是在 Headers/Public 下,还是在 Headers/Private 下,抑或又是在其他目录下,现在你可以随心所欲的去设置头文件搜索路径了。
祝你成功! 以上是关于实战 | 一次哭笑不得的 COCOAPODS 解坑之旅的主要内容,如果未能解决你的问题,请参考以下文章