【问题标题】:Target iPhone Simulator Macro Not Working目标 iPhone 模拟器宏不起作用
【发布时间】:2011-03-26 13:37:17
【问题描述】:

使用TARGET_IPHONE_SIMULATOR 宏会导致在应用程序中定义相同的常量值。例如:

#ifdef TARGET_IPHONE_SIMULATOR
NSString * const Mode = @"Simulator";
#else
NSString * const Mode = @"Device";
#endif

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
   ...
   NSLog(@"Mode: %@", Mode);
   ...
}

总是导致“模式:模拟器”被记录。如果有帮助,我目前正在运行 XCode 3.2.4。谢谢。

【问题讨论】:

  • TARGET_IPHONE_SIMUATOR 有一个错字(缺少“L”),因此它显示在 Google 搜索预览中。
  • @wilsonmichaelpatrick 已修复

标签: iphone cocoa-touch


【解决方案1】:

TARGET_OS_SIMULATOR 在设备上定义(但定义为 false)。解决方法是:

#include <TargetConditionals.h> // required in Xcode 8+

#if TARGET_OS_SIMULATOR
NSString * const Mode = @"Simulator";
#else
NSString * const Mode = @"Device";
#endif

不确定何时更改。我很确定过去可以使用“ifdef”。

【讨论】:

  • 这是许多库中的常见错误,e.h.在这里:github.com/domesticcatsoftware/DCIntrospect/issues/24。感谢您分享您的解决方案!
  • 感谢主题;我以为我要疯了,或者更糟(忘记我多年的 C 开发)。
  • TARGET_IPHONE_SIMULATOR 在 iOS 9 中已弃用。在 XCode 7 中使用 TARGET_OS_SIMULATOR
【解决方案2】:

对我来说明确包括 TargetConditionals.h 帮助

#include <TargetConditionals.h>

【讨论】:

  • 在我看来,从某些特定的 Xcode 版本开始(我目前使用的是 7.3.1)这是必要的。
【解决方案3】:

尝试 TARGET_OS_SIMULATOR,因为 TARGET_IPHONE_SIMULATOR 已弃用。

【讨论】:

    【解决方案4】:

    如果要在整个应用程序中用于不同的类,我会尝试实现宏。

    在pch文件中,

    #if TARGET_IPHONE_SIMULATOR
    #define isSimulator() YES
    #else
    #define isSimulator() NO
    #endif
    

    在任何类中我都可以通过调用 isSimulator() 来检查。

    【讨论】:

      【解决方案5】:

      由于某种原因 TARGET_IPHONE_SIMULATOR 在 xcode v6.4 中对我不起作用。下面的 sn-p 完美运行:

      #if (!arch(i386) && !arch(x86_64))
        camera           = Camera()
      #else
        camera           = MockCamera()
      #endif
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-15
        • 2010-09-23
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 2023-04-04
        相关资源
        最近更新 更多