Подтвердить что ты не робот

Симулятор iPhone - как определить, когда приложение работает на симуляторе (так что можно настроить тестовые данные)?

Любой пример кода, который покажет мне, как в моем коде приложения iPhone:

  • Как определить, было ли приложение только что выполнено DEPLOED для запуска на симулятор (а не на устройство) [если "Развернутый" недоступен, тогда просто обнаружение, когда приложение запускается на симуляторе, в отличие от устройство)
  • Где в моем коде приложения iPhone я бы поместил строки, которые устанавливают мои тестовые данные в симуляторе, - это означает, что я хотел, чтобы тестовые данные были эффективно очищены/обновлены каждый раз, когда я перекомпилирую и нажимаю на симулятор (однако я действительно не хотел, чтобы этот код запускался во время моего использования приложения в симуляторе - например, он должен иметь возможность обменивать приложения в симуляторе, а затем, когда я снова запускаю свое приложение в симуляторе, он не должен запускать данные установочный код

Любые другие лучшие предложения о том, как скрыть управление этими тестовыми данными на симуляторе, были бы хорошими. Предположим, что речь идет о тестовых данных в календаре (например, с помощью набора событий), поэтому я не хочу, чтобы приложение помещало элементы календаря в мой iPhone при развертывании на моем устройстве (извините - только 1 персональный iPhone здесь).

4b9b3361

Ответ 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

Ссылка