出现错误:
这是由于使用了第三方 framework 或者自己的代码是以 framework 的形式引用的。而且直接在 Swift 文件中 import 了 OC 代码的framework。
解决办法:
- 把 OC 的 framewrok 的引用放到桥接头文件中
#import <HelloWorld/HelloWorld.h>
- 删除 Swift 文件中对 OC framework 的引用
- 简单说就是 Swift 不论是引用 OC 代码还是 OC 的 Framework,都必须通过桥接头文件
另外值得一提的是,如果自己的 OC 代码是以 Framework 的形式引入进来,并且这个 Framework 的Build Active Architecture Only 不论是 Debug 还是 Release 都选择的是 NO,也就是编译armv7,armv7s,arm64 所有平台的指令,在 Swift 中直接引用OC Framework 而不通过桥接头文件是可以通过编译的。
如果该 OC Framework 的Build Active Architecture Only 在 Debug模式设置为 YES,Release 设置为 NO。这也是我们通常针对 Framework 的编译设置,平时只编译当前机器的指令,发布时编译所有平台的指令,这样平时调试的时候编译速度会快一点。这种设置在模拟器可以编译运行,但是真机不能通过。
以上两个表现,这也是我找了半天错误的原因。