保持向后兼容iPhone OS 2.2.1

时间:2009-08-14 02:34:32

标签: iphone backwards-compatibility

我目前在App Store上有一个使用2.2.1版构建的应用程序,即Base SDK和Deployment Target都设置为2.2.1。该应用运行良好。从那时起,我将我的XCode版本升级到3.1.3,我正在对我的应用程序进行更新,Base SDK设置为3.0,部署目标设置为2.2.1。这在我的测试iPhone设备上正常运行,该设备运行的是OS 3.0。问题是我没有在2.2.1上测试的设备,所以我使用模拟器,并且某些UI元素没有显示(主要是图像)我当前的构建。奇怪的是,当我在模拟器上测试已经在App Store中使用当前版本的XCode的应用程序的旧版本时,我得到了同样消失的UI问题。同一个版本如何有不同的结果? XCode有什么变化吗?这是怎么回事?

谢谢!

2 个答案:

答案 0 :(得分:3)

2.2.1应用程序无法在iPhone模拟器上运行:从“硬件”>检查模拟器的硬件版本应用程序运行时的“版本”菜单。虽然不是完全相同的问题,但是报告了关于自动选择正确的模拟器版本的问题。 See question#388298a related article (see Open Questions)。如果它没有设置为2.2.1,唯一的选择可能是手动设置它并在没有调试器的情况下启动应用程序。

支持一般的向后兼容性Here是一个很好的写作。您应该检查运行时的版本,而不是编译时,因为后者将从二进制文件中省略向后兼容的代码。另外,不要忘记弱链接任何仅限3.0的框架,例如MapKit和GameKit。 The article above显示了如何操作。

注意:您可以使用respondsToSelector:检查已弃用的属性。这有点麻烦但是获取和设置属性只是语法糖,所以:

cell.image;
cell.image = anImage;
// corresponds to
if ([cell respondsToSelector:@selector(image)]) {
    [cell image];
    [cell setImage:anImage];
}

此外,为每个不同的版本保留不同的目标可能会有所帮助,以便您可以轻松地在它们之间切换。

答案 1 :(得分:2)

某些方法在2.2.1-> 3.0更改中已弃用,包括几种UI方法(UITableViewCell的initWithStyle:很容易想到)。我会检查以确保您对UI对象的所有调用都是3.0兼容的,尤其是在构造或显示消失对象的区域中。