2014-01-18 136 views
11

我們可以看到,蘋果宣佈here.。根據這個文檔,我們可以提交支持32位和64位的相同二進制文件。我發現一個堆棧溢出回答here。但根據這個答案,我們shoulddeployment target as IO7+。但蘋果文檔說,你可以提交這個IOS 7和IOS 6支持?我的問題是,如何通過部署目標IOS6 +生成支持32位和64位的二進制文件?如何單一應用二進制支持64位和32位應用程序

注:我使用xcode 5.0

更新:Question above is fixed by using xcode 5.0.2。但我很困惑,我怎樣才能爲32位和64位編碼。我知道一件事,我們必須在一段時間內分別做兩個代碼。但是How can I do?。例如,如果在ios6中不贊成使用某種方法,那麼我們也爲ios 6和ios7提供代碼。在這種情況下也跟着這裏或者爲此做一些其他的技術。

+0

聲音是好的。爲什麼不接受我的回答 – codercat

+0

@iDev需要更多的解釋。但是你的回答對未來的用戶更有幫助。你可以更新你的答案和有用的例子,這會讓你更滿意:)你提供了兩個答案,使它成爲一個答案。它會更有用.. – Mani

回答

2

在較高水平,這裏有創建目標無論是32位和64位運行時環境的應用程序的步驟:

安裝的Xcode 5.0.2(我這個只是做,也許越高越好)

打開項目。 Xcode提示你使你的項目現代化。現代化項目會增加新的警告和錯誤,這些錯誤在編譯64位應用程序時非常重要。

更新您的項目設置,支持的iOS 5.1.1或更高版本。如果目標iOS版本早於iOS 5.1,則無法構建64位項目。

更改架構建立在您的項目設置爲「標準架構(包括64位)。」

更新您的應用程序,支持64位的運行環境。新的編譯器警告和錯誤將有助於指導您完成此過程。但是,編譯器不會爲你做所有的工作;使用本文檔中的信息來幫助指導您調查自己的代碼。

測試你的實際64位硬件的應用程序。 iOS Simulator在開發過程中也很有幫助,但只有當您的應用在設備上運行時,才能看到一些更改,如函數調用約定。

使用Instruments來調試你的應用程序的內存性能。 提交包含兩種體系結構的應用程序以供審批。

本章的其餘部分描述了一個移植可可觸摸應用的64位運行時環境時經常出現的問題。使用這些部分來指導您自己的努力來調查您的代碼。

由蘋果按照guide for supporting the 32 and 64 bit架構

+0

我正在使用Xcode5.0。但是,如果我試圖設置''標準體系結構(包括64位)「,我不能將部署目標設置爲比IOS7更早? – Mani

+0

首先Xcode與IOS 7.0 sdk可能是一個問題,你嘗試新版本5.0.3我想會爲你做 – Retro

+0

你使用Xcode 5.0.3嗎?我已經將Base sdk設置爲7.0?是否有任何需要更改基礎SDK? – Mani

0

程序編譯的xcode 5包含在兩個二進制代碼:32位和64 bit.In 32位系統將調用32位code.In 64位系統將調用64位代碼。同時,想想同一個程序只有32位代碼,64位系統包含兩個框架:一個32位,一個64位。當運行32位程序的64位系統會調用運行64位程序的底層支持的32位框架將調用64位框架作爲底層支持。更多細節你可以看到蘋果的官方文檔「Cocoa Touch的64位轉換指南」。

使用Xcode的5可以很容易地編寫程序到64.The基本過程如下。

  1. 在「生成設置」變更爲「標準架構(包括64位)」設置在支撐裝置成「ios7」

  2. 的「體系結構」。

+0

我需要支持它從IOS6 +? – Mani

+0

@Mani您可以設置Deployment target 6.0並使用IOS SDK 7.0開發 – Dracuuula

+0

那麼,您的意思是第一點?我無法得到它? – Mani

19

Xcode中可以構建應用程序與32位和64位二進制文​​件包含 因此它可以跨越運行iOS 7.如果您希望繼續 支持所有的iOS 6的設備,那麼你將需要僅用於構建32位。接下來 月我們將作出修改,將允許您創建一個支持在iOS 6的32位單 應用二進制文件,以及32位和64位 在iOS 7

轉換您的應用程序到64位二進制

在高級別,這裏是創建同時指定 的32位和64位的運行時環境的應用程序的步驟:

