实战 | 一次哭笑不得的 COCOAPODS 解坑之旅

3,567 阅读2分钟
原文链接: mp.weixin.qq.com

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 下,抑或又是在其他目录下,现在你可以随心所欲的去设置头文件搜索路径了。

祝你成功!🎉🚀📅🌍👍

相关参考资料:

1.http://www.bijishequ.com/detail/537246

2.https://groups.google.com/forum/#!forum/cocoapods