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

gng*_*zrd 18 sdk xcode ios

当我调用最小支持目标的SDK中没有的方法时,有没有办法让Xcode告诉我?

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

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

我已经尝试在预处理器设置中放置__IPHONE_OS_VERSION_MAX_ALLOWED = 40000,但这只会触发一堆无用的Apple SDK错误.(可能是因为我的活动SDK是iOS5.1)

是获得旧SDK的唯一解决方案并将其安装在Xcode中吗?

有没有更简单的解决方案?

Sve*_*sen 6

遗憾的是,没有标准的方法可以做到这一点.通过将目标操作系统设置为低于基本SDK的数量,Xcode将弱化链接库和框架.执行此操作时,Xcode不会警告您使用目标操作系统上可能无法使用的方法.

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

我不认为有任何静态分析工具,Apple和第三方都没有.


gng*_*zrd 5

在做了一些研究之后,阅读了Apple Doc,并尝试了很多东西.解决方案是从Apple下载旧的Xcode DMG,获取与您的部署目标相同的SDK的.pkg文件,并将其安装在您的Xcode版本中.这是如何做:

  1. 从Apple下载旧的Xcode.dmg
  2. 打开DMG
  3. 在终端中,进入包:"cd/Volumes/[DMG]/Packages;打开."
  4. 找到你想要的SDK,比如iPhoneSDK_4.0.pkg
  5. 安装该软件包,但将安装目录更改为/ Applications/Xcode/Contents/Developer
  6. 如果Xcode已打开,请重新启动它.

现在您拥有与部署目标相同的SDK,将BaseSDK设置为相同.在构建时,您将收到有关缺少方法的警告.您的项目可能会或可能不会在新版本的Xcode中使用较旧的BaseSDK成功构建,但这无关紧要 - 您刚刚找到了需要使用respondsToSelector进行功能检查的方法调用: