我想知道当部署目标低于基础 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)
然而,您不希望意外忘记翻转这些设置。要使其成为测试的自动选项,请执行以下操作:
- 创建一个名为“旧 SDK 测试”之类的新构建配置。
- 仅为此配置定义 __IPHONE_OS_VERSION_MAX_ALLOWED 和预编译头选项(点击“构建设置”中每行旁边的公开箭头以访问每个配置设置)。
- 复制当前的方案并将其名称设置为“旧 SDK 检查”之类的名称。
- 将这个新方案中 Run 项的构建配置设置为您在步骤 1 中创建的构建配置。
- 选择新方案并构建。
Notes:
- 我不保证这会解决您的任何/所有问题。
- 此检查不会捕获 UIKit 之外的任何内容。
-
这不能替代在您的 iOS 版本上测试您的代码
计划支持.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)