美文网首页Swift学习
关于Swift5.7/Xcode14制作静态库支持架构问题

关于Swift5.7/Xcode14制作静态库支持架构问题

作者: TonyTT | 来源:发表于2023-02-13 17:22 被阅读0次
问题描述

之前按公司需求用开发一个静态库集成用,静态库是用swift开发的,在升级xcode14之前集成是没有问题的,合并包真机和模拟器都能使用。

升级xcode14之后,合并包出现了如果先编译真机后编译模拟器之后合并形成的包,拿到使用OC创建测试工程中编译模拟器可以通过,编译真机就报错,反过来如果先编译模拟器后编译真机之后合并形成的包(我这里是使用脚本自动生成合并包的不需要终端输入命令合成),拿到工程中编译真机可以通过,编译模拟器就报错。

具体错误见如下图


报错截图.png
排查问题

从上面的报错很显然是不支持的架构,开始是怀疑脚本合成的包少了一个模拟器或者真机的架构。终端输入命令查看下:


查看合并包包支持架构.png

从图中可看到两个架构都包含,但却只能编译其中一个。
回想了工程配置没有改变,但是最近升级了xcode14,会不会跟升级的xcode有关联?
于是想要尝试使用低版本的xcode去编译试试,但是我电脑系统已经升级不能使用xcode14以下的版本了,所以这个方法行不通。
然后从上面问题描述中猜测会不会因为合并包的文件被覆盖了导致只能编译成功一个架构的包
于是带着这个疑问进行继续排查...

问题原因

翻看了之前打包的版本其中header文件中有一个文件


Header中的文件.png

跟现在升级xcode14之后内容不一样。


升级xcode14之前.png 升级xcode14之后.png
升级后头部多出的#if 0 \n #elif defined(__x86_64__) && __x86_64__ 两行代码
从中可以发现x86_64就是支持模拟器的架构,缺失了支持真机的arm64架构

可以再重新编译合并一遍再看下,如果后编译模拟器会变成这样

后编译真机.png
又变成arm64了如果放到测试工程里的话就会变成模拟器编译不通过了

于是想到在后面增加一个条件 ,如下图


补充支持架构.png

再把合并包放到OC的测试工程里调试无论是模拟器还是真机都能编译成功了

相关文章

  • iOS小知识 -- 静态库(一)

    静态库静态库的介绍.a静态库的制作以及测试静态库的架构问题.framework静态库的制作以及测试边开发边制作静态...

  • iOS 静态库和动态库相关

    一、查看静态库支持架构 查看.a静态库和framework支持的架构 示例: 终端测试: iPhone真机和模拟器...

  • swift ios 静态库的实现

    1.swift不支持.a的静态库,因此只能制作.framework的静态库 2.静态库的使用 3.纯swift静态...

  • iOS ,引入静态库报错 "_OBJC_CLASS_$

    关于在工程中导入静态库报错,这个问题很常见,一般是i386,x86_64比较多,这些问题一般是架构不支持,关于这些...

  • iOS ,引入静态库报错 "_OBJC_CLASS_$_xxxx

    关于在工程中导入静态库报错,这个问题很常见,一般是i386,x86_64比较多,这些问题一般是架构不支持,关于这些...

  • ios中静态库.a的制作

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • ios中静态库.a的制作和使用

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • 制作.a与 -ObjC,-all_load的作用

    1. 使用命令 lipo -info 静态库名称 可以查看当前静态库支持的架构 2.#合并.a lipo -cre...

  • iPhone中的 armv7,armv7s,arm64,i386

    在做静态库的时候以及引用静态库的时候经常会遇到一些关于真机模拟器不通用的情况,这里简单记录一下各种设备支持的架构。...

  • iOS查看静态库下代码接口

    定位到crash后,不确定是哪个静态库引起的,需要查看。命令如下:首先确定静态库支持的架构: 打印如下 确定了静态...

网友评论

    本文标题:关于Swift5.7/Xcode14制作静态库支持架构问题

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