美文网首页
iOS 库和M1进程

iOS 库和M1进程

作者: asaBoat | 来源:发表于2022-05-05 12:48 被阅读0次

    问题

    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

    相关文章

      网友评论

          本文标题:iOS 库和M1进程

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