修改可用性宏,使得在开发目标之后引入的 API 会导致弃用警告。
此类库将被弱链接(这是旧宏和可用性属性的常规行为)。
将您的预编译头文件更改为导入 DCAvailability.h 而不是 Availability.h
#import <DCAvailability.h>
注意:启用模块时操作不会像这样简单(见下文)
如果您在运行时处理此类调用,例如使用 respondsToSelector,则可以忽略警告,如下所示:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
if([something respondsToSelector:@selector(doSomething)]) {
[something doSomething];
}
#pragma clang diagnostic pop
当启用模块时,每当导入框架时都会自动添加框架,并且无论您导入多少次,代码都只编译一次。这意味着我们无法重新定义所需的宏。嗯,您可以为您的代码重新定义它们,但是在您重新定义宏之前,模块已经编译了。实际上,这被特别指出作为优点——模块不受本地宏重新定义的影响。
您必须禁用模块才能使 DCAvailability 工作正常。
然而,并非一切都会丢失
仍然相对简单,也就是说,在构建时不会自动执行检查,但它仍然提供了一个方案,让您可以不时手动选择执行检查——比没有好。
如何在使用模块启用的情况下使用 DCAvailability
#import <DCAvailability.h>
现在,当您想要检查是否未使用可能在运行时不可用的任何内容时,构建 Availability 方案。
此方法的问题
您不能使用 @import
。我认为这应该不是一个问题,因为在您启用模块时(所有其他配置),任何 #import
声明都会自动转换为 @import
。
当您有自定义配置时,可能会与 cocoapods 出现问题。例如,CocoaPods 没有设置您项目的基配置,因为您的项目已经设置了自定义配置。
呃。看起来如果您先添加自定义配置,然后添加其他 pod 进行 pod install,您可能会得到这条信息,但它仍然可以正常工作。尝试向已安装 working pods 的项目添加自定义配置会导致各种问题,阻止其正确链接。可能遗漏了一些东西,但由于我对 CocoaPods 的理解不够深入,我不知道它尝试做什么。
David Clark, [email protected]
DCA Availability 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。