2009-12-01 15 views
13

Gibt es eine Möglichkeit, in meiner App bedingt zu kompilieren, ob ich für den Simulator oder das Gerät baue? (Meine App hängt an einem externen Server an: Wenn ich auf dem Gerät aktiv bin, möchte ich eine Verbindung zu localhost herstellen; wenn ich auf dem Gerät aktiv bin, möchte ich zu meinem Produktionsserver wechseln.)Erkennen Sie in Xcode iPhone-Projekt, ob ich für Simulator oder Gerät baue?

I ' Ich suche nach einer #ifdef-Variable, die ich erkennen kann, oder sogar etwas zur Laufzeit ... spielt keine Rolle.

Danke.

Antwort

18
#if !(TARGET_IPHONE_SIMULATOR) 

oder alternativ

#if (TARGET_OS_IPHONE) 

wird Ihnen sagen, wenn Sie auf dem Gerät laufen lassen. Damit es funktioniert, müssen Sie

#include "TargetConditionals.h"

Datei, die Sie here finden.

+0

Dank ... das scheint zu funktionieren. Sie können herausfinden, was sonst noch in "TargetConditionals.h" definiert ist? Ich kann die Datei nirgendwo finden ... –

+2

Korrektur ... Ihr zweites Beispiel (TARGET_OS_IPHONE) ist immer erfolgreich, vorausgesetzt, Sie machen natürlich iPhone-Entwicklung. Ihr erstes Beispiel, TARGET_IPHONE_SIMULATOR, ist, was ich suche, und das gelingt nur, wenn Sie auf dem Simulator laufen (vs. dem Gerät.) –

+0

Bearbeitet mit einem Link zu der Datei. – luvieere

1

Ich habe ein Makro erstellt, in dem Sie angeben können, welche Aktionen in Klammern ausgeführt werden sollen. Diese Aktionen werden nur ausgeführt, wenn das Gerät simuliert wird. Diese

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

wird wie folgt verwendet:

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