2012-09-17 77 views
36

最新版本註釋表明4.2.1和更低版本將不被支持,我們現在必須在支持舊設備時使用2版本的Xcode進行開發?如果我們想開發iOS6並支持4.2或更低版本,這將很難支持較舊的設備。Xcode 4.5和iOS 4.2.1不兼容

我不認爲Xcode 4.4將支持iOS6。所以這是問題。開發人員如何輕鬆支持這些平臺而沒有太多麻煩?

回答

29

你可以做到這一點,但它需要一些次要的Xcode黑客攻擊和一些犧牲。根據你的意思「支持iOS 6」,這可能會或可能不足以滿足你的需求。如果你只是想讓你的應用在iOS 6上運行,那麼這應該工作。如果你還需要你的應用程序來整合新的iOS 6功能,那麼它不會。

    (注他人使用Xcode中的多個版本沒有問題誰:this similar question有答案,那些讓你也可以使用新的iOS 6 API和直接針對armv7s)

See basic instructions on chpwn's blog here(但是請閱讀下面的其他內容!)

基本上,您可以使用Xcode 4.5爲iOS 4或更高版本構建,但不能充分利用新的iOS 6特性。所以,你真的爲iOS 4和5構建,並假設應用程序將在iOS 6上運行良好(這應該是真的,但你需要自己測試)。

你需要

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk 

從舊的Xcode的安裝(你需要保持簡單各地,或重新安裝到非標準位置)複製的iOS 5 SDK文件夾。然後,您將您的Build Settings中的部署目標設置爲iOS 4.0(或任何您需要的最低操作系統)。您可能需要在文本編輯器打開該文件project.pbxproj手動設置這樣的:

IPHONEOS_DEPLOYMENT_TARGET = 4.0; 

你還需要到架構設置爲armv6armv7。你不能直接目標armv7s。但是,這並不意味着您的應用將無法在iPhone 5上運行。armv7可執行文件應該在iPhone 5上運行,而不會在armv7s中添加任何優化。只是兼容性不適用於其他方向(例如armv7可執行文件不能在armv6 iPhone 3G上運行)。

enter image description here

還有可能是必要的一步,這是在chpwn的博客中提到。您可能會收到這些警告(這實際上是錯誤的,因爲Xcode中就不能正常生成可執行文件):

警告:沒有規則來處理文件類型sourcecode.c的「$(PROJECT_DIR)/main.m」 .objc爲架構的ARMv6

爲了解決這個問題,你需要設置你的目標定製構建規則告訴Xcode中使用LLVM GCC 4.2生成ARMv6的代碼。定義規則匹配模式*.[mc]文件:

enter image description here

這將是一個不同的編譯器比Xcode的默認值,你可能需要調整一些在你的Objective-C代碼的語法。儘管很多想要這樣做的人可能會在ARC之前寫下他們的應用程序,但重要的是要注意LLVM gcc 4.2 does not support ARC

最後,您可能仍會看到Xcode有關iOS部署目標小於4.3的警告和armv6不受支持。這些,我發現,沒有問題,可以忽略不計:

enter image description here

運行在我的應用程序的可執行lipo -info這表明了期望的結果後:

lipo -info MyAppName 
Architectures in the fat file: MyAppName are: armv6 armv7 
+0

非常感謝,你讓我的晚上!我一直在使用chpwn的文章掙扎於XCode,但是沒有任何運氣 –

+0

如果我的文件是* .mm,那麼如何在*。[cm]語法中包含這些文件?謝謝 – malhal

+0

@indiekiduk,我沒有在我的iOS項目中真正使用C++,但我猜測你可以再次**添加構建規則** *,這一次,定義構建規則爲'* .mm',也指向LLVM GCC 4.2編譯器。 – Nate

2

原始的iPhone和iPhone 3G是唯一不支持iOS 5的設備。iPhone 3G現在已經4歲了。您可能需要考慮放棄對iOS 4的支持。如果您不想這樣做,我認爲您必須開發兩種不同版本的Xcode。

