現(xiàn)象:
項目中pod引入了一個a.framework,Apple包管理器引入了一個Stevia.framework,build報錯对湃。
a.framework是在intel上面構(gòu)建出來的fat binary哟沫,想要在m1上面用模擬器build需要去掉arm64構(gòu)架。Stevia.framework只支持arm64巍耗,去掉arm64秋麸,就報錯了。
1.building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
2.Could not find module 'Stevia' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator
原因:
M1模擬器支持:x86_64炬太、arm64灸蟆,默認arm64。當引入在intel機器上生成的a.framework時亲族,a.framework包含x86_64(模擬器)炒考、arm64(真機)可缚。當m1進行構(gòu)建時優(yōu)先選擇了arm64(模擬器),會去link對應的arm64(模擬器)的xx.framework斋枢,這時link要找的模擬器是arm64帘靡,a.framework中的模擬器是x86_64,就會報錯了瓤帚。
驗證M1模擬器支持x86_64描姚、arm64:把build active Architecture only設(shè)置成No,然后用file或lipo -info命令查看編譯生成的二進制
解決方法:
build時去掉模擬器的arm64支持戈次。m1 build時會選擇x86_64轰胁,link會去找x86_64,在a.framework中能找到朝扼。
但是Stevia.framework是Apple包管理器引入的赃阀,只支持arm64,會報錯擎颖。
需要把Stevia.framework改成pod管理榛斯,并把pod工程的build active Architecture only設(shè)置成No
另有方法:Rosetta、XCFramework搂捧。未嘗試
遇到問題:
1驮俗、building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
:去掉arm64
2、Could not find module 'Stevia' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator
:缺少構(gòu)架允跑,pod工程build active Architecture only改為No
3王凑、ld: framework not found Pods_XXDemo.framework
:工程-general-Frameworks刪除該庫,重新pod
注意:使用Swift Package聋丝,需要科學上網(wǎng)索烹,特別慢。