现象:
项目中pod引入了一个a.framework,Apple包管理器引入了一个Stevia.framework,build报错。
a.framework是在intel上面构建出来的fat binary,想要在m1上面用模拟器build需要去掉arm64构架。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进行构建时优先选择了arm64(模拟器),会去link对应的arm64(模拟器)的xx.framework,这时link要找的模拟器是arm64,a.framework中的模拟器是x86_64,就会报错了。
验证M1模拟器支持x86_64、arm64:把build active Architecture only设置成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设置成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
:缺少构架,pod工程build active Architecture only改为No
3、ld: framework not found Pods_XXDemo.framework
:工程-general-Frameworks删除该库,重新pod
注意:使用Swift Package,需要科学上网,特别慢。