web-dev-qa-db-ja.com

iPhoneシミュレーター-アプリがシミュレーターで実行されていることを検出する方法(テストデータをセットアップできるようにするため)?

私のiPhoneアプリケーションコードで、その方法を示すサンプルコード:

  1. アプリケーションがシミュレーター(デバイスではなく)に実行されるようにデプロイされたばかりかどうかを検出する方法[「デプロイ済み」が使用できない場合は、デバイスではなくシミュレーターでアプリが実行されていることを検出するだけです)
  2. IPhoneアプリのコードのどこに、テストデータを設定する行をシミュレーターに配置しますか?これは、再コンパイルしてシミュレーターにプッシュするたびに、テストデータを効果的にワイプしてクリーン/復元したいということです(ただし、シミュレーターでアプリケーションを使用している間、このコードを実行したくありませんでした。たとえば、シミュレーターでアプリを交換できる必要があります。その後、シミュレーターでアプリを再起動すると、データセットアップコードが実行されないはずです。

シミュレーターでこのテストデータを管理することをカバーする方法に関する他のより良い提案は良いでしょう。ここでの背景は、カレンダーのテストデータについて話しているため(イベントキットを使用するなど)、デバイスにデプロイするときにアプリがカレンダーアイテムをiPhoneに配置することを望まないことです(申し訳ありませんが、個人用のデータは1つだけです) iPhoneはこちら)。

24
Greg

私は明らかにこのようなものを使用しています...

#import <TargetConditionals.h>

#if TARGET_IPHONE_SIMULATOR

// Simulator specific code

#else // TARGET_IPHONE_SIMULATOR

// Device specific code

#endif // TARGET_IPHONE_SIMULATOR

そしてあなたの2番目の質問に...このような何かがあなたを助けるはずです。アプリデリゲート:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  if ( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"initialized"] ) {
    // Setup stuff
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"];
  }

  ... your code ...
}
49
zrzka

実行時をチェックしたい場合(代わりに#コンパイラマクロでコンパイル時間を)、次のコードを使用します。

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

この質問も参照してください: アプリがiphoneシミュレーターで実行されているかどうかをプログラムで判断するにはどうすればよいですか?

12
mahal tertin

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
_

参照

5
Niyog Ray

私のために働いたコードブロック:

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

私は気づきました __i386__はiPhone6シミュレーターでは機能しないため、x86_64を追加しました

1