适应iOS7到iOS6的应用程序

时间:2013-11-30 21:04:15

标签: iphone xcode ios6 sdk ios7

我在xcode 5.0中编写了我的iPhone应用程序,它只支持7个ios。

  1. 如何将其用于ios 6?
  2. 还对如何防止ipad上的应用程序加载感兴趣?

1 个答案:

答案 0 :(得分:5)

第一个问题:确保您的部署目标是6.0,不要使用仅限iOS 7的API,或使用

进行检查
if ([someObject respondsToSelector:@selector(ios7onlymethod)] {
    // do your iOS 7 only stuff
} else {
    // Fall back to iOS 6-supported ways
}

或使用

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) {
    // do your iOS 7 only stuff
} else {
    // Fall back to iOS 6-supported ways
}

您想要使用的新框架应在Xcode中标记为可选;要选择目标,请单击“常规”,然后滚动到“链接的框架和库”部分。

Optional frameworks http://f.cl.ly/items/3n261f2O3t361s0W0P2l/Schermafbeelding%202013-12-19%20om%2021.26.29.png

真正酷的是标记为可选的框架中的类在没有它们的iOS版本上被nil替换。所以假设你使用Sprite Kit框架中的一个类来编写这样的代码,这是iOS 7中新增的:

SKSpriteNode *spriteNode = [SKSpriteNode spriteWithImageNamed:@"mySprite"];

在iOS 6上,当链接器将框架“链接”到应用程序(应用程序不复制框架,他们只是从系统中获取它们)时,在代码中看到SKSpriteNode,框架被标记作为可选项,该代码行将被替换为:

... = [nil spriteWithImageNamed:@"mySprite"];

在Objective-C中向nil发送消息绝对没有任何意义,因此上面的代码不会崩溃。没问题。因此,不要使用if延迟代码 - 检查类是否存在的语句,您可以使用流程并让动态链接器完成工作。

进一步阅读:

iOS 7 UI Transition Guide: Supporting iOS 6

Supporting Multiple iOS Versions and Devices

第二个问题:没有办法说你希望你的应用只能在iPhone和iPod touch上运行。您可以要求iPhone和iPod touch特有的东西(如某个处理器架构或M7运动协处理器),但如果您需要M7芯片在您甚至不需要时排除某个设备,Apple将不会喜欢它它。您应该考虑为什么不希望您的应用在iPad上运行。