【问题标题】:Detect in Xcode iPhone project whether I'm building for simulator or device?在 Xcode iPhone 项目中检测我是为模拟器还是设备构建?
【发布时间】:2009-12-01 19:57:47
【问题描述】:

有什么方法可以根据我是为模拟器还是设备构建,有条件地在我的应用程序中编译? (我的应用程序连接到外部服务器:如果我在设备上运行,我想连接到 localhost;如果我在设备上运行,我想去我的生产服务器。)

我正在寻找一些我可以检测到的 #ifdef 变量,甚至是运行时的某些东西……没关系。

谢谢。

【问题讨论】:

    标签: iphone xcode target


    【解决方案1】:
    #if !(TARGET_IPHONE_SIMULATOR)
    

    或者,或者,

    #if (TARGET_OS_IPHONE)
    

    会告诉你是否在设备上运行。为了让它工作,你必须

    #include "TargetConditionals.h"

    你可以找到here的文件。

    【讨论】:

    • 谢谢...这似乎有效。有什么方法可以找出“TargetConditionals.h”中还定义了什么?我在任何地方都找不到文件...
    • 更正...您的第二个示例 (TARGET_OS_IPHONE) 总是成功,当然,前提是您正在进行 iPhone 开发。您的第一个示例 TARGET_IPHONE_SIMULATOR 是我正在寻找的,只有在您在模拟器上运行(相对于设备)时才会成功。
    • 已编辑文件链接。
    • 我从未包含过该文件,而且 TARGET_IPHONE_SIMULATOR 似乎总是有效 - 它可能已经被基金会包含在内。
    【解决方案2】:

    我创建了一个宏,您可以在其中指定要在括号内执行的操作,并且这些操作只有在设备被模拟时才会执行。

    #define SIM(x) if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound){x;}
    

    这样使用:

    SIM(NSLog(@"This will only be logged if the device is simulated"));
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2011-06-28
      • 1970-01-01
      相关资源
      最近更新 更多