写在前面:
本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。
关于 file not found 的错误,简单理解就是 xxx.h 文件在编译时未找到。
报错场景一般为导入xxx.h文件,编译后报红色警告。从严重程度上来说分为:可以运行、无法运行两种;从文件类型上来说分为:第三方文件、自定义文件两种;以下就从这里入手讨论:
1 . 第三方文件 file not found
第三方的文件集成大部分是通过CocoaPods工具下载安装的,CocoaPods会在下载后自动把下载的三方库引入到工程中来。
(1)无法编译运行,报红色警告:
<1> CocoaPods集成时并未集成这个第三方
<2> 引入头文件方式错误比如:需要以<第三方库名/头文件名.h> 但是引入时直接引入<头文件名.h>
<3> 链接库地址出错,无法找到准确的目标文件导致红色警告。
解决方法:TARGETS --> Build Setting -->搜索Header Search Paths 查看报错文件是否配置;如果已经配置请查看填的路径根文件夹实际路径不同。
<4> .xcconfig中路径与实际路径不同。
如
在底部搜索框中输入 xxx.xcconfig 点击查看内容。
去文件夹看看相应路径是否存在该文件,通常会是在别的文件夹下面。
(2)可以编译运行,报红色警告:
<1> Xcode 抽风;或者等一会就自己消失了。
解决办法:忽略,这种情况大多是编译还没有完全结束才会如此。
< 2> 可以正常运行项目,但红色警告一直存在;这种情况99%是项目中使用了PCH文件才导致的,可以把报错的文件拷贝到其他地方测试便能够得出结论。
解决办法:
(1)由于PCH文件是需要在项目中手动配置,因为苹果官方是不推荐使用PCH的。可以尝试替换掉PCH。
(2) 如果一定要使用PCH,请检查是否对编译环境做了区分,比如是否有添加:#ifdef__OBJC__ #endif;
< 3 > 项目运行正常,编译正常只有在 Clean 时会出现红色警告;再次编译警告消失
注:这种情况主要是因为Clean 引起的,Clean的作用就是清除编译过程中的中间文件、目标文件以及可执行文件,使得项目回到没有被编译之前。
2. 自定义文件
(1)无法编译运行,报红色警告:
<1> 未导入相关文件导致
<2>导入文件时未选中Add to targets 或 Added folders
<3>未添加到Compile Sources 中
解决办法:TARGETS --> Build Phasses-->Compile Sources 添加
(2)可以编译运行,报红色警告: 和第三方报错原因一致。