在一个可执行文件中使用 iPhone OS 3.0 功能(如果可用)和 2.1 功能(如果不可用)

Posted

技术标签:

【中文标题】在一个可执行文件中使用 iPhone OS 3.0 功能(如果可用)和 2.1 功能(如果不可用)【英文标题】:Using iPhone OS 3.0 features if available, and 2.1 features if not, in one executable 【发布时间】:2009-09-03 16:05:40 【问题描述】:

我已经看到 iPhone 上的应用程序如果在 3.0 上运行将使用 3.0 功能/API,例如应用内电子邮件编写器,如果在 2.x 上运行不使用这些功能,并退出应用程序以启动邮件而是。

这是怎么做到的?

我最初的想法是使用

#ifdef __IPHONE_3_0

但这只有在我实际针对 3.0 SDK 构建应用程序时才有效——这会阻止它在 2.x 手机上运行。 此外,按照这种想法运行,应用程序必须与 3.0 SDK 链接才能获得 3.0 API...

我对它是如何实现的有点困惑。

【问题讨论】:

欺骗***.com/questions/986589/… 【参考方案1】:

您将 Base SDK 设置为 3.0,将 Deployment Target 设置为 2.2。

然后,您将所有 3.0 特定(或更高版本)的方法包装在 NSClassFromString 和 respondsToSelector 语句中。

它可以在 2.2 的设备上运行,但不能在模拟器中运行。

这种方法的优点是您无需将代码与特定的版本号联系起来——只要方法或类是否存在即可。

这个页面解释得很好。

http://www.clarkcox.com/blog/2009/06/23/sdks-and-deployment-targets/

【讨论】:

【参考方案2】:

您可以使用以下方法在运行时测试当前操作系统版本:

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
  if (version >= 3.0)

如果可用,这将允许您在运行时使用某些 API 调用。

这个问题还有一些其他的details,关于如何在每个 API 版本中编译特定的东西。

【讨论】:

以上是关于在一个可执行文件中使用 iPhone OS 3.0 功能(如果可用)和 2.1 功能(如果不可用)的主要内容,如果未能解决你的问题,请参考以下文章

iPhone OS 3.0 中 StoreKit 的设计技巧?

iPhone OS 3.0 中的 UIImagePickerController

How do I fix NSURLErrorDomain error -999 in iPhone 3.0 OS

iPhone OS 3.0 上的音频录制错误 kAudioQueueErr_CannotStart

为 iPhone 4 SDK 构建的 Blocks 在部署到 iPhone OS 3.0 时可以工作吗?

NSFetchedResultsController - 委托方法在 iPhone OS 3.0 下崩溃,但不在 3.1 下