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

有没有办法让Xcode告诉我什么时候调用一个在最小支持目标的SDK中不可用的方法?

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

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

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

是唯一的解决scheme,以获得老SDK的安装并在Xcode中安装?

有没有更简单的解决scheme?

不幸的是没有这样做的标准方式。 通过将目标OS设置为比基础SDK更低的数量,Xcode将弱连接库和框架。 当这样做时,Xcode不会警告您使用目标OS上可能不可用的方法。

您可以暂时将基础SDK设置得更低,但这可能无法正常工作。 既然你想忽略大部分产生的错误和警告(因为它们只是在你的代码path中被有条件地调用),许多警告和错误依赖于在编译器给出任何有意义的输出之前你可能需要解决的其他错误。

我不认为有这样的静态分析工具,苹果和第三方都没有。

在做一些研究之后,阅读苹果公司的文档 ,并尝试一些东西。 解决scheme是从Apple下载一个旧的Xcode DMG,获取与您的部署目标相同的SDK的.pkg文件,并将其安装到您的Xcode版本中。 就是这样:

  1. 从Apple下载较旧的Xcode.dmg
  2. 打开DMG
  3. 在terminal中,进入软件包:“cd /卷/ [DMG] /软件包;打开”。
  4. find你想要的SDK,像iPhoneSDK_4.0.pkg
  5. 安装该软件包,但将安装目录更改为/ Applications / Xcode / Contents / Developer
  6. 重新启动Xcode,如果它是打开的。

现在您已经有了与您的部署目标相同的SDK,请将BaseSDK设置为相同。 当你build立你会得到有关缺less方法的警告。 您的项目可能会也可能不会在新版本的Xcode中成功构build旧版本的BaseSDK,但这并不重要 – 您只需find需要用respondsToSelector:进行function检查的方法调用即可。

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