2012-03-04 128 views
2

我有一个关于iOS 4和5的问题。我真的很困惑,希望有人能为我清除它。iOS 4和iOS 5向后兼容性

我在我的应用程序中使用iOS 5 SDK。如果我使用由Apple提供的iOS 5 Twitter集成,它是否会在安装了iOS 4的iPhone上运行?

向后兼容性是否工作?

我已经使用Twitter作为例子,但向后兼容性真的可以与iOS 5一起使用吗?

回答

10

如果您设置的应用程序正确 ,因此它可以在运行iOS 4的设备上运行而不会崩溃,那么:是的,它将在安装了iOS 4的iPhone上运行。

您的应用应该实现逻辑,以便在iOS 5设备上运行应用时使用Twitter API。当应用程序在iOS 4设备上运行时,可以有条件地选择而不是以使用Twitter API。相反,您可以使用不同的Twitter库(如MGTwitterEngine,或者您自己的) - 或者仅仅为这些用户排除Twitter功能。

要检查TWRequest类是否存在,请使用NSClassFromString。

Class twRequestClass = NSClassFromString(@"TWRequest"); 
if (twRequestClass == nil) { 
    // TWRequest does not exist on this device (running iOS version < 5.0) 
    // ... do something appropriate ... 
} else { 
    TWRequest *twRequest = [[twRequestClass alloc] init]; 
    //^I didn't look up the proper initializer, so you should change that line if necessary 
    // ... 
} 
+1

很好解释。 – matt 2012-03-04 18:18:44

1

不,如果您使用iOS5中可用的Twitter API,它们将无法在iOS4上运行。

原因是当应用程序在iOS4上运行时,系统将不具备API可用性。

如果您检查文档,您可以看到此类/ API可用的iOS版本。 enter image description here

我希望这有助于..

+0

这意味着没有向后兼容性。:( – shajem 2012-03-04 16:55:23

+0

吧...你不能尽管此功能不可用低于5.0只运行在iOS5的供应还是在运行iOS4的设备更高的API。 – samfisher 2012-03-04 17:53:41

+0

现在,并不意味着你不能拥有更低的部署目标。简而言之,我的Twitter按钮表示如果iOS 5.0或更高版本>启动twitter,否则UIAlertView声明该功能仅在5.0或更高版本上可用。 – 2012-03-04 22:08:27

3

如果您设置的应用程序正确,以便它可以在运行iOS 4设备上运行,它会崩溃。这是因为您试图访问无法使用的方法/功能。 来解决这个问题的方法是检查是否存在某种功能可以使用

if(NSClassFromString(@"UIPopoverController")) { 
// Do something 
} 

(酥料饼控制器只是一个例子)

您还可以使用检查版本

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 

而且然后根据版本运行特定的一段代码(即如果iOS 5,瓶坯twitter的东西,否则做一些不同的事情)

+3

'systemVersion'不能保证返回一个可解析的值作为'float',实际上当前*不*返回完全可解析的值。 – 2012-03-04 16:41:38

3

你将不得不c依赖于用户正在使用的iOS版本来取消if。为例,在iOS 5中有一个外观API来修改大多数用户界面,但不是在iOS 4的,所以你必须制造一点,如果这样的:

// not supported on iOS4 
UINavigationBar *navBar = [myNavController navigationBar]; 
if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) 
{ 
    [navBar setBackgroundImage:[UIImage imageNamed:@"bg.jpg"] forBarMetrics:UIBarMetricsDefault]; 
}