【发布时间】:2014-11-27 02:29:52
【问题描述】:
总结:
- 我在设备上得到一个编译错误,但在模拟器上没有
- 错误描述肯定不是问题的根本原因
- 我认为这与 SDK 类的标准导入有关
- 这可能与应用中的 iOS8 扩展有关
- stackoverflow 上有类似的问题描述,但是 解决方案对我不起作用
我在 Xcode 6 中遇到了一个奇怪的问题。该项目在模拟器上编译良好,但每当我尝试为设备进行编译时都会出现编译错误。
该项目是从一个标签栏模板创建的(注意:Xcode 6 项目模板默认不再有前缀文件),它包含一个 iOS 应用程序和 iOS8 中引入的新扩展增强功能。应用程序和扩展程序都应该使用一些基类,即使用 AFNetworking 从网络获取数据的类。
如 AFNetworking 文档中所述,我声明 AF_APP_EXTENSION 能够编译扩展。 我不确定这是否与问题有关,只是试图抛出一些事实并希望某些事情能为某人敲响警钟。
无论如何,我在 AFNetworking 中得到构建错误: “在 AFURLRequestSerialization 中,'UIDevice' 没有可见的 @interface 声明选择器 'systemVersion'”。
在尝试导入时,例如在某些随机点导入 UIKit.h 进行尝试,我有时(!)会遇到不同的错误:
“'UIImage' 没有可见的@interface 声明选择器'initWithData:'”在 AFURLResponseSerialization 中。
不用说,这些方法都是从 iOS 2.0 开始声明的。我认为这与导入基类的新方式和缺少前缀文件有关。
Here 是一个如此描述的帖子,我认为,完全相同的问题,但是解决方案,将 Enable Modules 设置为 NO,对我来说根本不起作用,然后我得到 50 多个关于作为 UIResponder 丢失类的编译错误在 AppDelegate 和其他东西中。 我猜这是因为启用模块设置是前缀导入的替代品?但我真的在这里游泳。
我尝试清理,清理构建文件夹,重新启动 Xcode,重新启动 Mac,在这里和那里添加导入,在构建设置中读取 LLVM 编译器设置。
有人知道我该如何解决这个问题吗?任何帮助表示赞赏!
【问题讨论】:
-
我假设您的设备上运行的是 iOS 8,这是正确的吗?另外,您是否尝试过删除设备上的应用并使用 Xcode 重新构建它?
-
是的,iPhone 5c 上的 iOS 8。但即使没有连接设备(只是为默认的“iOS设备”编译),我也会收到错误消息。我从来没有编译成功,这是一个新项目。我无法删除设备上的应用程序,它一开始就没有。
-
好的,你是如何导入 AFNetworking 的?通过 CocoaPods、子模块,还是直接导入到你的项目中?如果 pods 项目未设置为使用 iOS 8 作为基础 SDK,而主项目使用的是 iOS 8,我在使用 CocoaPods 时遇到了问题,反之亦然。
-
直接,将AFNetworking文件夹拖放到项目中,“如果需要就复制”。我还没弄明白 CocoaPods。
-
听起来好像是您的项目的标头路径配置错误,AFNetworking 没有找到它需要的东西。如果您还没有,我会首先尝试删除所有 AFNetworking 代码并更新到最新版本 (2.4.1)。如果您真的喜欢冒险,我会安装 CocoaPods,因为它有助于管理标头路径并保持您的依赖关系井井有条。
标签: objective-c iphone compiler-errors xcode6 device