簡體   English   中英

在iOS 7上運行32位ARM,在iOS 8上運行64位

[英]Run 32-bit arm on iOS 7 and 64-bit on iOS 8

我正在開發通過iOS 8定位於iOS 5.1.1的應用程序。它是一個包含arm64,armv7和armv7s的通用二進制文件。 現在,arm64將在iOS 7及更高版本(受支持的設備)上加載,但我想強制使其僅在iOS 8上加載(即,使iOS 7恢復為加載armv7s)。

動機:出於效率考慮,我需要針對某些iOS 8特定功能進行條件編譯。 我正在將整個渲染后端從OpenGL ES切換到iOS 8上的Metal,並且不想為兩者之間的任何動態分配付費。 后端是一堆c函數,因此動態選擇API將需要為所有功能增加一層函數指針。 如果arm64僅是iOS 8,則可以使用#ifdef __arm64__有條件地編譯Metal的使用。

我認為可能起作用:我在“ iOS部署目標”下為arm64添加了條件構建設置。 我已經檢查了構建日志,並看到為arm64構建添加了-miphoneos-version-min=8.0 它在iOS 8和arm64上運行良好。 對於iOS 7和arm64,我看到兩個可能的結果: 1)iOS 7查看64位二進制文​​件,將其丟棄為不受支持的文件,然后繼續加載armv7s。 2)嘗試加載64位二進制文​​件並崩潰。 問題是我唯一的64位設備運行iOS 8,因此我無法對其進行測試。

我的問題是這是否可行(也許有人以前曾嘗試過),或者是否有其他解決方案。

條件構建設置的屏幕快照供參考:

有條件的構建設置

也許為iOS 7和8創建2個單獨的構建方案(每種方案具有不同的構建設置)可以完成您想要的事情。

更新

抱歉,我的答案的初始版本有誤導性。 深入探討您的問題,我意識到您需要針對運行時特定的條件使用條件編譯。 也就是說,您需要在編譯時知道運行時特性,例如在用戶設備上運行的iOS版本。 這就是為什么您嘗試將iOS版本的使用限制為某種體系結構的原因-在這種情況下,您會知道,如果當前的架構是arm64,則設備正在運行iOS 8。

問題在於架構是硬件屬性( iOS支持矩陣 )。 iPhone 5S和iPhone 6支持arm64體系結構,同時iPhone 5S可能具有iOS7。因此,如果將arm64限制為iOS 8,則將在iPhone 5S上放棄對iOS 7的支持(您自己發現的內容) )。

因此,我認為您選擇的方法行不通。 不幸的是,我在編譯時找不到其他方式來了解運行時特性(如iOS版本)。

我了解我的答案無法解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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