[英]How Single App Binary Supports 64-bit and 32-bit Apps
我們可以在這里看到蘋果公告。 。 根據這個文檔,我們可以提交相同的二進制文件,支持32位和64位。 我發現這里有一個堆棧溢出答案。 但根據這個答案,我們should
將deployment target as IO7+
設置deployment target as IO7+
。 但是蘋果醫生說,您可以通過IOS 7和IOS 6支持提交嗎? 我的問題是, 如何通過部署目標IOS6 +生成支持32位和64位的二進制文件?
注意:我正在使用xcode 5.0
更新: Question above is fixed by using xcode 5.0.2
。 但我很困惑如何為32位以及64位編寫代碼。 我知道一件事,我們必須在某些時候分別做兩個代碼。 但是How can I do?
。 例如,如果在ios6中不推薦使用一種方法,我們也為ios 6和ios7提供代碼。 在同樣的情況下也遵循這里或為此做一些其他技術。
Xcode可以構建包含32位和64位二進制文件的應用程序,因此它適用於運行iOS 7的所有設備。如果您希望繼續支持iOS 6,那么您將需要僅為32位構建。 下個月我們將進行更改,允許您創建單個應用程序二進制文件,支持iOS 6上的32位,以及iOS 7上的32位和64位。
將您的應用程序轉換為64位二進制文件
在較高的層次上,以下是創建針對32位和64位運行時環境的應用程序的步驟:
1.安裝Xcode 5.0.1。
2.打開你的項目。 Xcode會提示您使項目現代化。 現代化項目會在編譯64位應用程序時添加新的警告和錯誤。
3.更新項目設置以支持iOS 5.1.1或更高版本。 如果它針對早於iOS 5.1的iOS版本,則無法構建64位項目。
4.將項目中的體系結構構建設置更改為“標准體系結構(包括64位)”。
5.更新您的應用程序以支持64位運行時環境。 新的編譯器警告和錯誤將指導您完成此過程。 但是,編譯器不會為您完成所有工作; 使用本文檔中的信息來指導您調查自己的代碼。
6.在實際的64位硬件上測試您的應用程序。 iOS模擬器在開發過程中也很有用,但只有當您的應用程序在設備上運行時,某些更改(例如函數調用約定)才可見。
7.使用Instruments調整應用程序的內存性能。
8.提交包含兩種架構以供批准的應用程序。
本章的其余部分描述了將Cocoa Touch應用程序移植到64位運行時環境時經常出現的問題。 使用這些部分來指導您自己調查代碼的工作。
iOS應用程序依賴於Objective-C語言和系統框架建立的低級應用程序二進制接口和編碼約定。 從iOS 7開始,一些iOS設備使用64位處理器,並提供32位和64位運行時環境。 對於大多數應用程序,64位運行時環境與32位運行時環境的區別在於兩個重要方面:
在64位運行時中,Cocoa Touch框架使用的許多數據類型(以及Objective-C語言本身)已經增加了大小或者具有更嚴格的內存對齊規則。 請參閱“ 對數據類型的更改 。”64位運行時需要在進行函數調用時使用正確的函數原型。 請參閱“ 函數調用的更改 ”。
64位運行時的其他更改
64位ARM指令集與32位指令集明顯不同。 如果您的應用程序包含任何匯編語言代碼,則需要重寫它以使用新的指令集。 您還需要更詳細地描述iOS中的64位調用約定,因為這些約定與ARM標准不完全匹配。 有關更多信息,請參閱iOS ABI函數調用指南 。
在較高的層次上,為了使您的代碼保持64位清潔,您必須執行以下操作:
在較高的層次上,以下是創建針對32位和64位運行時環境的應用程序的步驟:
安裝Xcode 5.0.2(我已經完成了這個,也許更高更好)
打開你的項目。 Xcode會提示您使項目現代化。 現代化項目會在編譯64位應用程序時添加新的警告和錯誤。
更新項目設置以支持iOS 5.1.1或更高版本。 如果它針對早於iOS 5.1的iOS版本,則無法構建64位項目。
將項目中的體系結構構建設置更改為“標准體系結構(包括64位)”。
更新您的應用程序以支持64位運行時環境。 新的編譯器警告和錯誤將指導您完成此過程。 但是,編譯器不會為您完成所有工作; 使用本文檔中的信息來指導您調查自己的代碼。
在實際的64位硬件上測試您的應用程序。 iOS模擬器在開發過程中也很有用,但只有當您的應用程序在設備上運行時,某些更改(例如函數調用約定)才可見。
使用Instruments調整應用程序的內存性能。 提交包含兩種架構以供批准的應用程序。
本章的其余部分描述了將Cocoa Touch應用程序移植到64位運行時環境時經常出現的問題。 使用這些部分來指導您自己調查代碼的工作。
編譯的程序xcode 5包含兩個二進制代碼:32位和64位。在32位系統中將調用32位代碼。在64位系統中將調用64位代碼。 同時,考慮到同一個程序只有32位代碼,64位系統包含兩個框架:一個32位,一個64位。當運行32位程序的64位系統將調用底層支持的32位框架,運行64位程序將調用64位框架作為底層支持。更多詳細信息,您可以看到Apple的官方文檔“Cocoa Touch的64位轉換指南”。
使用xcode 5可以很容易地將程序編譯成64個。基本步驟如下。
將支持設備設置為'ios7'
“構建設置”中的“體系結構”更改為“標准體系結構(包括64位)”。
至於問題的第一部分 - 基礎SDK應該是iOS 7.0的“最新iOS SDK”。 最低部署目標應該是iOS 6.0,否則您將無法為體系結構選擇“標准體系結構,包括64位(armv7,armv7s,armv8)”。 選擇這些設置后,您的應用程序將構建為32位和64位。
至於更新 - 切換到32 / 64bit拱后,分析您的項目並修復可能出現的新警告。 然后在真正的64位設備(iPhone 5s / iPad Air / iPad mini retina)上測試您的應用程序。 如果您的應用使用iCloud,請測試32位和64位設備之間的同步。 有用的信息在Apple的指南中 (摘自@iDev答案)。
編輯
實際上是,最小值是5.1.1,但您應該手動設置它或將部署目標設置為低於6.0,並選擇體系結構為incl。 64位Xcode會要求您將其設置為5.1.1。 無論如何,如果你想使用64位拱門,我不確定你為什么要特別支持5.1.1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.