ios - 当我更改目标设备时,哪些编译器设置会更改?

标签 ios xcode

我有一个适用于模拟器的 iOS 项目,但在为通用设备构建时或当我尝试通过 Xcode 在真实设备上运行时出现编译器错误。注意:实际的编译器错误,而不是链接器或部署错误。这些错误与 typedef 中的不匹配类型有关 - 就好像它包含来自不同 SDK 的 header ,或者具有不同的预处理器定义。

我的问题是 - 当我在 Xcode UI 中更改目标设备时会更改哪些编译器设置,我可以在哪里查看差异?当我查看项目设置并更改目标设备时,我看不到任何差异 - 特别是部署目标版本和 SDK 版本似乎没有变化。

该项目过去常常在 Xcode 7 下使用这些目标设备中的任何一个构建良好,但在 Xcode 8 下却不行。我怀疑这取决于 Xcode 附带的 SDK 版本。但是为了让它与某些目标设备一起工作而不是其他目标设备,它必须更改编译器设置。这应该很容易修复,如果我能看到它正在发生什么变化就好了!

这是无法编译的行(在我的代码中):

typedef     void*           IOSurfaceRef;

这是错误信息:

error: typedef redefinition with different types ('void *' vs 'struct __IOSurface *')

请注意,我不需要帮助修复错误或关于它正在尝试做什么的建议 - 我知道这不好我只是想知道通过切换目标设备更改了哪些编译器设置。

最佳答案

失败是因为 CGBase.h 包含这段代码:

#if !TARGET_IPHONE_SIMULATOR

typedef struct  CF_BRIDGED_TYPE(id) __IOSurface *IOSurfaceRef __attribute__((swift_name("IOSurfaceRef")));

#endif

当您为设备构建时,#if !TARGET_IPHONE_SIMULATOR 预处理器指令为 true,因此您的代码有两个 typedef 用于 IOSurfaceRef类型冲突。

关于ios - 当我更改目标设备时,哪些编译器设置会更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245954/

相关文章:

ios - 使用 SDK 3.3.0.GA 运行 iOS 测试模块时缺少 Titanium 运行命令

javascript - 预缓存模板是否值得?

ios - touchesBegan 不调用容器 View Controller

ios - CSYMGenerator 无法打开 XCode 项目运行

ios - JSON 解码失败

objective-c - 检查条件不起作用并返回无法识别的选择器

swift - 如何删除 CoreData Swift 3 中的所有实体对象

xcode - Xamarin Forms iOS Realm DirectoryNotFoundException

arrays - 从 Swift 中的第二个数组导入

xcode - 如何为 Cocoa Pods 正确配置我的项目?