問題
M1進(jìn)程運(yùn)行模式:
?Apple
?Intel
swiftmodule架構(gòu)種類(部分):
?arm64-apple-ios-simulator
?arm64-apple-ios
?x86-apple-ios-simulator
?傳統(tǒng)arm64(以下簡稱arm64)
?傳統(tǒng)x86(以下簡稱x86)
提醒:
x86-apple-ios-simulator 和 傳統(tǒng)x86 說法相同
arm64-apple-ios 和 傳統(tǒng)arm64 說法相同
測試
在Xcode正常默認(rèn)設(shè)置下蜈亩、運(yùn)行在Apple模式下
測試1
正常源碼工程 (Excluded: arm64 沧竟,Pod 工程 和 項(xiàng)目工程同步 )
運(yùn)行(編譯)模式:模擬器
模擬器進(jìn)程:Apple( Rosetta 方式 => intel)
App進(jìn)程類型:Intel
測試2
正常的源碼工程(非Excluded: arm64 )
運(yùn)行(編譯)模式:模擬器
模擬器進(jìn)程:Apple( Rosetta 方式 => intel)
App進(jìn)程類型:Apple
分析
在上述情況下,經(jīng)測試:模擬器運(yùn)行模式不影響 app運(yùn)行方式带污。
那么 經(jīng)測試,默認(rèn)情況下香到,app運(yùn)行模式 受xcode運(yùn)行模式影響鱼冀?
?默認(rèn)情況下,Xcode 運(yùn)行在 Apple模式悠就,build Active Architecture Only時千绪,Xcode只選擇 arm架構(gòu)為Active(活躍)架構(gòu), 只編譯 arm架構(gòu)的動態(tài)庫(例如:arm64-apple-ios-simulator)梗脾;當(dāng)excluded arm64之后荸型,Xcode只選擇 x86架構(gòu)為Active(活躍)架構(gòu)(例如:x86-apple-ios-simulator,和傳統(tǒng)意義上的x86架構(gòu)一樣)炸茧;
?通過Rosetta 方式運(yùn)行Xcode瑞妇,build Active Architecture Only時,Xcode只選擇 x86 架構(gòu)為Active(活躍)架構(gòu)梭冠, 只編譯 x86架構(gòu)的動態(tài)庫;
在使用古老的靜態(tài)庫時辕狰,其架構(gòu) 包含 x86、arm64(用于真機(jī)),沒有arm64-apple-ios-simulator,因此運(yùn)行模擬器時蜻韭,編譯器只能選擇鏈接 靜態(tài)庫 x86 架構(gòu)部分梳码,形成app macho,因此就需要查找 x86架構(gòu)的動態(tài)庫進(jìn)行鏈接,整個app也將運(yùn)行在intel模式下,而x86-apple-ios-simulator的動態(tài)庫(編譯階段產(chǎn)出)是沒有的,所以報錯倒堕。
解決方案
?Excluded arm64
?Rosetta 方式運(yùn)行Xcode
?全架構(gòu)編譯Pod庫
?三方庫更新架構(gòu)
全架構(gòu)編譯Pods庫結(jié)果如下:
其他測試
Excluded: arm64
運(yùn)行(編譯)模式:真機(jī)設(shè)備
App 無法運(yùn)行 64 架構(gòu)設(shè)備
正常的源碼工程(非Excluded: arm64 )
運(yùn)行模式(編譯):真機(jī)設(shè)備
App進(jìn)程類型:Apple?