Bea*_*red 11 iphone universal-binary ipad ios4
我想为iPhone和iPad构建游戏.因此,从头开始这个项目作为通用应用程序是有意义的.但是,iPhone和iPad目前运行两个不同版本的iOS,因为iOS 4尚不适用于iPad.我想在游戏中支持两种iOS 4功能(GameCenter和iAd).
非常感谢您的所有智慧!
编辑:我理解这个问题涉及管理风险.我知道这些风险,但是当iOS在各种iOS设备中分散时,我对与构建通用应用程序相关的任何技术设计考虑更感兴趣.
Ben*_*min 16
如果您要构建通用应用程序,请记住以下两个源代码片段:
仅在当前设备上可用时才使用类
考虑一下这段代码:
UILocalNotification* n = [[UILocalNotification alloc] init];
Run Code Online (Sandbox Code Playgroud)
构建通用应用程序时,此代码将导致运行iOS版本但不知道UILocalNotification类的任何设备出现运行时错误.
您仍然可以在代码中支持UILocalNotification,同时使用以下代码段保持向后兼容性:
Class notificationClass = NSClassFromString(@"UILocalNotification");
if (notificationClass) {
UILocalNotification* n = [[notificationClass alloc] init];
}
Run Code Online (Sandbox Code Playgroud)
此技术允许您在支持类的设备上使用某些OS版本中不可用的类.
仅在当前设备上可用时才使用方法
假设您想要执行以下操作:
[[UIApplication sharedApplication] scheduleLocalNotification:n];
Run Code Online (Sandbox Code Playgroud)
使用以下代码有条件地调用该方法,以防它在当前设备上可用:
if ([UIApplication instancesRespondToSelector:@selector(scheduleLocalNotification:)]) {
[[UIApplication sharedApplication] scheduleLocalNotification:n];
}
Run Code Online (Sandbox Code Playgroud)这两种技术可能是您创建通用应用程序时唯一需要了解的.根据设备功能有条件地执行代码,你应该没问题.
话虽如此,您仍然需要考虑iPad可能会使用与iPhone不同的UI.而且,遗憾的是,在iPad 4上可用之前,您将无法使用iOS 4功能测试iPad UI.但这不应该是一个太大的问题:如果你[[UIDevice currentDevice] userInterfaceIdiom]用来检查你是否在iPad上运行,你可以阻止你的通用应用程序执行没有iPad UI的代码.一旦Apple发布适用于iPad的iOS 4,您就可以实现UI,删除该检查并发布对商店的更新.
Jef*_*ley 11
你主要需要做两件事:
要做第一个,右键单击目标并选择"获取信息".框架在检查器中列出(在"常规"选项卡下),旁边有一个下拉框,允许您选择"弱"连接.这确保了如果框架不存在,应用程序仍将运行.
要做到第二步,您可以执行以下操作来测试iOS 4中基于块的新动画:
if ([UIView respondsToSelector:@selector(animateWithDuration:animations:)]) {
// Your awesome animation code here
} else {
// Your almost-as-awesome, non-block-based animation code here.
}
Run Code Online (Sandbox Code Playgroud)
通过使用诸如此类的内省方法-respondsToSelector:,您可以避免调用当前运行的操作系统不支持的内容.
另请注意,如果您想支持iPhone OS 3.0,则会应用这些相同的规则.
最后,这样做也是可能的 - 尽管不可取 - 这样做:
#ifdef __IPHONE_4_0
// Your iOS 4.0-compatible code here
#elif defined(__IPHONE_3_2)
// Your iPhone OS 3.2-compatible code here
#elif defined(__IPHONE_3_0)
// Your iPhone OS 3.0-compatible code here
#endif
Run Code Online (Sandbox Code Playgroud)
为什么这不可取?简单:只编译最高编号的iOS版本的代码.iPhone应用程序不单独IOS版本分别编译,所以得到这个实际工作,你就必须发布应用程序的多个版本.
| 归档时间: |
|
| 查看次数: |
10270 次 |
| 最近记录: |