当我调用最低支持目标的SDK中没有的方法时,有没有办法让Xcode告诉我?
例如,方法[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]。此方法适用于iOS5及更高版本。但我的应用程序的最低目标是iOS4。
如果我使用该方法(sendAsync),我希望Xcode告诉我该方法不适用于我试图支持的最小目标。
我已经尝试在预处理器设置中放置__IPHONE_OS_VERSION_MAX_ALLOWED = 40000,但这只会触发一堆无用的Apple SDK错误。 (可能是因为我的活动SDK是iOS5.1)
唯一可以获得旧SDK并将其安装在Xcode中的解决方案吗?
有没有更简单的解决方案?
答案 0 :(得分:6)
遗憾的是,没有标准的方法可以做到这一点。通过将目标操作系统设置为低于基本SDK的数量,Xcode将弱化链接库和框架。执行此操作时,Xcode不会警告您使用目标操作系统上可能无法使用的方法。
您可以暂时将基本SDK设置为较低,但这可能并不总是有效。由于您希望忽略生成的大多数错误和警告(因为它们仅在您的代码路径中有条件地调用),并且许多警告和错误依赖于您可能需要在编译器提供任何有意义的输出之前解决的其他错误。
我不认为苹果和第三方都没有这方面的静态分析工具。
答案 1 :(得分:5)
在做了一些研究之后,阅读Apple Doc关于它,并尝试了很多事情。解决方案是从Apple下载旧的Xcode DMG,获取与您的部署目标相同的SDK的.pkg文件,并将其安装在您的Xcode版本中。方法如下:
现在您拥有与部署目标相同的SDK,请将BaseSDK设置为相同。在构建时,您将收到有关缺少方法的警告。您的项目可能会或可能不会在新版本的Xcode中使用较旧的BaseSDK成功构建,但这无关紧要 - 您刚刚找到了需要使用respondsToSelector进行功能检查的方法调用:。
答案 2 :(得分:1)
从Xcode 7.3开始,编译器现在可以为您生成这些警告。您需要做的就是在构建设置中设置-Wpartial-availability
警告标志,如this answer中所述。