iOS génère automatiquement certaines variables d'environnement que l'on peut trouver dans le NSDictionary fourni par :
NSDictionary * dic = [[NSProcessInfo processInfo] environment];
Le contenu de ce dictionnaire varie fortement en fonction du contexte d'exécution de l'application, ce qui nous permet de détecter par exemple si l'on est connecté avec Xcode au device : (parfait pour les tests)
if(![[[NSProcessInfo processInfo] environment] objectForKey:@"NSUnbufferedIO"]){
NSLog(@"On n'est pas connecté à XCode");}
else{
NSLog(@"On est connecté à XCode");}
Ce dictionnaire nous permet de savoir si nous sommes en test :
if([[[[[NSProcessInfo processInfo] environment] objectForKey:@"XCInjectBundle"] pathExtension] isEqualToString:@"xctest"]){
NSLog(@"On est en test");}
else{
NSLog(@"On n'est pas en test");}
Enfin, il permet de savoir si l'on est en exécution sur un simulateur (Sans utiliser de Macro) :
if([[[[NSProcessInfo processInfo] environment] objectForKey:@"IPHONE_SIMULATOR_DEVICE"] isEqualToString:@"iPhone"] || [[[[NSProcessInfo processInfo] environment] objectForKey:@"IPHONE_SIMULATOR_DEVICE"] isEqualToString:@"iPad"]){
NSLog(@"On est sur le simulateur");}
else{
NSLog(@"On n'est pas sur le simulateur");}