簡體   English   中英

單個應用程序二進制文件如何支持64位和32位應用程序

[英]How Single App Binary Supports 64-bit and 32-bit Apps

我們可以在這里看到蘋果公告 根據這個文檔,我們可以提交相同的二進制文件,支持32位和64位。 我發現這里有一個堆棧溢出答案。 但根據這個答案,我們shoulddeployment 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位運行時環境時經常出現的問題。 使用這些部分來指導您自己調查代碼的工作。

來自https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//apple_ref/doc/uid/TP40013501-CH3-SW1

iOS應用程序依賴於Objective-C語言和系統框架建立的低級應用程序二進制接口和編碼約定。 從iOS 7開始,一些iOS設備使用64位處理器,並提供32位和64位運行時環境。 對於大多數應用程序,64位運行時環境與32位運行時環境的區別在於兩個重要方面:

在64位運行時中,Cocoa Touch框架使用的許多數據類型(以及Objective-C語言本身)已經增加了大小或者具有更嚴格的內存對齊規則。 請參閱“ 對數據類型的更改 。”64位運行時需要在進行函數調用時使用正確的函數原型。 請參閱“ 函數調用的更改 ”。

應用程序二進制接口(ABI)

64位運行時的其他更改

64位ARM指令集與32位指令集明顯不同。 如果您的應用程序包含任何匯編語言代碼,則需要重寫它以使用新的指令集。 您還需要更詳細地描述iOS中的64位調用約定,因為這些約定與ARM標准不完全匹配。 有關更多信息,請參閱iOS ABI函數調用指南

在較高的層次上,為了使您的代碼保持64位清潔,您必須執行以下操作:

  1. 避免將64位長整數分配給32位整數。
  2. 避免將64位指針分配給32位整數。
  3. 在算術運算期間避免指針和長整數截斷(或由整數類型的變化引起的其他算術問題)。
  4. 修復由數據類型大小的更改引起的對齊問題。
  5. 確保在32位和64位運行時之間共享的內存結構共享相似的布局。
  6. 重寫任何匯編語言代碼,以便您的代碼使用新的64位操作碼和運行時。
  7. 避免將可變參數函數轉換為采用固定數量參數的函數,反之亦然。

在較高的層次上,以下是創建針對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位運行時環境時經常出現的問題。 使用這些部分來指導您自己調查代碼的工作。

按照指南通過apple 支持32位和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個。基本步驟如下。

  1. 將支持設備設置為'ios7'

  2. “構建設置”中的“體系結構”更改為“標准體系結構(包括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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM