如果可用,使用iPhone OS 3.0功能,如果没有,则使用2.1功能,在一个可执行文件中

Jas*_*ien 4 iphone cocoa-touch objective-c

我见过iPhone上的应用程序,如果在3.0上运行,将使用3.0功能/ API,如应用程序内电子邮件编写器,如果在2.x上运行不使用这些功能,并退出应用程序以启动Mail.

这是怎么做到的?

我最初的想法是使用

#ifdef __IPHONE_3_0
Run Code Online (Sandbox Code Playgroud)

但这只有在我真正针对3.0 SDK构建应用程序时才会起作用 - 这会阻止它在2.x手机上运行.
此外,运行这个想法,应用程序必须与3.0 SDK链接,以获得3.0 API ...

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

ale*_*x_c 5

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

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

它可以在2.2中的设备上工作,但不能在模拟器中工作.

此方法的优点是您不会将代码绑定到特定版本号 - 只是方法或类是否存在.

这个页面很好地解释了它.

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