亲爱的学者们。 我使用最新的SDK(4.2.1)创建了一个简单的应用程序,它在iOS 4.x.x的所有设备上运行顺畅,没有错误。
最近我收到一些评论来自iOS旧版本的用户抱怨应用程序在启动时崩溃,在Apple的崩溃日志中我什么都没看到。 推动我的调查,我目前唯一的嫌疑人是使用EventKit类,如果内存服务,只在iOS4之后引入。
我在其中一个课程中非常轻松地使用它,它在iOS4.2.1上完美运行
#import <EventKit/EventKit.h>
//一段时间之后
[self setADateInCal: [MyTimeArray objectAtIndex:0] :formatterDate];
因此我的问题:
这可能是在iOS上崩溃我的应用程序的问题吗? 4?
如何在不删除iOS4用户功能的情况下阻止它
一般情况下,我该如何测试?我的设备和SDK上有最新的官方iOS,模拟器仅限于重新制作iOS版本的方式......任何神奇的方式都可以这样做吗?
答案 0 :(得分:1)
1。)是的。如果它不在&lt; 4.0中的API中,那么任何未运行的&gt; 4.0都会崩溃。
2。)测试该类是否可用NSClassFromString(Google为例)和respondsToSelector对应,以查看您想要的方法是否可用于客户端运行的操作系统版本。您可能还需要弱连接EventKit框架(再次谷歌如何执行此操作)。
3。)唯一真正的测试方法是将设备保留在您要测试的操作系统上。就个人而言,我有一个旧的iPhone,我永远不会更新运行3.1.3这样的事情。或者,您可以在不同的分区或其他东西上保留旧的xcode + iOSSDK安装并使用他们的模拟器。 (对于未来的更新我猜,因为你显然没有为&lt; 4.0)。但不,没有神奇的方法可以做到这一点。遗憾。
为了清晰起见编号2:基本上你会检查你想要的类/方法是否在你当前正在运行的操作系统版本上可用,如果你可以使用它,如果不是你必须找到一个解决(完全省略或以符合旧版本的其他方式)。
答案 1 :(得分:0)
是的,它可能导致崩溃。缺少库的问题不会在苹果崩溃日志中报告任何内容。
为了防止它发生,你需要做两件事,
xcode中的事件工具包库链接较弱。
使用类似的方法检查代码中是否存在 ,
if(!NSClassFromString(@"EKEventKit")){
//do stuff with event kit
}
测试实际iOS版本的唯一方法是获取运行ios的物理设备&lt; 4。