错误追踪
产生任何头文件错误的时候,虽然错误定位会在引入C++头文件的文件中,但是具体是通过那种嵌套关系导致的,可以在 Show the Report Navigator 中找到详细的引用关系
‘iostream’ file not found
大部分出现在OC和C++混编的时候,头文件的引用无序,导致以Objective-C进行Compile的文件引用了C++的头文件
经常出现在,Framework中的部分功能是由C++提供的,但是在umbrella的头文件中加入了C++的头文件,外部工程直接引用umbrellato头文件报错
详细可以查看后文C++头文件错误解析
Include of non-modular header inside framework module
在进行Framework化的过程中,一旦引用了某些Framework其使用者Project,就会报错
1 | HttpHelper.h:10:9: error : include of non-modular header inside framework module ...#import <CommonCrypto/CommonHMAC.h> |
一般情况是Framework中umbrella的头文件中加入了某个的头文件引用了外部模块的头文件 例如上文的 CommonHMAC.h
详细分析见模块外头文件non-modular
Framework 内部 Swift和OC互相调用
调用 | 问题 | 方案 |
---|---|---|
OC use Swift | #import “Framework-Swift.h” 错误 | 改用 <Framework/Framework-Swift.h> |
Swift use OC | Swift如何引用Bridging文件,加载OC代码 | 将 Bridging文件加入 Umbrella Header |
由于 Framework/Framework-Swift.h 文件是在Framework编译完成后自动生成的,所以使用“双引号”加载该文件必然找不到
而这又会引起另外一个问题 Umbrella文件内加载的头文件Some.h,Some.h内不能加载 Framework/Framework-Swift.h,也就是说使用Swift的OC头文件,不能进入Umbrella
因为Umbrella会优先于一切编译进行预编译,然后此时不管“双引号” “尖括号”路径下都不存在该文件,所以会报错