Как проверить, запущено ли приложение iOS на симуляторе. (цель-с)

#ios #objective-c #runtime #simulator

Вопрос:

Есть ли способ проверить, работает ли приложение на симуляторе во время выполнения? Я уже знаю, как проверять во время компиляции. Я хочу убедиться, что приложение работает в симуляторе во время выполнения. (не быстро, в Objective-C…) Спасибо.

Комментарии:

1. Я не совсем понимаю этот вопрос. Вы имеете в виду локальную проверку устройства или какой-то удаленный мониторинг живых пользователей?

2. Например, если мое приложение работает на симуляторе, я хотел бы, чтобы появилось окно «Это приложение в настоящее время работает на симуляторе». И если мое приложение работает на реальном устройстве iphone, я хочу, чтобы появилось всплывающее окно с сообщением «Это приложение в настоящее время работает на реальном устройстве». @Шеймус

Ответ №1:

Нет никакой разницы между проверкой во время компиляции/выполнения, потому что устройства ios и симуляторы имеют разную архитектуру — arm64 и x86_64 , соответственно, вы НЕ можете запускать код ARM на симуляторе и наоборот. Другими словами, у вас есть две скомпилированные копии вашего кода, которые созданы для целевых платформ.

Чтобы проверить, какой из них запущен, вы можете использовать следующий флаг SDK для симулятора iOS:

 const BOOL IS_SIMULATOR(void) {
#if TARGET_IPHONE_SIMULATOR
    return YES;
#else
    return NO;
#endif
}
 

Комментарии:

1. С выпуском mac с чипом M1, сможет ли выход архитектуры arm постепенно запускаться в симуляторе в будущем? @iUrii

2. @nickp, возможно, нужно будет проверить некоторые переменные env, но в любом случае это хорошее уведомление для отдельного вопроса.