Симулятор iPhone - как определить, когда приложение работает на симуляторе (так что можно настроить тестовые данные)?
Любой пример кода, который покажет мне, как в моем коде приложения iPhone:
- Как определить, было ли приложение только что выполнено DEPLOED для запуска на симулятор (а не на устройство) [если "Развернутый" недоступен, тогда просто обнаружение, когда приложение запускается на симуляторе, в отличие от устройство)
- Где в моем коде приложения iPhone я бы поместил строки, которые устанавливают мои тестовые данные в симуляторе, - это означает, что я хотел, чтобы тестовые данные были эффективно очищены/обновлены каждый раз, когда я перекомпилирую и нажимаю на симулятор (однако я действительно не хотел, чтобы этот код запускался во время моего использования приложения в симуляторе - например, он должен иметь возможность обменивать приложения в симуляторе, а затем, когда я снова запускаю свое приложение в симуляторе, он не должен запускать данные установочный код
Любые другие лучшие предложения о том, как скрыть управление этими тестовыми данными на симуляторе, были бы хорошими. Предположим, что речь идет о тестовых данных в календаре (например, с помощью набора событий), поэтому я не хочу, чтобы приложение помещало элементы календаря в мой iPhone при развертывании на моем устройстве (извините - только 1 персональный iPhone здесь).
Ответы
Ответ 1
Я, очевидно, использую что-то вроде этого...
#import <TargetConditionals.h>
#if TARGET_IPHONE_SIMULATOR
// Simulator specific code
#else // TARGET_IPHONE_SIMULATOR
// Device specific code
#endif // TARGET_IPHONE_SIMULATOR
И к вашему второму вопросу... Что-то вроде этого должно помочь вам. В делегате приложения:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"initialized"] ) {
// Setup stuff
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"];
}
... your code ...
}
Ответ 2
Если вы хотите проверить время выполнения (а не компилировать время с макросом # compiler), используйте этот код:
UIDevice *currentDevice = [UIDevice currentDevice];
if ([currentDevice.model rangeOfString:@"Simulator"].location == NSNotFound) {
//running on device
} else {
// running in Simulator
}
см. также этот вопрос:
Как я могу программным образом определить, работает ли мое приложение в симуляторе iphone?
Ответ 3
Кодовый блок, который работал у меня:
#if defined(__i386__) || defined(__x86_64__)
/* Run code if in Simulator */
#else
/* Run code if in device */
#end
Я заметил, что __i386__
не работает для симуляторов iPhone 6, поэтому я добавил x86_64
Ответ 4
Свифт 5:
TARGET_OS_SIMULATOR
не работает в Swift 5. работает targetEnvironment(simulator)
, как targetEnvironment(simulator)
ниже:
#if targetEnvironment(simulator)
// code to run if running on simulator
#else
// code to run if not running on simulator
#endif
Ссылка