2009-12-01 3 views
13

Y a-t-il un moyen de compiler sous condition dans mon application selon que je construis pour le simulateur ou l'appareil? (Mon application se connecte à un serveur externe: si je cours sur l'appareil, je veux me connecter à localhost, si je cours sur l'appareil, je veux aller à mon serveur de production.)Détecter dans le projet iPhone Xcode si je construis pour simulateur ou appareil?

Je cherche une variable #ifdef que je peux détecter, ou même quelque chose à l'exécution ... peu importe.

Merci.

Répondre

18
#if !(TARGET_IPHONE_SIMULATOR) 

ou, alternativement,

#if (TARGET_OS_IPHONE) 

vous dira si vous utilisez l'appareil. Pour que cela fonctionne, vous devez

#include "TargetConditionals.h"

fichier

que vous pouvez trouver here.

+0

Merci ... qui semble fonctionner. N'importe quel moyen de savoir quoi d'autre est défini dans "TargetConditionals.h"? Je ne trouve pas le fichier n'importe où ... –

+2

Correction ... votre deuxième exemple (TARGET_OS_IPHONE) réussit toujours, à condition, bien sûr, que vous faites le développement de l'iPhone. Votre premier exemple, TARGET_IPHONE_SIMULATOR, est ce que je recherche, et cela ne fonctionne que si vous utilisez le simulateur (par rapport à l'appareil). –

+0

Édité avec un lien vers le fichier. – luvieere

1

J'ai créé une macro dans laquelle vous pouvez spécifier les actions que vous souhaitez effectuer entre parenthèses et ces actions ne seront effectuées que si le périphérique est en cours de simulation.

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

C'est utilisé comme ceci:

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