Xcode是否可以警告新的API调用?

在不止一次的情况下,我已经看到由于使用了4.x中引入的新调用而未进行适当检查的情况下,iOS 3.x上出现了崩溃的错误。

Xcode是否有办法警告只能在比部署目标更高的版本上使用的类,方法和过程?

这样,我可以轻松列出所有代码,并确保将其适当条件化。


侃侃尔雅
浏览 734回答 3
3回答

GCT1015

至少在OS X上,使用最新的clang / SDK,现在有一个-Wpartial-availability选项(例如在“其他警告选项”中添加),然后可以定义以下宏以封装用于支持运行时测试的代码(如果支持该方法)#define START_IGNORE_PARTIAL _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wpartial-availability\"")#define END_IGNORE_PARTIAL _Pragma("clang diagnostic pop")我还没有在iOS上进行测试。

汪汪一只猫

深入研究之后AvailabilityInternal.h,我意识到部署目标上方的所有可用版本都被__AVAILABILITY_INTERNAL_WEAK_IMPORT宏标记。因此,我可以通过重新定义该宏来生成警告:#import <Availability.h>#undef&nbsp; __AVAILABILITY_INTERNAL_WEAK_IMPORT#define __AVAILABILITY_INTERNAL_WEAK_IMPORT \&nbsp; &nbsp; __attribute__((weak_import,deprecated("API newer than Deployment Target.")))通过将此代码放置在项目的预编译头文件中,任何可能在受支持的最低iOS版本上导致崩溃的API用法现在都会产生警告。如果您正确地保护了呼叫,则可以专门针对该呼叫禁用警告(Apple SDK兼容性指南中的修改后的示例):#pragma GCC diagnostic ignored "-Wdeprecated-declarations"&nbsp; &nbsp; if ([UIPrintInteractionController class]) {&nbsp; &nbsp; &nbsp; &nbsp; // Create an instance of the class and use it.&nbsp; &nbsp; }#pragma GCC diagnostic warning "-Wdeprecated-declarations"&nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; // Alternate code path to follow when the&nbsp; &nbsp; &nbsp; &nbsp; // class is not available.&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP