【发布时间】:2020-11-06 16:00:52
【问题描述】:
我想从主要目标中的 Objective-c 代码访问静态库中的 Swift 代码。
通常我必须将生成的 -swift.h 文件导入主目标中的静态库。但问题是Xcode在/DerivedData目录下的/Build文件夹中生成<ProductName>-Swift.h文件,而不是在常规的/include目录下。这意味着 Xcode 无法自动找到它。相反,唯一的解决方案似乎是将带有构建时复制脚本的-swift 复制到该位置。
这适用于动态框架,但我希望尽可能避免添加另一个动态框架的启动时间损失。
设置 (test project available here)
-
混合 Objc/Swift 主要目标
-
混合 Objc/Swift 静态库
问题
从主要目标中的 Objective-C 代码,到达静态库中的 swift 代码。 尝试导入静态库时遇到的错误是:
尝试的解决方案
我发现的唯一解决方案是有一个 复制阶段脚本(建议 here)将生成的静态库的 -swift.h 标头复制到主要目标的位置可以找到。在我看来,这不是一个非常稳定的解决方案,因为它取决于 Xcode 在构建时放置此文件的内部工作原理。归档项目时位置也不同。
我试图在静态库中定义我自己的模块映射(如建议的here),但没有设法让它工作。最后我的模块还是没有被主目标找到。
【问题讨论】:
-
我倾向于将库视为来自第 3 方,并将其移动到已知的库/标题位置。然后我会使用库并在我的主项目中包含路径来找到它。自动正确放置文件可能是库项目中构建后脚本的一部分。
标签: objective-c swift xcode static-libraries