如果部署目标 < 基础 sdk,如何检查是否使用了不可用的方法?

2024-05-12

我想知道当部署目标低于基础 SDK 时,您如何检查代码是否不调用不可用的方法?

可以在 SDK 等于部署目标的设备上运行应用程序,但我搜索一种更“自动”的方式。任何想法 ?

问候, 昆汀


最简单的方法是使用 __IPHONE_OS_VERSION_MAX_ALLOWED 预处理器定义。

您可以通过添加来做到这一点

__IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_4_2

或者类似于目标构建设置中的“预处理器宏”选项。您可以在 中查找可用的版本。

不幸的是,如果您添加此定义,它将导致与预编译标头不匹配的错误。因此,要解决此问题,您还需要在构建设置中关闭“预编译前缀标头”选项。

一旦你这样做了,你会得到一堆错误,因为你的目标 SDK 上不存在类(例如 NSOrderedSet 在 iOS 4.2 中不存在)。如果你试图回到 iOS 4 之前的版本,你可能会遇到很多错误,以至于编译器会放弃——我不知道有什么解决方法。无论如何,忽略 UIKit 标头中缺少类的错误,并转到错误列表的底​​部;每次使用 __IPHONE_OS_VERSION_MAX_ALLOWED 指向的 SDK 中未包含的方法或类时,您都应该在该处找到错误。确保这些方法中的每一个都包含在

if( [targetObject respondsToSelector:@selector(thePossiblyMissingSelector:)]

你应该很安全。可能缺失的类也应该进行测试

if ([NSOrderedSet class] != nil)

然而,您不希望意外忘记翻转这些设置。要使其成为测试的自动选项,请执行以下操作:

  1. 创建一个名为“旧 SDK 测试”之类的新构建配置。
  2. 仅为此配置定义 __IPHONE_OS_VERSION_MAX_ALLOWED 和预编译头选项(点击“构建设置”中每行旁边的公开箭头以访问每个配置设置)。
  3. 复制当前的方案并将其名称设置为“旧 SDK 检查”之类的名称。
  4. 将这个新方案中 Run 项的构建配置设置为您在步骤 1 中创建的构建配置。
  5. 选择新方案并构建。

Notes:

  • 我不保证这会解决您的任何/所有问题。
  • 此检查不会捕获 UIKit 之外的任何内容。
  • 这不能替代在您的 iOS 版本上测试您的代码 计划支持.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果部署目标 < 基础 sdk,如何检查是否使用了不可用的方法? 的相关文章

随机推荐