0

亲爱的学者。我使用最新的 SDK (4.2.1) 创建了一个简单的应用程序,它在所有 iOS 4.xx 设备上运行流畅且无错误

最近我收到一些来自旧 iOS 版本的用户的评论,他们抱怨应用程序在启动时崩溃,在 Apple 的崩溃日志中我什么也没看到。推进我的调查,我目前唯一的怀疑是使用 EventKit 类,如果没记错的话,它是在 iOS4 之后才引入的。

我在我的一门课中非常轻松地使用它,它在 iOS4.2.1 上完美运行

#import <EventKit/EventKit.h>

//一段时间以后

[self setADateInCal: [MyTimeArray objectAtIndex:0] :formatterDate];   

因此我的问题:

  1. 这可能是导致我的应用程序在 iOS < 4 上崩溃的问题吗?

  2. 如何在不放弃 iOS4 用户的功能的情况下防止它

  3. 一般来说,我该如何测试呢?我在我的设备和 SDK 上安装了最新的官方 iOS,模拟器仅限于重新升级到 iOS 版本的方式……有什么神奇的方法吗?

4

2 回答 2

1

1.) 是的。如果它不在 <4.0 的 API 中,那么任何不运行 >4.0 的人都会崩溃。

2.) 使用 NSClassFromString(Google 为例)测试该类是否可用,并相应地 respondsToSelector 以查看您想要的方法是否可以在客户端运行的操作系统版本中使用。您可能还需要弱链接 EventKit 框架(再次谷歌如何做到这一点)。

3.) 测试这一点的唯一真正方法是将设备保持在您要测试的操作系统上。就个人而言,我有一部旧 iPhone,我从来没有更新过运行 3.1.3 的东西,就像这样。或者,您可以将旧安装的 xcode+iOSSDK 保留在不同的分区或其他地方,并使用他们的模拟器。(我想对于未来的更新,因为您显然没有为 <4.0 执行此操作)。但是不,没有神奇的方法可以做到这一点。对不起。

为清楚起见对第 2 项进行编辑:基本上,您将检查您想要的类/方法是否在您当前运行的操作系统版本上可用,如果是,您可以使用它,如果不是,您将不得不找到解决方法(完全省略或以其他符合旧版本的方式执行)。

于 2011-01-17T21:19:05.163 回答
0

是的,它可能导致崩溃。缺少库的问题不会在苹果崩溃日志中报告任何内容。

为了防止它发生,你需要做两件事,

xcode 中的事件工具包库的弱链接。

用类似的东西检查它在你的代码中是否存在,

   if(!NSClassFromString(@"EKEventKit")){
       //do stuff with event kit
     }

测试实际 iOS 版本的唯一方法是获取运行 ios < 4 的物理设备。

于 2011-01-17T21:35:19.993 回答