2012-09-28 164 views
2

因此,現在有很多iOS版本在設備上運行,並且我在支持不同種類時遇到了一些問題。如何支持多個iOS版本?

如果我想發佈一個應用程序知道,想要使用iOS 6中的某些功能,但不想失去iOS 5用戶,是否可以在同一個應用程序中定位兩個版本App Store?

這裏有什麼其他的選擇?要跳過iOS 6的功能並只瞄準iOS 5?在這種情況下,應用程序是否會全面支持iOS 6?

謝謝。

+3

非常困難。 –

+0

可以在代碼中嵌入測試,以利用iOS 6盒子上的iOS 6功能,並在iOS 5盒子上繞過它們。但是你需要仔細計劃你將如何做到這一點,並在iOS 5上提供適當的等效功能(或者至少從菜單中刪除相應的選項等)。 –

+0

如果你錯過了其中一個測試,你將會崩潰,除非在兩個版本上都進行了大量測試(每次更改任何內容時對每個版本進行重新測試),否則無法檢查。在iOS上很少值得使用IMO。 –

回答

7

iOS用戶的升級速度比任何其他羣體都快。除非您有特殊的用戶羣,否則我不建議花費大量的時間來支持大於6個月的iOS版本。對於很多種類的應用程序來說,即使那樣太長了。 Matt Gemmell wrote an excellent discussion of this when iOS 5 came out.

在您過渡期間,在切換到最新版本之前,我的建議是針對舊SDK進行構建。不要只設置「部署目標」。設置「基礎SDK」。這意味着您需要保留舊的SDK並將其鏈接到您的Xcode副本中,因爲Apple將繼續刪除它們。 Google圍繞如何針對舊版SDK進行構建。有很多討論。我確定這裏有噸。有幾個原因,我強烈建議這個(不管你等多久升級):

  • 這是有點罕見,你實際上可以提供最新版本的功能,你在老版別。大多數時候你需要以某種形式提供舊版本。這意味着你現在有兩個版本的代碼基本上是一樣的。大多數時候,舊的方式更難,但仍然有效。一旦你寫出了硬法,還有什麼意思?寫了簡單的方法,然後編寫額外的代碼來選擇它們之間的?

  • 將功能交換進入和退出所需的測試令人難以置信的高。首先測試功能是非常困難的。現在測試測試沒有該功能。

  • 當您使用「開發目標」時,編譯器不會提供幫助。如果您從iOS 6調用某個方法而未檢查它是否存在,那麼您將不會收到警告。你只會在iOS 5上崩潰。如果你使用Base SDK,那麼編譯器會告訴你它何時不可用。我在WWDC與Xcode團隊談過這件事。他們指出,蘋果建議使用部署目標,但承認在實踐中使用它是非常脆弱的。

所以基本上,我說留在iOS 5 SDK,直到你準備去到iOS 6,然後去了iOS 6 SDK,永不回頭。

+0

哇,偉大的答案羅布,欣賞它!您能否詳細說明「直到您準備好去iOS 6」?我目前正在學習新的SDK和Objective-C功能,那麼現在是否有任何理由不針對iOS 6?謝謝。 – marsrover

+1

如果您現在開始開發應用程序(如果還沒有啓動應用程序,那麼更是如此),那麼我將專注於iOS 6的100%。當您準備好發佈任何內容時,iOS 5將被考慮古。 –

+0

我一直在爲這個決定奮鬥這麼久。你只是在這裏完美地總結出來的。「所以基本上,我說留在iOS 5 SDK,直到你準備好去iOS 6。然後去iOS 6 SDK,永遠不要回頭」 –