【问题标题】:My swift static framework is doesn't work in OC file with iphone simulator我的 swift 静态框架在 OC 文件中无法使用 iphone 模拟器
【发布时间】:2020-07-03 04:46:12
【问题描述】:

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

它还包括所有 .swiftmodule 文件:

它适用于真实设备或真实设备和模拟器的快速文件。

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

BaseNavigationController(用swift编写),BaseViewController(用OC编写)是我的框架类,只有swift类不起作用,BaseNavigationController是UINavigationController的子类,具有“开放”级访问控制,框架' -Swift.h'文件已生成oc接口。

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

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

【问题讨论】:

    标签: ios swift static frameworks


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 太棒了!你的回答完美解决了我的问题。仔细检查发现'-Swift'文件上方有一行代码:#if 0 #elif defined(__arm64__) && __arm64__。嘿,兄弟,你在哪个文档中找到了需要复制-Swif.h文件的描述,还是官方提供了创建Swift静态库的完整文档?
    猜你喜欢
    • 2020-07-05
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多