为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2019-11-27 12:50:33
在不止一次的情况下,我已经看到由于使用了4.x中引入的新调用而未进行适当检查的情况下,iOS 3.x上出现了崩溃的错误。Xcode是否有办法警告只能在比部署目标更高的版本上使用的类,方法和过程?这样,我可以轻松列出所有代码,并确保将其适当条件化。
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

至少在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上进行测试。


查看完整回答
反对 回复 2019-11-27
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

深入研究之后AvailabilityInternal.h,我意识到部署目标上方的所有可用版本都被__AVAILABILITY_INTERNAL_WEAK_IMPORT宏标记。


因此,我可以通过重新定义该宏来生成警告:


#import <Availability.h>

#undef  __AVAILABILITY_INTERNAL_WEAK_IMPORT

#define __AVAILABILITY_INTERNAL_WEAK_IMPORT \

    __attribute__((weak_import,deprecated("API newer than Deployment Target.")))

通过将此代码放置在项目的预编译头文件中,任何可能在受支持的最低iOS版本上导致崩溃的API用法现在都会产生警告。如果您正确地保护了呼叫,则可以专门针对该呼叫禁用警告(Apple SDK兼容性指南中的修改后的示例):


#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

    if ([UIPrintInteractionController class]) {

        // Create an instance of the class and use it.

    }

#pragma GCC diagnostic warning "-Wdeprecated-declarations"

    else {

        // Alternate code path to follow when the

        // class is not available.

    }


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 732 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信