背景说明
近期更换了MBP14,项目上需要编译IOS(react native项目),在使用真机进行测试没有任何问题,在进行模拟器运行的时候无法正确编译,故不能在模拟器上运行。
问题说明
React Native项目因为使用了极光推送。
运行编译的时候报错信息如下:
The linked library 'libPods.a' is missing one or more architectures required by this target: x86_64.
问题分析
首先可以确定的是xcode 编译运行ios应该是没有任何问题,因为M1也是arm架构,而ios也是arm架构。
但是报错是因为一个链接库需要x86_64架构。
在M1之前都是X86架构运行ios模拟器,在编译的时候默认会转译到x86模式进行编译,而现在m1不支持x86指令,故出错误。
问题核心应该是设置对应的编译平台,不使用默认的配置。
问题解决
- 简单的方法是使用Rosetta.
操作步骤如下:1. 删除相应数据: /Users/<username>/Library/Developer/Xcode/DerivedData 2. xcode右键->显示简介->勾选Rosetta。 或者: 1. 执行 softwareupdate --install-rosetta
- 修改相关参数
- 修改项目配置->Build Settings-> Excluded Architecture->Relese/Debug-> Any iOS Simulator SDK 设置值 arm64;
- 修改Pod配置->Build Settings-> Excluded Architecture->Relese/Debug-> Any iOS Simulator SDK 设置值 arm64;
- 修改podfile文件。
post_install do |installer| installer.pods_project.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end
- 重建构建pod
rm -rf ~/Library/Developer/Xcode/DerivedData/ pod deintegrate pod instsall pod update