Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 发现对早期iOS版本中不可用的方法的调用_Objective C_Ios_Xcode_Cocoa Touch - Fatal编程技术网

Objective c 发现对早期iOS版本中不可用的方法的调用

Objective c 发现对早期iOS版本中不可用的方法的调用,objective-c,ios,xcode,cocoa-touch,Objective C,Ios,Xcode,Cocoa Touch,我正在使用iOS 5.0作为基本SDK和iOS 3.0作为部署目标构建我的应用程序 我知道,当我使用早期iOS版本中不可用的功能时,我需要检查是否存在方法和类,但最近我在一个问题上浪费了几个小时,只是发现我调用了一些iOS版本中不可用的方法。我只是没有注意到这是一个新方法,在调用它之前也没有检查。当然,应用程序编译时包含0个错误和0个警告 这是一个大问题,因为如果我忘记了应用程序中的某个地方的其他检查,我将不知道它,直到我,或者,最糟糕的是,一些用户将激活代码的特定部分 也许我遗漏了什么,我是否

我正在使用iOS 5.0作为基本SDK和iOS 3.0作为部署目标构建我的应用程序

我知道,当我使用早期iOS版本中不可用的功能时,我需要检查是否存在方法和类,但最近我在一个问题上浪费了几个小时,只是发现我调用了一些iOS版本中不可用的方法。我只是没有注意到这是一个新方法,在调用它之前也没有检查。当然,应用程序编译时包含0个错误和0个警告

这是一个大问题,因为如果我忘记了应用程序中的某个地方的其他检查,我将不知道它,直到我,或者,最糟糕的是,一些用户将激活代码的特定部分


也许我遗漏了什么,我是否可以设置一些编译器选项来检测我对iOS部署目标中不可用的方法的调用?如何处理这样的问题?

检查与以前版本的iOS的兼容性的唯一方法是在运行该版本操作系统的旧的未更新设备上测试应用程序


如果您找不到那么旧的设备,即使只是短期借用,那么可能没有很好的理由将部署目标设置得那么低。

此链接可能会为您指明正确的方向。它解释了如何在保持向后兼容性的同时利用较新的ios功能。希望有帮助。

我读了你链接的帖子。我觉得有趣的部分是制作项目的副本并为旧的模拟器编译它(使用旧的Xcode),为调用不支持的方法生成警告。这正是我所要寻找的方向:一种发现对部署目标iOS中不可用的方法的所有调用的方法,这样我就可以进行快速检查,以验证我是否正确管理了它们中每一个的兼容性。当然,这种方法需要一些工作来安装和管理旧的Xcode版本,并进行测试。谢谢。我想把这个问题留到其他时间再问。我希望找到一种不需要安装旧Xcode版本的方法,而且如果我了解得越多,技术上就越不可能(请参阅我刚才添加到问题中的注释)。链接中提到的解决方案很有效。当您想在3.2.2之前的iOS中测试解决方案时,需要安装较旧的Xcode版本。。这些旧的SDK不再随Xcode提供,在以前的版本中测试应用程序时,您必须使用其他方法来获得它们。我想这是苹果公司的说法。。请升级,你落后了。我同意,从某种程度上说,我认为苹果的这个“建议”是好的。但是,仅仅因为我想调试我应用程序的某个方面(我认为这很重要),就安装一个完整的旧Xcode版本对我来说太夸张了。好吧,我尝试支持iOS 3.0也可能有些夸张,但我应该做同样的工作来支持4.0。这就是为什么我不愿意结束这个问题,我一直认为Xcode是一个如此强大(我真的不知道有多少)的软件,真的不知道在以前的SDK中缺少哪些方法?也许你们中的某个人知道我在浪费时间,但我需要确定。为什么我选择这个答案:我的问题是开放的,因为现在有一段时间了,我没有回答,只是希望找到更实际的解决方案,但我太忙了,无法进一步调查,所以是时候结束讨论并选择一个答案了。hotpaw2的答案也很好,但由于我一直在寻找一种方法来发现对旧SDK中不可用的方法的调用,我认为这一种更灵活,不需要真正的设备。在真实设备上的测试当然是有用的,但对于我的问题,使用旧SDK的Xcode也会在编译时发现错误的调用。我理解您对部署目标的评论,因为部署目标太低,但我所说的问题可能会发生在任何不等于基本SDK的部署目标上。我认为如果我能在一台真正的未更新设备上测试我的应用程序,那么一切都不会改变,因为我所说的问题是,当我碰巧执行代码中的某个部分时,我没有在调用不可用的方法之前进行检查。问题是如何搜索此类错误,因为一旦我有幸执行错误代码,应用程序将在设备和模拟器中同样崩溃。谢谢。据报道,模拟器没有准确地表示它正在运行的iOS SDK版本可用的API。只有设备运行实际的ARM操作系统代码。谢谢,我读了一些文章,现在我知道你是对的。我认为真实设备/模拟器之间的主要区别在于计算能力和资源。这是个坏消息,但也是尝试找到可靠方法来定位对可能丢失的方法的调用的另一个原因。我发现这篇文章与我的问题密切相关:。