iOS Xcode:警告不在最小目标SDK中的方法

iOS Xcode:警告不在最小目标SDK中的方法,ios,xcode,sdk,Ios,Xcode,Sdk,有没有一种方法可以让Xcode告诉我何时调用在最低支持目标的SDK中不可用的方法 例如,方法[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]。此方法在iOS5及更高版本上可用。但我的应用程序的最低目标是iOS4 如果我使用该方法(sendAsync),我希望Xcode告诉我,该方法对于我试图支持的最小目标不可用 我已经尝试过在预处理器设置中加入uuu IPHONE\u OS\u VERSION\u MAX\u A

有没有一种方法可以让Xcode告诉我何时调用在最低支持目标的SDK中不可用的方法

例如,方法[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]。此方法在iOS5及更高版本上可用。但我的应用程序的最低目标是iOS4

如果我使用该方法(sendAsync),我希望Xcode告诉我,该方法对于我试图支持的最小目标不可用

我已经尝试过在预处理器设置中加入uuu IPHONE\u OS\u VERSION\u MAX\u ALLOWED=40000,但这只会触发一系列苹果SDK错误,这些错误没有帮助。(可能是因为我的活动SDK是iOS5.1)

是获得旧SDK并在Xcode中安装它们的唯一解决方案吗


有更简单的解决方案吗?

不幸的是,没有标准的方法。通过将目标操作系统设置为低于基本SDK的数量,Xcode将弱链接库和框架。执行此操作时,Xcode不会警告您使用目标操作系统上可能不可用的方法

您可以暂时将基本SDK设置得更低,但这可能并不总是有效。由于您希望忽略生成的大多数错误和警告(因为它们仅在代码路径中有条件地调用),并且许多警告和错误依赖于编译器提供任何有意义的输出之前可能需要解决的其他错误


我不认为存在任何静态分析工具,无论是来自苹果还是第三方

在做了一些研究,阅读了关于它的文章,并尝试了一些事情之后。解决方案是从Apple下载一个旧的Xcode DMG,获取与部署目标相同的SDK的.pkg文件,并将其安装到您的Xcode版本中。以下是方法:

  • 从苹果下载旧的Xcode.dmg
  • 打开DMG
  • 在终端中,进入软件包:“cd/Volumes/[DMG]/packages;open。”
  • 找到你想要的SDK,比如iPhoneSDK_4.0.pkg
  • 安装该软件包,但将安装目录更改为/Applications/Xcode/Contents/Developer
  • 如果Xcode已打开,请重新启动它

  • 既然您拥有与部署目标相同的SDK,请将BaseSDK设置为相同的。构建时,将收到有关缺少方法的警告。在新版本的Xcode中,您的项目可能使用旧的BaseSDK成功构建,也可能无法成功构建,但这并不重要——您已经找到了需要使用respondsToSelector:进行功能检查的方法调用。

    从Xcode 7.3开始,编译器现在可以为您生成这些警告。您只需在生成设置中设置
    -Wpartial availability
    警告标志,如中所述。

    我不确定是否理解该问题。您始终使用最新的SDK,即使您针对的是较旧的版本。事实上,如果你不使用最新的SDK,苹果不会在app Store中接受你的应用。但只要你只使用可用于目标版本的API子集,你就是黄金。对,但如果有人在iOS4上安装应用程序,我需要确保我不使用任何iOS5+API。因此,我正在寻找一种让xcode警告我的方法,而不必查看每一行代码并仔细检查它是否是iOS 4安全的。也许会有帮助?在我看来,似乎没有办法做到这一点。部署目标之后在SDK中引入的任何API都是弱链接的。但是,因为基本SDK确实有这个方法,所以Xcode不会抱怨,因为它只是弱链接这个方法。这正是我的问题,我想让Xcode“帮助”我,并给我关于弱链接方法的警告,这样我就可以确保对选择器做出必要的响应:对它们进行检查,而我必须手动查看代码库并手动查找它们。这不完全是XCode中的解决方案,但可能对你们中的一些人有用:使用AppCode。它会警告您不属于您的应用程序支持的版本的方法(例如,在iOS 8+9应用程序中使用iOS 9方法)。同意,我发现了同样的情况。这在2020年仍然有效,请注意,
    -Wunguarded availability
    不会警告不正确的API使用