iOS 库和M1进程

2022-05-05  本文已影响0人  asaBoat

问题

image.gif

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

image.gif

测试2

正常的源码工程(非Excluded: arm64 )
运行(编译)模式:模拟器
模拟器进程:Apple( Rosetta 方式 => intel)
App进程类型:Apple

image.gif

分析

在上述情况下,经测试:模拟器运行模式不影响 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库结果如下:

image.gif

其他测试

Excluded: arm64
运行(编译)模式:真机设备
App 无法运行 64 架构设备

image.gif

正常的源码工程(非Excluded: arm64 )
运行模式(编译):真机设备
App进程类型:Apple?

image.gif
image.gif
上一篇下一篇

猜你喜欢

热点阅读