iOS混編項目從x86 macbook遷移到arm架構的Macbook屈张,項目編譯失敗的解決方案
本文寫于2021年8月辐棒,完善與2021年11月写半,xcode版本號為13爱榕,請注意時效璧尸。本文的方法屬于盲人摸象式的不完全歸納法涌萤,是“bug + bug = 成功運行”的典型范例番舆;
背景
2014年MacbookPro換2020年MacBook Air (M1芯片)
新設備Xcode版本為12贫橙,操作系統(tǒng)為11.5.1 , Big Sur
項目中使用cocoapod引入網易云信 NIMSDK_Lite最新的版本喘帚;
故障現(xiàn)象
項目在老設備上使用模擬器可以正常編譯畅姊,拷貝到新設備后,模擬器編譯報錯:
大致的錯誤內容為:
building for iOS Simulator, but linking in dylib built for iOS
或者
Xcode 12, building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
但是如果是真機編譯則沒有問題啥辨;
問題分析
新的設備是Apple M1芯片涡匀,xcode12使用模擬器編譯時,只需要一套設備上用的arm64的架構來編譯即可溉知,但是有些Pod庫會不支持這樣的用法陨瘩,Xcode12 + M1芯片設備的組合不知道為啥不能智能處理,也許是兼容的bug吧级乍,總之具體原因不詳舌劳。
解決方案
我按照以下方案解決了上述問題;
https://stackoverflow.com/questions/63607158/xcode-12-building-for-ios-simulator-but-linking-in-object-file-built-for-ios
劃重點:
Basically you have to exclude arm64
for simulator architecture both from your project and the Pod project,
- To do that, navigate to Build Settings of your project and add
Any iOS Simulator SDK
with valuearm64
insideExcluded Architecture
.
注意玫荣,重要的事情說三遍:
both from your project and the Pod project
both from your project and the Pod project
both from your project and the Pod project
重要說明:
上面的方面可以解決在模擬器上運行APP的問題甚淡,但是真機聯(lián)調和Archive 打包還是有問題的。
會報錯:
Unable to find a profile type for platform iOS and purpose development. You may need to reinstall Xcode.
如果你有幸能遇到這個問題捅厂,請不要真的傻乎乎的去重新安裝Xcode了贯卦。
請試試修改Xcode的編譯器為老的模式资柔;
Xcode菜單>File>Workspace Settings
修改Build System為:Legacy Build System(Deprecated)
番外篇:
上面的方案的確管用了一陣,但是后來又不管用了撵割。我在項目中使用cocoaPod導入了NIMSDK_Lite贿堰,當我刪除項目中引入的類庫 SPaySDK后,項目就無法正常編譯了啡彬。提示都是 與 NIMSDK_lite 類庫相關的一些錯誤羹与。
上面的方法全都失效了。
之前能用庶灿,可能是因為 bug + bug = 意外修復bug的情況吧纵搁。
錯誤提示為:
Building for iOS Simulator, but linking in dylib built for iOS, file '/Users/xxxx/iOS/kdh_iOS/Pods/NIMSDK_LITE/NIMSDK/NIMSDK.framework/NIMSDK' for architecture arm64
最后,使用下面的方案徹底解決問題:
https://stackoverflow.com/questions/65978359/xcode-error-building-for-ios-simulator-but-linking-in-dylib-built-for-ios-f
- Quit Xcode.
- Go to Finder and open Application Folder.
- Right click on Xcode application, select Get Info
- In the "Xcode Info Window" check on Open using Rosetta.
- Open Xcode and try running again.
總結 - 成功狀態(tài)截圖
我這邊最后的成功狀態(tài)如下:
- 模擬器可以正常運行往踢;
- 真機聯(lián)調可以正常運行腾誉;
- Archive 打包可以正常運行;
- 在切換運行方式時峻呕,不需要調整任何配置妄辩。
設備型號
Xcode 13.1
Build System為:Legacy Build System(Deprecated)
Xcode 的打開模式為: Rosetta
Excluded Architectures 配置:(APP target)
Excluded Architectures 配置:(Pods target)
Enable Bitcode = NO
包括:
- App Target > Build Settings > Enable Bitcode
-
Pods Project > Build Settings > Enable Bitcode