最新版本註釋表明4.2.1和更低版本將不被支持,我們現在必須在支持舊設備時使用2版本的Xcode進行開發?如果我們想開發iOS6並支持4.2或更低版本,這將很難支持較舊的設備。Xcode 4.5和iOS 4.2.1不兼容
我不認爲Xcode 4.4將支持iOS6。所以這是問題。開發人員如何輕鬆支持這些平臺而沒有太多麻煩?
最新版本註釋表明4.2.1和更低版本將不被支持,我們現在必須在支持舊設備時使用2版本的Xcode進行開發?如果我們想開發iOS6並支持4.2或更低版本,這將很難支持較舊的設備。Xcode 4.5和iOS 4.2.1不兼容
我不認爲Xcode 4.4將支持iOS6。所以這是問題。開發人員如何輕鬆支持這些平臺而沒有太多麻煩?
你可以做到這一點,但它需要一些次要的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;
你還需要到架構設置爲armv6
和armv7
。你不能直接也目標armv7s
。但是,這並不意味着您的應用將無法在iPhone 5上運行。armv7
可執行文件應該在iPhone 5上運行,而不會在armv7s
中添加任何優化。只是兼容性不適用於其他方向(例如armv7
可執行文件不能在armv6
iPhone 3G上運行)。
還有可能是必要的一步,這是不在chpwn的博客中提到。您可能會收到這些警告(這實際上是錯誤的,因爲Xcode中就不能正常生成可執行文件):
警告:沒有規則來處理文件類型sourcecode.c的「$(PROJECT_DIR)/main.m」 .objc爲架構的ARMv6
爲了解決這個問題,你需要設置你的目標定製構建規則告訴Xcode中使用LLVM GCC 4.2生成ARMv6的代碼。定義規則匹配模式*.[mc]
文件:
這將是一個不同的編譯器比Xcode的默認值,你可能需要調整一些在你的Objective-C代碼的語法。儘管很多想要這樣做的人可能會在ARC之前寫下他們的應用程序,但重要的是要注意LLVM gcc 4.2 does not support ARC。
最後,您可能仍會看到Xcode有關iOS部署目標小於4.3的警告和armv6
不受支持。這些,我發現,沒有問題,可以忽略不計:
運行在我的應用程序的可執行lipo -info
這表明了期望的結果後:
lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7
原始的iPhone和iPhone 3G是唯一不支持iOS 5的設備。iPhone 3G現在已經4歲了。您可能需要考慮放棄對iOS 4的支持。如果您不想這樣做,我認爲您必須開發兩種不同版本的Xcode。
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種選擇:
如果您對超越Xcode直接支持的內容感到滿意,請參閱Nate的答案。
+1用於回答而不是猜測他的業務需求。 –
如何在2個版本的Xcode中開發?我看到你如何創建2個不同的二進制文件,但是如何在App Store中管理這兩個二進制文件?這裏是關於這個主題的討論:http://stackoverflow.com/questions/12574851/support-both-armv6-and-ios-6-in-an-app-store-app – lschult2
你不能同時支持pre- 4.3設備並在同一應用中使用iOS 6功能。 –
我認爲,靶向4.3是最好的選擇,根據ios version statistics
相反,每一個iOS 4.3設備可以升級到iOS 5和/或6.去支持iOS 4.3的麻煩是浪費時間。以iOS 4.2.1爲目標,可以爲您帶來數百萬設備,讓您放棄。看到我對上面的答案的評論。 –
嘗試使用IPHONEOS_DEPLOYMENT_TARGET=4.0
手動設置項目的設置。但是,我不知道是否有任何副作用。
我認爲iOS 4.2.1的下降支持不是核心問題。實際上,我嘗試解決此問題並執行以下操作:
但是,安裝失敗。這裏的原因是 - 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。對?
非常感謝,你讓我的晚上!我一直在使用chpwn的文章掙扎於XCode,但是沒有任何運氣 –
如果我的文件是* .mm,那麼如何在*。[cm]語法中包含這些文件?謝謝 – malhal
@indiekiduk,我沒有在我的iOS項目中真正使用C++,但我猜測你可以再次**添加構建規則** *,這一次,定義構建規則爲'* .mm',也指向LLVM GCC 4.2編譯器。 – Nate