Уже спрошенный, но с совсем другим заголовком.
, Что #defines настраиваются XCode при компиляции для iPhone
, я повторю свой ответ оттуда:
Это находится в документах SDK при "Компиляции исходного кода условно"
, соответствующим определением является TARGET_OS_SIMULATOR, который определяется в/usr/include/TargetConditionals.h в платформе iOS. На более ранних версиях набора инструментальных средств необходимо было записать:
#include "TargetConditionals.h"
, но это больше не необходимо на токе (Xcode 6/iOS8) набор инструментальных средств.
Так, например, если Вы хотите проверить работу устройства необходимо сделать
#if TARGET_OS_SIMULATOR
// Simulator-specific code
#else
// Device-specific code
#endif
, в зависимости от которого подходит для примера использования.
Это подразумевается для работы официально.
#if TARGET_IPHONE_SIMULATOR
NSString *hello = @"Hello, iPhone simulator!";
#elif TARGET_OS_IPHONE
NSString *hello = @"Hello, device!";
#else
NSString *hello = @"Hello, unknown target!";
#endif
<час> Этот код скажет Вам, если Вы будете работать в средстве моделирования.
#ifdef __i386__
NSLog(@"Running in the simulator");
#else
NSLog(@"Running on a device");
#endif
У меня была такая же проблема, оба TARGET_IPHONE_SIMULATOR
и TARGET_OS_IPHONE
всегда определены и имеют значение 1. Решение Пита, конечно, работает, но если вы когда-нибудь будете использовать что-то другое, кроме Intel (маловероятно, но кто знает), вот что-то безопасное, пока оборудование iphone не меняется (так что ваш код всегда будет работать для имеющихся в настоящее время iPhone):
#if defined __arm__ || defined __thumb__
#undef TARGET_IPHONE_SIMULATOR
#define TARGET_OS_IPHONE
#else
#define TARGET_IPHONE_SIMULATOR 1
#undef TARGET_OS_IPHONE
#endif
Поместите это в удобное место, а затем сделайте вид, что константы TARGET _ *
определены правильно.
Не директива препроцессора, но это было то, что я искал, когда подошел к этому вопросу;
NSString *model = [[UIDevice currentDevice] model];
if ([model isEqualToString:@"iPhone Simulator"]) {
//device is simulator
}