すべてのSDKが浮かんでいるので、複数のSDKとプラットフォーム用にビルドできると便利です。ただし、3.2から3.0に、場合によっては2.xにバウンスすると、変更または置き換えられたメソッドに関する非推奨の警告が頻繁に表示されます。
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
古いOSとの互換性を維持したいので、ビルド時に「ノイズ」を除去しようと努力しているので、これらの警告をオフまたは無効にする方法はありますか?
すべてのSDKが浮かんでいるので、複数のSDKとプラットフォーム用にビルドできると便利です。ただし、3.2から3.0に、場合によっては2.xにバウンスすると、変更または置き換えられたメソッドに関する非推奨の警告が頻繁に表示されます。
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
古いOSとの互換性を維持したいので、ビルド時に「ノイズ」を除去しようと努力しているので、これらの警告をオフまたは無効にする方法はありますか?
回答:
-Wno-deprecated-declarations
、またはXcodeの対応する設定を試してくださいGCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
(プロヒント:ビルド設定に「非推奨」と入力するだけで、この警告の特定の設定を見つけることができます)。
Xcodeの現在のバージョン(Xcode 9.2など):
Xcodeの古いバージョン(Xcode 2.x、3.xなど):
@samiqの投稿にはまだコメントを追加できないので、拡大すると思います。非推奨のものを使用する関数/メソッドの前に、言及されたディレクティブを入力します。次に、関数の定義が終了した後で、以前の設定を復元できます。
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
//use deprecated stuff
}
#pragma GCC diagnostic pop
#pragma GCC diagnostics push #pragma GCC diagnostics ignored "-Wdeprecated-declarations" .. .. Code here .. .. #pragma GCC diagnostic pop
、このメソッドが戻って前に設定されたものは何でも設定に表示されますよう.. [ gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html]
Clangは、@ manicaesarポストの「復元」ステップを初期の警告状態とは無関係にする優れた機能を提供します。
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
//use deprecated stuff
}
#pragma clang diagnostic pop
Clang マニュアルを引用するには:
GCCのプラグマによって提供されるすべての機能に加えて、Clangでは現在の警告状態をプッシュおよびポップすることもできます。これは、他の人がコンパイルするヘッダーファイルを作成するときに特に役立ちます。これは、他の人が作成する警告フラグがわからないためです。
私たちは古い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より前のデバイスのサポートを終了すると、コードを簡単に検索して、修正する非推奨の使用法を見つけることができます。
do { ... } while(0);
必要なのですか?
do{...}while(0);
特にここで特に必要な理由を説明できますか?なぜ{...}
ですか?なんでif(true){...}
?など
警告Implementing deprecated methodまたはImplementing deprecated classを停止する場合は、次を使用します。
#pragma clang診断プッシュ #pragma clang診断で無視された「-Wdeprecated-implementations」 //コード #pragma clang診断ポップ