17

この質問は、iOS でのアプリケーション拡張機能の導入に関して公開されたドキュメントに完全に基づいています。

iOS 8 でのアプリ拡張機能の導入により、「カスタム機能とコンテンツをアプリを超えて拡張し、他のアプリを使用しているユーザーが利用できるようにする」ことが可能になりました。

拡張機能の実装では、実際のアプリのいくつかのクラスを拡張機能 (モデルなど) に含めています。問題は、これらのクラスがUIApplicationアプリの拡張機能では利用できない を呼び出すことであり、コンパイラはそのように通知します。

これに対する簡単な解決策は、への呼び出しをディレクティブUIApplicationで囲むことだと思いました。#if

たとえば、シミュレーターで実行している場合にのみコードを含めたい場合は、次を使用します。

#if TARGET_IPHONE_SIMULATOR
    // Code Here
#endif

ターゲットがアプリケーション エクステンションの場合、同様に定義されたマクロはありますか?

4

3 に答える 3

20

独自のマクロを定義できます。

プロジェクト設定で、トップバーのドロップダウンを使用して拡張ターゲットを選択します。 ここに画像の説明を入力

それで:

  1. クリックBuild Settings
  2. Preprocessor Macros以下を検索 (または検索)Apple LLVM 6.0 - Preprocessing
  3. TARGET_IS_EXTENSIONデバッグ セクションとリリース セクションの両方に、または任意の名前を追加します。

次に、コードで:

#ifndef TARGET_IS_EXTENSION
    // Do your calls to UIApplication
#endif
于 2014-07-30T23:15:40.227 に答える
0

Apple がコンパイル エラーを発生させるために使用する手法と同じ手法を使用できます。

#if !(defined(__has_feature) && __has_feature(attribute_availability_app_extension))
  //Not in the extension
#else
  //In extension
#end
于 2015-03-16T11:50:11.893 に答える