我的 swift 静态框架在带有 iphone 模拟器的 OC 文件中不起作用

My swift static framework is doesn't work in OC file with iphone simulator

我做了一个混合Swift和OC的静态框架,它包括架构:"armv7 i386 x86_64 arm64"。

它还包括所有 .swift 模块文件:

它适用于真实设备或在真实设备和模拟器的 swift 文件中。

但是 只有 当我在 Objective-C 文件中使用框架的 swift class 并且目标设备是 iphone 模拟器时,它会给我一个错误:

BaseNavigationController(写在swift),BaseViewController(写在OC)是我的框架class,只有swift class不行, BaseNavigationController 是 UINavigationController 的子class,具有 'open' 级别的访问控制,框架 '-Swift.h' 文件已生成 oc 接口。

为什么会报错?我仔细检查了我的项目,没有发现异常。

我的xcode版本是:版本11.5(11E608c),项目build_setting的swift版本是5.0.

这里的问题很可能是在使用的构建脚本中。 这里的问题可能是在使用 lipo 合并为设备(armv7 & arm64 架构)和模拟器(i386x86_64)架构构建的框架后,您还应该将为模拟器生成的 BaseCore-Swift.h 的内容复制到为 armv7 & arm64 架构.

生成的内容

Objective-C 需要在 BaseCore-Swift.h 文件中为 i386 和 x86_64 体系结构定义符号,以便 Swift 类 工作。执行构建后,可以在 Headers 文件夹中找到该文件。 如果您有构建脚本,您可以简单地使用 cat 命令在构建脚本中执行此复制。

这里的问题不是不包含模拟器的体系结构,而是模拟器体系结构的 BaseCore-Swift.h 文件中没有定义符号,因此 Objective-C 可以选择它们。

请随时发表评论或提出其他问题。
如果以上操作解决了您的问题,请将其标记为已接受:)