2011-01-14 137 views
4

好吧我一直在开发iPhone应用程序已经超过一年了, 但有一件事仍然非常糟糕。iphone版本兼容性扫描仪

比方说,我要让我的应用程序与iOS 3.0 兼容设置我的SDK到最新版本,我的部署目标设定为3.0

但会发生什么,如果你不小心调用一个函数只在... 3.1.x或更高版本中? 对,它只是崩溃。

没有任何警告或指示符告诉您,函数仅在以后的iOS版本中可用。由于仿真器不支持版本< 4.0,因此无法测试应用程序是否真的有效。你甚至不能购买新设备,因为他们已经安装了新的iOS。 即使你有一个较旧的设备,有时几乎不可能检查你的代码的每一部分。

我真的需要支持旧版本,因为我知道我的客户(大约2/3)仍然使用3.x版本。

是不是有任何代码分析器或扫描应用程序内调用的所有函数的可用性?

在一种情况下,应用程序崩溃,因为我叫

+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending 

哪些IA ALLOC的便捷方法+

- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending; 

(加上它的自动释放) 但sortDescriptorWithKey仅在4.0 avaible @ _ @

回答

2

同样的问题在这里。我想通过设置Project AND Target的Base SDK为3.0。然后编译器会检查你是否调用了一些不存在的方法。

但是,扫描仪的问题仍然存在,因为上面的方法在使用ASI HTTP框架时会引发一些错误。所以我的程序是

  1. 变化SDK的3.0
  2. 经过这背后我自己的代码
  3. 改变错误的方法是3.0兼容
  4. 设置项目的Base SDK回 最新的SDK

您可能必须安装以前的XCode版本的SDK 3.0。并且不需要将目标Base SDK设置回最新版本。我曾经将它设置为3.0,并从ASI HTTP获取任何错误。

//编辑:对了XCode 3.2.1下载链接:Snow LeopardLeopard

+0

但我在哪里得到旧的xcode版本? – Infinite 2011-01-14 13:48:39

+0

下载链接加入后,您必须先登录,使用您的开发者帐号才能下载;) – 2011-01-14 14:53:39

+0

Thx :)现在我必须在同一时间安装xcode的副本,但至少我可以针对较老的SKD代码 – Infinite 2011-01-16 03:03:51

0

尝试调用respondsToSelector方法

if([your_obj respondsToSelector:@selector(sortDescriptorWithKey:ascending:)]){ 
    // call sortDescriptorWithKey 
} 
else 
{ 
    // call another method 
} 

,您会收到在编译时警告,但不会崩溃在运行时检查。