问题
M1进程运行模式:
•Apple
•Intel
swiftmodule架构种类(部分):
•arm64-apple-ios-simulator
•arm64-apple-ios
•x86-apple-ios-simulator
•传统arm64(以下简称arm64)
•传统x86(以下简称x86)
提醒:
x86-apple-ios-simulator 和 传统x86 说法相同
arm64-apple-ios 和 传统arm64 说法相同
测试
在Xcode正常默认设置下、运行在Apple模式下
测试1
正常源码工程 (Excluded: arm64 ,Pod 工程 和 项目工程同步 )
运行(编译)模式:模拟器
模拟器进程:Apple( Rosetta 方式 => intel)
App进程类型:Intel
测试2
正常的源码工程(非Excluded: arm64 )
运行(编译)模式:模拟器
模拟器进程:Apple( Rosetta 方式 => intel)
App进程类型:Apple
分析
在上述情况下,经测试:模拟器运行模式不影响 app运行方式。
那么 经测试,默认情况下,app运行模式 受xcode运行模式影响?
•默认情况下,Xcode 运行在 Apple模式,build Active Architecture Only时,Xcode只选择 arm架构为Active(活跃)架构, 只编译 arm架构的动态库(例如:arm64-apple-ios-simulator);当excluded arm64之后,Xcode只选择 x86架构为Active(活跃)架构(例如:x86-apple-ios-simulator,和传统意义上的x86架构一样);
•通过Rosetta 方式运行Xcode,build Active Architecture Only时,Xcode只选择 x86 架构为Active(活跃)架构, 只编译 x86架构的动态库;
在使用古老的静态库时,其架构 包含 x86、arm64(用于真机),没有arm64-apple-ios-simulator,因此运行模拟器时,编译器只能选择链接 静态库 x86 架构部分,形成app macho,因此就需要查找 x86架构的动态库进行链接,整个app也将运行在intel模式下,而x86-apple-ios-simulator的动态库(编译阶段产出)是没有的,所以报错。
解决方案
•Excluded arm64
•Rosetta 方式运行Xcode
•全架构编译Pod库
•三方库更新架构
全架构编译Pods库结果如下:
其他测试
Excluded: arm64
运行(编译)模式:真机设备
App 无法运行 64 架构设备
正常的源码工程(非Excluded: arm64 )
运行模式(编译):真机设备
App进程类型:Apple?