26

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

  1. アプリケーションがシミュレーター (デバイスではなく) に実行されるようにデプロイされたかどうかを検出する方法 [「デプロイ済み」が利用できない場合は、デバイスではなくシミュレーターでアプリが実行されていることを検出するだけです)
  2. 私のiPhoneアプリコードのどこに、テストデータをシミュレーターにセットアップする行を入れますか?シミュレーターでアプリケーションを使用しているときにこのコードを実行したくありませんでした-たとえば、シミュレーターでアプリを交換できるはずです。その後、シミュレーターでアプリを再度起動すると、データセットアップコードを実行するべきではありません

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

4

4 に答える 4

50

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

#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 ...
}
于 2011-02-25T20:32:08.880 に答える
12

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

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

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

于 2013-11-11T14:18:56.523 に答える
1

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

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

__i386__iPhone 6 シミュレーターでは動作しないことに気付いたので、x86_64 を追加しました。

于 2015-11-08T17:45:31.660 に答える