私のiPhoneアプリケーションコードで、その方法を示すサンプルコード:
シミュレーターでこのテストデータを管理することをカバーする方法に関する他のより良い提案は良いでしょう。ここでの背景は、カレンダーのテストデータについて話しているため(イベントキットを使用するなど)、デバイスにデプロイするときにアプリがカレンダーアイテムをiPhoneに配置することを望まないことです(申し訳ありませんが、個人用のデータは1つだけです) iPhoneはこちら)。
私は明らかにこのようなものを使用しています...
#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 ...
}
実行時をチェックしたい場合(代わりに#コンパイラマクロでコンパイル時間を)、次のコードを使用します。
UIDevice *currentDevice = [UIDevice currentDevice];
if ([currentDevice.model rangeOfString:@"Simulator"].location == NSNotFound) {
//running on device
} else {
// running in Simulator
}
この質問も参照してください: アプリがiphoneシミュレーターで実行されているかどうかをプログラムで判断するにはどうすればよいですか?
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
_
私のために働いたコードブロック:
#if defined(__i386__) || defined(__x86_64__)
/* Run code if in Simulator */
#else
/* Run code if in device */
#end
私は気づきました __i386__
はiPhone6シミュレーターでは機能しないため、x86_64を追加しました