17

さまざまな展開ターゲットを持つ複数のターゲットに対してリンクされている Swift クラスがあります。メイン プロジェクトには iOS 7 の最小要件があり、iOS 8 ターゲットの拡張機能があります。

プロジェクトをコンパイルすると、コンパイラは次のコード行に警告をスローします。

    if #available(iOS 8.0, *) { ... }

「「iOSApplicationExtension」の不必要なチェック。最小展開ターゲットにより、ガードが常に true になります」

ビルド設定オプションを確認しましたが、迅速な警告を無効にするスイッチが見つかりませんでした。

この行で iOSApplicationExtension バージョン ターゲットを個別に定義しようとしましたが、成功しませんでした。

    if #available(iOS 8.0, iOSApplicationExtension 8.0, *) { ... }

この迷惑なメッセージを抑制する方法はありますか?

4

3 に答える 3

2

警告を黙らせる醜い回避策を見つけましたが、もっと良い方法があることを願っています:

iOS 8 以降のターゲット ビルド設定では、ビルド設定 -> Swift コンパイラ - カスタム フラグ -> その他の Swift フラグでプリコンパイル フラグを定義しました。

-D iOS8ターゲット

次に、コードを次のように変更しました。

#if iOS8target
    // iOS 8+ compatible code
#else
    if #available(iOS 8.0, *) {
        // repeat iOS 8+ compatible code again!
    } else {
        // iOS 7 code
    }
#endif

リファクタリングされておらず、醜いわけではありませんが、機能します!

更新:-suppress-warningsすべての警告を省略する ための迅速なコンパイラ スイッチがあります。ただし、有用な警告も抑制します。また、警告を発する特定のファイルが 1 つしかない場合は-w、Building Phases ペインでフラグを使用できます。また、有用な警告を抑制しますが、1 つのファイルに限定されます。

于 2015-09-12T11:48:43.510 に答える
1

Cocoapod の次のリリース (0.39.0 以降) では、この問題に対処する必要があります。詳細については、これを確認してください。

于 2015-12-20T23:53:36.993 に答える
0

デプロイメント ターゲットを General にチェックし、9.0 から 7.0 以下に設定してください。この警告は自動的に削除されます。

于 2015-12-28T09:43:12.070 に答える