实战 | 一次哭笑不得的 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中是这样的:


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

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 解坑之旅的主要内容,如果未能解决你的问题,请参考以下文章

iOS模块化管理之CocoaPods实战

CocoaPods-第一次使用记录(2016)

通过CocoaPods漏洞一次入侵数百万个应用程序

在团队开发中使用 CocoaPods 的小技巧

手把手ios苹果打包——遇见项目实战|超详细的教程分享

第一次安装cocoapods很慢或出错怎么办?Unable to add a source with url...