58 votes

La macro du simulateur d'iPhone Target ne fonctionne pas

L'utilisation de la TARGET_IPHONE_SIMULATOR permet de définir les mêmes valeurs constantes dans l'application. Par exemple :

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

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

Le résultat est toujours "Mode : Simulateur". J'utilise actuellement XCode 3.2.4 si cela peut aider. Merci de votre compréhension.

0 votes

TARGET_IPHONE_SIMUATOR contient une faute de frappe (il manque un "L") et apparaît comme tel dans l'aperçu de la recherche Google.

0 votes

@wilsonmichaelpatrick fixe

108voto

Kevin Sylvestre Points 15551

TARGET_OS_SIMULATOR est défini sur l'appareil (mais il est défini comme faux). La solution est la suivante :

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

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

Je ne sais pas quand cela a été modifié. Je suis presque sûr qu'il était possible d'utiliser "ifdef" dans le passé.

1 votes

C'est une erreur courante dans de nombreuses bibliothèques, par exemple ici : github.com/domesticcatsoftware/DCIntrospect/issues/24 . Merci de nous faire part de votre solution !

3 votes

Merci pour ce sujet ; j'ai cru devenir fou, ou pire (oubliant mes nombreuses années de développement C).

1 votes

TARGET_IPHONE_SIMULATOR est obsolète dans iOS 9. Utiliser TARGET_OS_SIMULATOR dans XCode 7

13voto

Sebastian Points 218

Pour moi, le fait d'inclure explicitement TargetConditionals.h aidé

#include <TargetConditionals.h>

6voto

Michael Voong Points 27

Essayez TARGET_OS_SIMULATOR, car TARGET_IPHONE_SIMULATOR est obsolète.

3voto

user714236 Points 27

J'essaierais de mettre en place une macro si elle doit être utilisée pour différentes classes tout au long de l'application.

dans le fichier pch ,

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

et dans n'importe quelle classe, je peux vérifier en appelant isSimulator().

1voto

ohad serfaty Points 487

Pour une raison quelconque, TARGET_IPHONE_SIMULATOR ne fonctionne pas pour moi dans xcode v6.4. Le snippet ci-dessous fonctionne parfaitement :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X