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

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

  1. Как определить, что приложение только что ОТЛОЖЕНО для запуска на симуляторе (а не на устройстве) [если «Развернуто» недоступно, то просто определить, когда приложение запускается на симуляторе, а не устройство)
  2. Где в коде моего приложения для iPhone я бы поместил строки, которые устанавливают мои тестовые данные, в симулятор - это означает, что я хотел, чтобы тестовые данные были эффективно очищены / восстановлены каждый раз, когда я перекомпилирую и отправляю в симулятор (однако я не хотел, чтобы этот код запускался во время использования приложения в симуляторе - например, он должен иметь возможность менять приложения в симуляторе, а затем, когда я снова запускаю свое приложение в симуляторе, он не должен запускать данные код настройки

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

Ответы [ 4 ]

49 голосов
/ 25 февраля 2011

Я, очевидно, использую что-то вроде этого ...

#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 ...
}
12 голосов
/ 11 ноября 2013

Если вы хотите проверить время выполнения (вместо этого время компиляции с макросом # compiler), используйте этот код:

UIDevice *currentDevice = [UIDevice currentDevice];
if ([currentDevice.model rangeOfString:@"Simulator"].location == NSNotFound) {
    //running on device
} else { 
    // running in Simulator
}

см. Также этот вопрос: Как программно определить, запущено ли мое приложение в симуляторе iphone?

1 голос
/ 12 мая 2019

Swift 5:

TARGET_OS_SIMULATOR не работает в Swift 5. targetEnvironment(simulator) работает, как показано ниже:

#if targetEnvironment(simulator)
// code to run if running on simulator
#else
// code to run if not running on simulator
#endif

Ссылка

1 голос
/ 08 ноября 2015

Блок кода, который работал для меня:

#if defined(__i386__)  || defined(__x86_64__)
    /* Run code if in Simulator */
#else
    /* Run code if in device */
#end

Я заметил __i386__ не работает на симуляторах iPhone 6, поэтому я добавил x86_64

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...