2017-12-18 12 views
-3

この問題は、古い環境で何度も聞かれましたが、iOS 11.2を実行しているデバイスで@ mbelskyのanswerを実行しようとすると、デバイスブロックではなく、シミュレータでコードを実行すると、シミュレータは期待通りに動作します。iOS 11のシミュレータまたはデバイスで実行中のアプリケーションを検出するかどうかを確認する

@IBOutlet weak var testSimulatorFlag: UILabel! { 
    didSet { 
     #if IOS_SIMULATOR 
      testSimulatorFlag.text = "Compiler thinks this is a simulator" 
     #else 
      testSimulatorFlag.text = "Compiler thinks this is a device" 
     #endif 
    } 
} 

これはどのようにプロジェクトのスウィフト、コンパイラのスクリーンショットで、カスタムフラグが設定されている:

Screenshot

Hereは、問題を示すサンプルプロジェクトです。事前に感謝の意を表します。

+0

@AshvinGudaliyaが、私はその質問の認識していますが、古い質問への提案の答えは私のために働いていないので、私は新しい質問を求めています。 – Blake

+1

https://stackoverflow.com/a/37124071/1187415の指示に正しく従っていますか?私が間違っていない限り、iOS Simulator SDKだけでなく、Debug設定のカスタムフラグを定義しました。 –

+0

@MartinR、私はカスタムフラグを正しく実装していることを確認するスクリーンショットを追加しました – Blake

答えて

3

、私が発見した最も信頼性の高い方法は、次のとおりです。

#if (arch(i386) || arch(x86_64)) && os(iOS) 
    testSimulatorFlag.text = "Compiler thinks this is a simulator" 
#else 
    testSimulatorFlag.text = "Compiler thinks this is a device" 
#endif 
+0

ありがとう!コンパイラフラグがより堅牢に見えているので、私はこのアプローチを避けようとしていますが、なぜコンパイラフラグが期待した結果を出さないのかを知ることができなければ、このソリューションを使用します。 – Blake

関連する問題