Как я могу программно определить, работает ли мое приложение в средстве моделирования iPhone?

263
задан Haroldo Gondim 8 August 2018 в 03:10
поделиться

4 ответа

Уже спрошенный, но с совсем другим заголовком.

, Что #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

, в зависимости от которого подходит для примера использования.

352
ответ дан Jeremy Huddleston Sequoia 23 November 2019 в 02:30
поделиться

Обновленный код:

Это подразумевается для работы официально.

#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
106
ответ дан Albert Renshaw 23 November 2019 в 02:30
поделиться

У меня была такая же проблема, оба 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 _ * определены правильно.

4
ответ дан 23 November 2019 в 02:30
поделиться

Не директива препроцессора, но это было то, что я искал, когда подошел к этому вопросу;

NSString *model = [[UIDevice currentDevice] model];
if ([model isEqualToString:@"iPhone Simulator"]) {
    //device is simulator
}
61
ответ дан 23 November 2019 в 02:30
поделиться