2009-06-24 86 views
2

我一直在iPhone應用程序一段時間,仍然想支持2.2.12.2.1版本時可以使用iPhone 3.0符號嗎?

其中一個功能是,用戶可以通過點擊鏈接通過電子郵件啓動應用程序。在2.2.1世界中,我通過實現應用程序來實現這一點:handleOpenURL:message。

在iPhone 3.0中,他們已經改變了添加應用程序的方法:didFinishLaunchingWithOptions:方法(這很棒,並且比老方法更有意義)。在這種方法中,您使用密鑰UIApplicationLaunchOptionsURLKey來找出URL的內容。

問題是,如果我使用該鍵,我的應用程序不會在2.2.1版本中構建,因爲它是在3.0中引入的。什麼是最好的方式來解決這個問題,並仍然支持2.2.1?我正在考慮使用UIApplicationLaunchOptionsURLKey枚舉的實際值,但我認爲這很醜陋。有沒有人遇到過這種情況,並想出更好的辦法?

回答

0

要擁有一個適用於兩個操作系統版本的單個應用程序,您必須針對2.2.1 SDK進行構建。而且由於該SDK不知道UIApplicationLaunchOptionsURLKey這個符號,如果您在您的應用在OS 3.0上運行時認識到它的價值,您別無選擇,只能在代碼中定義它。

另一方面,OS 3.0的採用非常強大(根據我所見的一個數字,已經達到了75%以上),因此僅使用您的應用程序OS 3.0也是一個需要考慮的解決方案。

1

最簡單的方法是#定義3.0代碼和2.2.1代碼,以便您可以進行條件編譯。注意:這意味着你將有一個二進制爲3.0,另一個爲另一個。

所以

#ifdef IPHONE_OS_3.0 

/* DO 3.0 stuff */ 

#endif 

#ifdef IPHONE_OS_2.2.1 

/*DO 2.2.1 stuff */ 
#endif 

在回答您的意見,你就必須有如果代碼將是不同的每個代碼塊不同的#ifdef #ENDIF,否則,如果它是隻爲3.0不同你會做類似

​​

你將不得不找出真正的定義是什麼(我只是做起來:))

希望幫助

+0

如果我這樣做,我不僅必須爲#ifdef做IPHONE_OS_2.2。1但之前的其他版本? – bpapa 2009-06-24 21:25:47

+0

請參閱我對您的評論的回覆:) – hhafez 2009-06-24 22:50:45

-1
#ifdef __IPHONE_3_0 
// iPhone 3.0 specific stuff 
#else 
// iPhone 2.2 (or below) specific stuff 
#endif 
1

使用3.0 SDK,但將「iPhone OS部署目標」設置爲2.2.1或更低版本。

在OS 3.0下,您的應用程序:didFinishLaunchingWithOptions:將被調用,如果您在OS 2.2.1上運行,則會調用其中一箇舊方法。

如果您不想使用任何其他3.0功能,我認爲您不需要做其他任何事情,但是您也可以查看my other answer關於Apple的MailComposer示例。

0

那麼如果你想擁有一個支持多個操作系統版本的單個二進制文件,你還應該怎麼做?我特別堅持如何有條件地爲3.0加載必要的庫。

相關問題