M1 mac编译工程for architecture arm64报错

in /Users/xxx/Desktop/svn/xxxx/Pods/YYKit/Vendor/WebP.framework/WebP(libwebpencode_la-config.o), building for iOS Simulator, but linking in object file built for iOS, for architecture arm64

第一种解决方法就是使用Rosetta方式打开Xcode,使用的还是x86的模拟器,发挥不出来M1的编译速度。

第二种:
1.在build settings里面先设置excluded archs, 只设置any iOS simulator sdk = arm64,只排除模拟器的arm64架构,如果在debug下面直接配置,会连真机也排除arm64架构,导致真机编译不过。(设置arm64时,碰到输入无效的,也不展示的,多输入几个在删除后正常。)


5911679999409_.pic.jpg

2.在user-defind下面设置EXLUDED_ARCHS,原理同上。


5921679999433_.pic.jpg
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      #排除模拟器用arm64 当在 M1 机型上,排除了模拟器的 arm64 架构后,模拟器还是会以 arm64 的方式运行,但是模拟器中的app是以 x86 的方式运行的
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
    end
  end
end

拓展:
1.Architectures
Xcode 通过Architectures指定工程被编译成,可支持的哪些指令集类型。在这其中,支持的指令集如果越多,编译出的数据包也就会越大,对应的生成的二进制包ipa就会越大。

2.Valid Architectures
Xcode 通过Valid Architectures来限制可能被支持的指令集范围,Xcode 最终编译出来的二进制包类型也是从这些类型产生。对于编译出哪种指令集的包,是由Architectures和Valid Architectures的交集来确定的,所以不能为空

3.EXCLUDED_ARCHS
剔除的架构,最终支持的夹头需要这几个中合来来处理。

假如Architectures支持的arm指令集为armv7,armv7s,而对应的ValidArchitectures支持的指令集为armv7s,arm64,那么Xcode生成的二进制包指令集为armv7s。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。