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

标签 iphone objective-c ios compatibility

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

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

问候, 昆汀

最佳答案

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

你通过添加来做到这一点

__IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_4_2

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

不幸的是,如果你添加这个定义,它会导致你的预编译头不匹配错误。因此,要解决此问题,您还需要在build设置中关闭“Precompile Prefix Header”选项。

一旦你这样做了,你会得到一堆关于你的目标 SDK 上不存在的类的错误(例如 NSOrderedSet 在 iOS 4.2 中不存在)。如果你想回到 iOS 4 之前的版本,你可能会遇到太多错误,编译器会放弃——我不知道有什么解决方法。在任何情况下,忽略 UIKit header 中有关缺少类的错误,并转到错误列表的底​​部;每次使用 __IPHONE_OS_VERSION_MAX_ALLOWED 指向的 SDK 中未包含的方法或类时,您都会发现错误。确保这些方法中的每一个都包含在

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

你应该是安全的。可能缺失的类也要测试

if ([NSOrderedSet class] != nil)

但是,这些设置并不是您不小心忘记翻回去的东西。要使其成为测试的自动选项,请执行以下操作:

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

注意事项:

  • 我不保证这会解决您的任何/所有问题。
  • UIKit 之外的任何东西都不会被这个检查捕获。
  • 这不能替代在您使用的 iOS 版本上测试您的代码 计划支持

关于iphone - 如果部署目标 < 基本 sdk,如何检查是否使用了不可用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4437510/

相关文章:

没有圆边的 Iphone 自定义 UITabBarItem

objective-c - 在 iOS 中只初始化一个对象一次

ios - 带有 NSStrikethroughColorAttributeName 的 NSAttributedString 示例

android - Titanium 中的 UI 感觉和外观,PhoneGap 与原生相比

php - ajax 不再适用于 iPhone

iphone - 自动旋转从 UIWebView 播放的视频到横向模式

ios - MacinCloud 代理上的 VSTS Cordova iOS 构建失败 - "Cannot read property ' 未定义失败”

ios - UISearchController 取消按钮不可点击

iphone - 创建核心数据文件后出错

objective-c - 释放错误 [NSPersistentStoreCoordinator initWithManagedObjectModel]