當前位置:首頁 » 編程軟體 » m1編譯iOS速度

m1編譯iOS速度

發布時間: 2023-06-27 01:24:43

『壹』 M1 設備的 Xcode 編譯問題深究

在Apple發布M1晶元之前,一直使用Intel的晶元,沒有出現什麼問題。發布M1晶元後,由於兩者架構的不同(M1是arm64架構,Intel是x86_64的架構),導致很多軟體運行出現了問題。我們在M1機型中使用Xcode編譯模擬器時,可能會碰到如下報錯:



這些報錯,都是是由於項目中存在.a或.framework靜態庫導致的。以前,我們創建靜態庫時,會分別打包出一份針對真機(arm64)和模擬器的(x86_64),然後將這兩份合並成一個包後引入項目中進行使用。在Intel機型上,真機上使用arm64指令,模擬器(x86_64)中使用x86_64指令,所以不存在問題。但是在M1機型上,模擬器是以arm64運行的,顯然再以x86_64運行就會出現問題。

對於這類架構報錯問題,網上的資料一般會告訴你兩個解決方案:
以Rosetta模式運行Xcode。
修改Build Settings -> Excluded Architectures選項,添加Any iOS Simulator SDK選項,並設置值為arm64。圖示如下:

這兩種方案都能解決編譯問題,但是也都存在問題。

以Rosetta模式運行是M1機器上x86軟體無法運行的解決方案,它會將x86指令轉譯成ARM指令運行,這種轉譯顯然是存在性能損耗的,損耗大概在20%~30%,不到萬不得已,不推薦使用這種方案。
Excluded Architectures方案說明

修改Excluded Architectures選項也有它的問題。字面意思是排除架構的意思,我們設置在模擬器中排除arm64就能解決模擬器無法編譯arm64的問題。
這樣的設置能生效會讓人有點費解,我們知道,在intel機型上,模擬器本來就是以x86方式運行的,排除arm64毫無影響。但是在M1機型上,模擬器是以arm64方式運行的,排除了arm64反而能跑,這不是把我的智商摁在地上摩擦么?,但是蘋果就是這樣乾的,當在M1機型上,排除了模擬器的arm64架構後,模擬器還是會以arm64的方式運行,但是模擬器中的app是以x86的方式運行的,對蘋果的這個騷操作我們不得不服。圖示如下:

有時候在Excluded Architectures選項中排除了模擬器的arm64指令,依然無法編譯通過,那麼一般是項目設置和cocoapods的設置不一致導致,設置為一致後一般可以解決問題。可以通過在Podfile中添加如下內容來解決:

通過上述內容,我們知道了問題的由來,它是由於項目中存在.a或.framework,它們提供的指令集不完整導致的。Apple對於這類問題,也提供了解決方案,請由我細細道來。

以Xcode13為例,在我們創建靜態庫時,選擇真機編譯出來的包只包含arm64指令,選擇模擬器編譯出來的會同時包含arm64和x86_64指令。我看一些網上的教程,教別人將模擬器部分的arm64移除,其實大可不必。因為要支持M1機器正常跑模擬器,模擬器必須同時包含arm64和x86_64指令。

2019年的WWDC,apple提供了一種新的框架封裝格式XCFramework。簡單理解就是以前使用lipo合並不同指令集的包,現在則使用新的指令合並成XCFramework格式

打包成framework,格式如下:

打包成XCFramework後,格式如下:

從上述可以看出,XCFramework就是把兩個不同指令集的framework放入了同一個文件夾(.xcframework),並生成了一個配置文件Info.plist。這樣生成的XCFramework就可以完美的解決M1機器無法編譯模擬器的問題。
XCFramework的創建指令也很簡單:

以現在的情況,很多第三方框架,並沒有使用XCFramework,而項目中只要有一個框架沒有支持模擬器的arm64指令,那麼在M1機器上,模擬器只能以Rosetta模式運行應用,對這一塊的普遍支持估計要等M1普及以後了。

蘋果換芯,成了開發者們的噩夢?
armv6、armv7、armv7s、armv8、armv64及其i386、x86_64區別
細說iOS靜態庫和動態庫
關於Xcode11的XCFrameworks框架

『貳』 蘋果推出首款自主研發的晶元M1,它有多強

蘋果推出首款自主研發的晶元M1有以下強大的功能:一、它並不是簡單的A14馬甲 ;二、實現了低功耗和多幹活,計算能力超強;三、更長的電池壽命。

一、對於蘋果的新處理器,很多人猜測是一個手機和平板上的A14加強版,類似於A12Z,A12X和A12的關系。增加幾個大核心,增加幾個GPU的加強版A14。但是,蘋果M1並不是這么簡單的產品。

蘋果的晶元有時被稱為基於Arm的晶元,因為它從總部位於英國的Arm公司獲得了指令集的許可,這些指令集決定了處理器如何處理命令。但是核心處理器電路是這家美國公司自己設計的。蘋果的優勢之一是可以控制要包含的加速器。這些是特殊部分,專門處理某些任務,例如機器學習或密碼學。它還可以將內存和其他功能集成到一個封裝中,而不是使用其他專業晶元,這應該有助於提高性能。

熱點內容
jffs2解壓 發布:2025-02-08 13:55:15 瀏覽:386
如何向伺服器發送大數據包 發布:2025-02-08 13:55:12 瀏覽:660
伺服器pop地址是什麼 發布:2025-02-08 13:39:21 瀏覽:386
網站訪問計數器 發布:2025-02-08 13:32:07 瀏覽:6
釣魚的腥怎麼配置 發布:2025-02-08 13:22:57 瀏覽:754
php數組的引用 發布:2025-02-08 13:22:54 瀏覽:94
致遠a6伺服器地址在哪裡看 發布:2025-02-08 13:22:06 瀏覽:132
bak文件還原資料庫 發布:2025-02-08 13:21:34 瀏覽:103
雙向的訪問了你的空間 發布:2025-02-08 13:13:20 瀏覽:701
python元素是否在list 發布:2025-02-08 13:11:38 瀏覽:695