19

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

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

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

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

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

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

4

3 回答 3

7

不幸的是,没有标准的方法可以做到这一点。通过将目标操作系统设置为比基础 SDK 更低的数字,Xcode 将弱链接库和框架。这样做时,Xcode 不会警告您使用目标操作系统上可能不可用的方法。

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

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

于 2012-05-29T08:56:44.747 回答
6

After doing some research, reading the Apple Doc about it, and trying a number of things. The solution is downloading an old Xcode DMG from Apple, grab the .pkg file for the same SDK as your deployment target and install it in your version of Xcode. Here's how:

  1. Download older Xcode.dmg from Apple
  2. Open the DMG
  3. In Terminal, go into packages: "cd /Volumes/[DMG]/Packages; open ."
  4. Find the SDK you want, something like iPhoneSDK_4.0.pkg
  5. Install that package, but change the install directory to /Applications/Xcode/Contents/Developer
  6. Restart Xcode if it was open.

Now that you have the same SDK as your deployment target, set your BaseSDK to the same. When you build you'll get warnings about missing methods. Your project may or may not successfully build with an older BaseSDK in a new version of Xcode, but that doesn't matter - you've just found the method calls you need to wrap in a feature check with respondsToSelector:.

于 2012-05-29T16:51:24.590 回答
2

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

于 2017-09-22T04:54:52.583 回答