2010-08-06 123 views
54

使用宏TARGET_IPHONE_SIMULATOR導致在應用程序中定義相同的常量值。例如:目標iPhone模擬器宏不工作

#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。謝謝。

+5

ifdef更改爲if – Taranfx 2011-03-07 07:06:44

+0

TARGET_IPHONE_SIMUATOR有一個拼寫錯誤(缺少'L'),並且它顯示在谷歌搜索預覽中。 – wilsonmichaelpatrick 2017-07-21 19:05:25

+0

@wilsonmichaelpatrick固定 – 2017-07-21 19:49:03

回答

103

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'。

+1

這是許多庫,e.h中的常見錯誤。這裏:https://github.com/domesticcatsoftware/DCIntrospect/issues/24。感謝您分享您的解決方案! – steipete 2011-07-27 11:22:35

+3

感謝您的話題;我以爲我生氣了,或者更糟糕(忘記我多年的C開發)。 – 2011-08-03 19:49:13

+1

TARGET_IPHONE_SIMULATOR在iOS 9中不推薦使用。在XCode 7中使用TARGET_OS_SIMULATOR – 2015-12-23 07:23:41

3

我會嘗試實現宏,如果它將通過應用程序在不同的類上使用。

在PCH文件,

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

,並在任何類我可以通過調用isSimulator檢查()。

1

出於某種原因,TARGET_IPHONE_SIMULATOR在xcode v6.4中不適用於我。下面的代碼片段完美的作品:

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

對我來說,明確包括TargetConditionals.h幫助

#include <TargetConditionals.h> 
+0

您保存了我的日子! – jayatubi 2015-09-16 04:02:05

+0

在我看來,從某些特定的Xcode版本(我目前使用7.3.1)這是必要的。 – appleitung 2016-11-01 13:38:21

+0

可以確認這在Xcode 8.2.1中是必需的 – Sebyddd 2017-02-10 12:00:18

5

嘗試TARGET_OS_SIMULATOR,如TARGET_IPHONE_SIMULATOR已被棄用。

相關問題