+5

的iOS 4設備仍然有顯著市場分享。特別是對於商業應用程序,這些設備仍然有足夠的能力來運行它們。我想大多數應用程序仍然會支持他們,至少在一年之後纔會真正淡出。 – mskw

+0

大部分剩餘的iOS 4.X用戶將升級到iPhone 5.使用iOS 6時,在4上浪費精力毫無意義。隨着我們的下一個版本,我們正式放棄4.X. – ahwulf

+3

有趣的是,爲什麼沒有人回答我的問題,畢竟人們對我的支持/說服力不支持4.2.1,我仍然需要出於商業原因。那麼,是否有人需要支持4.2.1和4.3以及更高版本,如果是的話,他們如何應對? – mskw

22

Xcode 4.5使得iOS 4.3成爲最早支持的操作系統,它有效地孤立了原有的iPhone和3G。

如果您想要支持4.3之前的iOS版本,則需要保留4.4版本的Xcode。

爲了更清楚一點:你不能容易地(意味着Xcode不能開箱即可)支持4.3之前的設備,並在同一個應用中使用iOS 6功能。這是因爲iOS 6功能需要XCode 4.5,它也將iOS 4.3設置爲支持的最低操作系統。

所以,你有3種選擇:

  1. 繼續使用的XCode 4.4。你將能夠瞄準4.3之前的iOS。您將無法利用iOS 6功能,但假設您在實際的iOS 6設備上執行了足夠的測試,則應用程序應該可以正常運行。
  2. 遷移到XCode 4.5。你將無法瞄準4.3之前的iOS,但你將能夠利用iOS 6的功能。
  3. 製作兩個版本的應用程序。使用XCode 4.4構建一個版本(如選項1),另一個版本使用4.5(如選項2)。從發行的角度來看,這些將是2個獨立的應用程序,它們將分別擁有自己的套件ID等。您將在應用程序商店中擁有兩個條目。

如果您對超越Xcode直接支持的內容感到滿意,請參閱Nate的答案。

+8

+1用於回答而不是猜測他的業務需求。 –

+0

如何在2個版本的Xcode中開發?我看到你如何創建2個不同的二進制文件,但是如何在App Store中管理這兩個二進制文件?這裏是關於這個主題的討論:http://stackoverflow.com/questions/12574851/support-both-armv6-and-ios-6-in-an-app-store-app – lschult2

+0

你不能同時支持pre- 4.3設備並在同一應用中使用iOS 6功能。 –

0

我認爲,靶向4.3是最好的選擇,根據ios version statistics

+3

相反,每一個iOS 4.3設備可以升級到iOS 5和/或6.去支持iOS 4.3的麻煩是浪費時間。以iOS 4.2.1爲目標,可以爲您帶來數百萬設備,讓您放棄。看到我對上面的答案的評論。 –

0

嘗試使用IPHONEOS_DEPLOYMENT_TARGET=4.0手動設置項目的設置。但是,我不知道是否有任何副作用。

2

我認爲iOS 4.2.1的下降支持不是核心問題。實際上,我嘗試解決此問題並執行以下操作:

  • 使用iOS 6 SDK構建應用程序,將部署目標設置爲iOS 4.2.1(可行)。
  • 打包應用程序進行臨時安裝,並在iOS 4.2.1設備(iPod touch 2G)上安裝應用程序。
  • 測試應用程序。

但是,安裝失敗。這裏的原因是 - afaik - 不是iOS版本。原因是架構。 XCode 4.5不再允許您爲armv6構建。它只適用於armv7。另一方面:所有armv7或更高版本的設備都可以運行iOS 5。唯一不支持armv7的設備是iPhone,iPhone 3G,iPod touch 1G和iPod touch 2G。

所以對於我來說,問題是:你可以使用XCode 4.5和iOS 6爲基礎SDK構建armv6嗎?

編輯:你不能這樣做,因爲iOS 6基礎SDK不適用於armv6。對?