iphone版兼容性扫描仪

时间:2011-01-14 12:12:24

标签: iphone version compatibility analyzer

好的,我已经开发iphone-apps超过一年了, 但是有一件事情仍然很糟糕。

假设我想让我的应用与iOS 3.0兼容 我将我的sdk设置为可用的最新版本,并将我的部署目标设置为3.0

但是,如果您偶然调用仅在3.1.x或更高版本中可用的功能,会发生什么? 对,它只是崩溃。

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

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

是否有任何代码分析器或其他东西可以扫描应用程序中调用的所有函数的可用性?

在一个案例中,应用程序崩溃,因为我打电话

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

我是alloc +

的便捷方法
- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending;

(另外还有自动释放) 但sortDescriptorWithKey只能在4.0 @ _ @

中使用

3 个答案:

答案 0 :(得分:2)

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

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

  1. 将SDK更改为3.0
  2. 查看构成我自己代码的错误
  3. 将方法更改为3.0兼容
  4. 将项目的Base SDK设置回 最新的SDK
  5. 您可能必须从之前的XCode版本安装SDK 3.0。并且无需将目标Base SDK设置回最新版本。我曾经将它设置为3.0并且没有从ASI HTTP中获得错误。

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

答案 1 :(得分:0)

尝试通过调用respondsToSelector方法来检查

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

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

答案 2 :(得分:0)

尝试使用Apple's Framework/Weak-linking guide中建立的指南。对于你不能像@ Andriy的答案那样问对象的函数。