web-dev-qa-db-ja.com

Xcodeで非推奨の警告を抑制する

すべてのSDKが浮かんでいるので、複数のSDKとプラットフォーム用にビルドできると便利です。ただし、3.2から3.0にバウンスしたり、ときどき2.xになったりすると、変更または置き換えられたメソッドに関する非推奨の警告が頻繁に表示されます。

warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.

私はまだ古いOSとの互換性を維持したいので、ビルド時に「ノイズ」を除去しようとしていますが、これらの警告をオフまたは無効にする方法はありますか?

128
Ben Gottlieb

-Wno-deprecated-declarations、またはXcodeの対応する設定、GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS(ヒント:この警告の特定の設定を見つけるには、ビルド設定に「非推奨」と入力するだけです)。

Xcodeの現在のバージョン(例:Xcode 9.2):

enter image description here


Xcodeの古いバージョン(例:Xcode 2.x、3.x):

enter image description here

77
Paul R

私はまだ@samiqの投稿にコメントを追加できないので、それを拡張すると思います。非推奨のものを使用する関数/メソッドの前に、上記のディレクティブを入力します。次に、関数終了の定義後に以前の設定を復元できます。

#pragma GCC diagnostic Push 
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma GCC diagnostic pop
326
manicaesar

Clangには、@ manicaesarポストの「復元」ステップを初期警告状態とは無関係にするニース機能があります。

#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma clang diagnostic pop

Clangを引用するには manual

GCCのプラグマによって提供されるすべての機能に加えて、Clangでは現在の警告状態をプッシュおよびポップすることもできます。これは、他の人がコンパイルする警告フラグがわからないため、他の人がコンパイルするヘッダーファイルを作成するときに特に便利です。

141

古いOSをサポートする必要がある傾向がありますが、警告に注意を払うので、これを行うための整然とした方法が必要でした。いくつかのMozillaコードに触発されて、これをまとめました。

#define SILENCE_DEPRECATION(expr)                                   \
do {                                                                \
_Pragma("clang diagnostic Push")                                    \
_Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")   \
expr;                                                               \
_Pragma("clang diagnostic pop")                                     \
} while(0)

#define SILENCE_IOS7_DEPRECATION(expr) SILENCE_DEPRECATION(expr)
#define SILENCE_IOS8_DEPRECATION(expr) SILENCE_DEPRECATION(expr)

これにより、次のことが可能になります。

SILENCE_IOS7_DEPRECATION(return [self sizeWithFont:font constrainedToSize:size]);

また、コードブロックでも機能します。

SILENCE_IOS7_DEPRECATION(
    view = [[MKPolylineView alloc] initWithPolyline:self];
    view.lineWidth = self.lineWidth;
    view.strokeColor = self.color;
);

また、iOS 7より前のデバイスのサポートをドロップすると、コードを簡単に検索して、修正すべき非推奨の使用法を見つけることができます。

39
Joe Hughes

また、ファイルごとに警告を抑制することもできます

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

これにより、すべての警告を一度にまとめて抑制するよりも、少し良い練習になります。

29
samiq

警告を黙らせる場合非推奨メソッドの実装または非推奨クラスの実装、使用:

 
 #pragma clang診断Push 
 #pragma clang診断は無視されます "-Wdeprecated-implementations" 
 // code 
 #pragma clang診断pop 
 
16
krzysztof

ビルド設定で、Deprecated Functions

enter image description here

8
SmallChess

コード全体であらゆる種類の廃止予定を包括的に確認したい場合。以下のような-Wdeprecatedフラグを使用してください。

#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wdeprecated"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma clang diagnostic pop
1
jarora