1.安裝的Xcode 5.0。 1。

2.打開您的項目。 Xcode提示你使你的項目現代化。對項目進行現代化增加了新的警告和錯誤,編譯您的應用程序時,這些錯誤是 對於64位。

3.Update您的項目設置,支持的iOS 5.1.1或更高版本。如果iOS iOS版本的目標iOS版本早於 ,則無法構建64位項目。

4.Change的架構構建設置在項目中的「標準架構(包括64位)。」

5.Update您的應用程序,支持64位的運行環境。新的編譯器警告和錯誤將有助於指導您完成此過程。 但是,編譯器不會爲您完成所有工作;請使用本文檔中的 信息來幫助指導您通過調查 您自己的代碼。

6.測試實際的64位硬件的應用程序。 iOS Simulator在開發過程中也可能會有所幫助,但只有當您的應用程序在 設備上運行時,纔會看到一些更改,例如功能 調用約定。

7.使用Instruments來調試你的應用程序的內存性能。

8.Submit一個應用程序,包括批准兩種架構。

本章的其餘部分描述了一個移植可可觸摸應用的64位運行時環境時經常發生 問題。使用 這些部分來指導您自己的努力來調查您的代碼。

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

+0

我只是想補充一點,因爲這是覆蓋iOS6需求的答案 - 只要使用NSInteger和NSUInteger,您通常不需要對y代碼進行更改以支持32位和64位int或uint ...是一種簡化,但對大多數應用程序來說通常都是如此。 –

+0

@iDev這是真的嗎?我們可以用xocde 5.0.1來構建這個版本嗎?因爲我使用5.0? – Mani

+0

聲音很好... – codercat

5

iOS應用程序依賴於低級別的應用程序二進制接口,並通過了Objective-C語言和系統框架建立的編碼約定上。從iOS 7開始,一些iOS設備使用64位處理器並提供32位和64位運行時環境。對於大多數應用程序,64位運行時環境與32位運行時環境有以下兩種顯着差異:

在64位運行時中,Cocoa Touch框架使用的許多數據類型(以及Objective-C語言本身)的規模已經增加或者有更嚴格的內存對齊規則。請參閱「Changes to Data Types」。 64位運行時需要在進行函數調用時使用正確的函數原型。請參見「Changes to Function Calling」。

application binary interface (ABI)

其他更改64位運行時

64位ARM指令集是從32位指令集顯著不同。如果您的應用程序包含任何彙編語言代碼,則需要重寫它以使用新的指令集。您還需要更詳細地描述iOS中的64位調用約定,因爲約定不完全符合ARM標準。有關更多信息,請參閱iOS ABI Function Call Guide

在一個較高水平,使你的代碼64位清潔,你必須做到以下幾點:

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

有點混亂。您能否提供1和2的示例代碼? – Mani

+0

與你自己有什麼混淆。 – codercat

+0

Xcode可以構建包含32位和64位二進制文​​件的應用程序,因此它適用於所有運行iOS 7的設備。如果您希望繼續支持iOS 6,那麼您只需構建32位。下個月,我們將進行更改,以允許您創建支持iOS 6上的32位以及iOS 7上的32位和64位的單個應用程序二進制文件。 – codercat

0

至於第一部分的問題 - 基礎SDK應該是「最新的iOS SDK」,它是iOS 7.0。最低部署目標應該是iOS 6.0,否則您將無法爲體系結構選擇「標準架構,包括64位(armv7,armv7s,armv8)」。選擇這些設置後,您的應用程序將爲32位和64位構建。

至於更新 - 切換到32位/ 64位arch後,分析您的項目並修復可能出現的新警告。然後在真正的64位設備(iPhone 5s/iPad Air/iPad迷你視網膜)上測試您的應用程序。如果您的應用使用iCloud,請在32位和64位設備之間測試同步。有用的信息在Apple's guide(總結來自@iDev答案)。

編輯

其實是,最小值爲5.1。1,但是您應該手動設置它,或者將部署目標設置爲低於6.0,並且選擇體系結構爲incl。 64位Xcode會要求你將其設置爲5.1.1。無論如何,我不確定爲什麼你想要支持5.1.1,特別是如果你想使用64位拱形。

+0

你錯了。當部署目標比ios 5.1晚時,我們能夠爲體系結構選擇「標準架構,包括64位(armv7,armv7s,armv8)」嗎?用Xcode 5.0.2檢查.. – Mani

相關問題