2012-03-04 175 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]; 
}