美文网首页
M1-模拟器build报错

M1-模拟器build报错

作者: 笑破天 | 来源:发表于2022-08-11 15:59 被阅读0次

现象:

项目中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,需要科学上网,特别慢。

参考:
M1芯片Xcode编译模拟器遇到的坑
在 Xcode 中使用 Swift Package

相关文章

网友评论

      本文标题:M1-模拟器build报错

      本文链接:https://www.haomeiwen.com/subject/prazwrtx.html