Pch文件惹的祸

小引

从 Xcode 6 开始,苹果就阉割掉了Precompile Prefix Header(pch文件),阉割并不就意味着不再让你使用了,只是苹果更推荐你不要使用它。如果你非用不可,你可以手动添加来启用它。想必大家都很清楚 pch 文件的作用,但是,在你遇到问题时,你是否会意识到问题是它惹的祸呢?

正文

此篇文章源起一个报错,如下图所示:

image

这是在我在 Xcode 6.1 中新建项目导入XMPPFramework时报的错。

其中,有这样一句:

Unknown type name ‘UIImage’

翻译过来也就是找不到UIImage这个类。为什么找不到这个类呢?以前都是相同的操作都没有问题,但是这次为什么有问题了呢?难道是XMPPFramework里面有了变化?在遇到这个问题时,这些疑问都涌上心头。
但仔细一想,在 iOS 中 UI 开头的类名都是 UIKit 里面的文件。找不到 UIImage 这个类应该也就是未导入 UIKit 这个库。此时,恍然大悟,这才想起了被阉割的 pch文件。在老的项目中,pch文件都会自动帮我们引入UIKit框架。问题的原因找到后,我在 XMPP.h 文件中添加了#import <UIKit/UIKit.h>,再次编译项目,果然解决了这个报错。


拓展

  • 文章开头提到了可以手动添加 pch文件,大家可以参考这篇文章:Xcode 6 中添加pch文件
  • 关于苹果为什么阉割掉 pch文件,可以参考 StackOverflow 上的这个回答。

原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0