【问题标题】:How to setup a file on Xcode to only build on a device and not the simulator?如何在 Xcode 上设置文件以仅在设备而不是模拟器上构建?
【发布时间】:2015-08-26 05:17:27
【问题描述】:

我如何设置一个文件,比如 .h 或 .m(准确地说是 .cpp)以仅在设备上构建而不是在模拟器上运行时构建?这适用于 Xcode 6.4。这些文件在模拟器上运行时会抛出错误,因为它不支持架构。

编辑

是否有编译器标志只在 ARM(设备)而不是 i86(模拟器)上构建文件

【问题讨论】:

    标签: c++ ios xcode compiler-errors compiler-flags


    【解决方案1】:

    您可以将文件包装在方法中,然后将方法包装在以下内容中:

    #if TARGET_IPHONE_SIMULATOR
    -(void)doSomethingUsingSimulatorOnly {
       //do work
    }
    #endif
    

    其他

    #if TARGET_IPHONE_SIMULATOR
        // do stuff when running on Simulator
    #elif TARGET_OS_IPHONE
        // do stuff when running on actual device
    #endif
    

    你也可以这样做:

    if (TARGET_IPHONE_SIMULATOR) {
    
    }
    

    这是您可以尝试的另一个包装器:

    #if defined(__cplusplus) || defined(c_plusplus)
    
    #endif
    

    #ifdef __OBJC__
    
    #endif
    

    所以,你可以用一堆不同的方法来做到这一点,最后一种方法最容易使用,但每个人的口味不同。

    此外,这是 Apple 在最新的 Metal 示例中使用的 sn-p,我认为这对您有用,也许可以将其用作示例。这是来自用于 Metal Video 处理的“.mm”文件,它的基本格式与上面相同:

    #ifdef __cplusplus
    
    
    #endif // cplusplus
    

    【讨论】:

    • 我已经使用我的包含标头仅在使用此方法的实际手机上工作。但即使我没有包含然后抛出错误,它仍然会为模拟器构建所有文件。现在,它只有在我删除对这些文件的引用时才有效。
    • 等一下,让我检查一下
    • 如果您使用的是 xcode 6.4,请尝试最底层的答案,前锋
    • 嗯,它说“令牌不是有效的二元运算符”..可能是因为我使用的是 c++。我还删除了包含头,但它仍然构建文件。是否有编译器标志只能在 ARM 上运行?
    • 不过是的,刚查了一下,可能是c++的原因,我现在看到了,让我再查一件事
    猜你喜欢
    • 2015-11-14
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多