2010-08-06 13 views
54

Mit dem Makro werden dieselben konstanten Werte in einer Anwendung definiert. Zum Beispiel:Ziel-iPhone-Simulator-Makro funktioniert nicht

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

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

Führt immer dazu, dass "Mode: Simulator" protokolliert wird. Ich laufe gerade XCode 3.2.4, wenn das hilft. Vielen Dank.

+5

ändern ifdef zu if – Taranfx

+0

TARGET_IPHONE_SIMUATOR hat einen Tippfehler (fehlende 'L'), und es zeigt sich in der Google-Suche Vorschau als solche. – wilsonmichaelpatrick

+0

@wilsonmichaelpatrick behoben –

Antwort

103

TARGET_OS_SIMULATOR ist auf dem Gerät definiert (aber definiert als false). Das Problem ist:

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

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

Nicht sicher, wann dies geändert wurde. Ich bin ziemlich sicher, dass es möglich war, 'ifdef' in der Vergangenheit zu verwenden.

+1

Dies ist ein häufiger Fehler in vielen Bibliotheken, e.h. hier: https://github.com/domesticcatsoftware/DCIntrospect/issues/24. Danke, dass du deine Lösung geteilt hast! – steipete

+3

Danke für das Thema; Ich dachte, ich würde verrückt werden, oder schlimmer (ich habe meine jahrelange C-Entwicklung vergessen). –

+1

TARGET_IPHONE_SIMULATOR ist in iOS 9 veraltet. Verwenden Sie TARGET_OS_SIMULATOR in XCode 7 –

3

Ich würde versuchen, Makro zu implementieren, wenn es in verschiedenen Klassen durch die App verwendet werden soll.

in pch Datei,

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

und in jeder Klasse I durch den Aufruf isSimulator überprüfen().

1

Aus irgendeinem Grund funktioniert TARGET_IPHONE_SIMULATOR in xcode v6.4 nicht für mich. Das Snippet unten funktioniert perfekt:

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

Für mich ausdrücklich einschließlich TargetConditionals.h

half
#include <TargetConditionals.h> 
+0

Sie haben meine Tage gerettet! – jayatubi

+0

Scheint mir, dass ab einer bestimmten Xcode-Version (ich verwende derzeit 7.3.1) dies notwendig ist. – appleitung

+0

Kann bestätigen, dass dies in Xcode 8.2.1 erforderlich ist – Sebyddd

5

Try TARGET_OS_SIMULATOR, als TARGET_IPHONE_SIMULATOR veraltet.

Verwandte Themen