在一个可执行文件中使用 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 下