【问题标题】:iphone version compatibility scanneriphone版本兼容性扫描仪
【发布时间】:2011-06-09 02:54:14
【问题描述】:

好吧,我已经开发 iphone 应用程序一年多了, 但是有一件事情仍然很糟糕。

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

但是,如果您不小心调用了仅在 ... 3.1.x 或更高版本中可用的函数,会发生什么? 没错,它只是崩溃了。

没有警告或指示告诉您,该功能仅在更高版本的 iOS 版本中可用。而且由于模拟器不支持版本

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

没有任何代码分析器或扫描应用程序内调用的所有功能的可用性的东西吗?

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

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

这是alloc +的一个方便方法

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

(加上它是自动发布的) 但是 sortDescriptorWithKey 仅在 4.0 中可用 @_@

【问题讨论】:

    标签: iphone version compatibility analyzer


    【解决方案1】:

    这里有同样的问题。我唯一想到的将 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

    【讨论】:

    • 已添加下载链接,下载前需先登录开发者账号;)
    • Thx :) 现在我必须同时安装 xcode 的副本,但至少我可以针对较旧的 SKD 进行编码
    • 您也可以只安装 SDK 而不安装 XCode 的副本:打开终端并导航到 DVD,然后进入子目录 /packages,您可以单独安装所有 SDK。确保同时安装设备和模拟器!安装后,您必须将根 (/) 中创建的新文件夹移动到您的 XCode 目录;)
    【解决方案2】:

    尝试调用 respondsToSelector 方法检查

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

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

    【讨论】:

    • 不过,这并不是问题的真正解决方案。您不能通过这样的分支运行每个方法,也没有好的方法来检查以前的操作系统版本中是否存在特定的方法调用。 Apple 确实需要开始在他们的版本中包含旧的 SDK,这样您就可以轻松地将基础 SDK 设置为旧的,然后在模拟器上进行测试。
    • 当然你不能用这种方式检查每个方法,但是如果需要检查几个方法可能会有所帮助。
    【解决方案3】:

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

    【讨论】:

    • 问题不在于处理已知不可用的功能。问题在于识别哪些功能不可用;)
    • @Infinite, try this answer here 并且在你编码之前知道哪个,检查标题(跳转到定义)。他们会告诉你的。
    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 2018-02-07
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多