【发布时间】:2016-07-08 19:57:50
【问题描述】:
我有一个 Swift 框架,我们将其编译并分发给第 3 方开发人员。我想在项目中包含一些 C 代码,但我能够使其工作的唯一方法是将 C 标头导入我的框架的标头并将 C 标头设置为公共。这会将所有 C 代码暴露给第 3 方开发人员,这不是我们想要的。
我可以在网上找到的有关如何执行此操作的所有内容都是此方法的变体:https://spin.atomicobject.com/2015/02/23/c-libraries-swift/
但此方法的警告是“请注意,您使用此技术构建的任何框架的使用者也必须将模块添加到他们的 Swift 搜索路径中。”我们已经尝试过了,果然我们的第 3 方开发人员收到了一个错误 Missing required module 'CGeodesic',这是我们定义的指向 C 标头的模块。
我们如何才能将 C 代码直接编译到我们的框架中,同时保持代码的私密性,并且不需要第 3 方开发人员更改他们的构建设置以使其工作?我不介意在我们的项目中设置这些子模块,但最终我希望它直接编译成一个单一的平面框架二进制文件,没有动态链接或搜索路径或类似的东西。
编辑
该项目是 C 代码与 Swift 代码并行。我的项目中有一个子目录,如下所示:
- 测地线/
- 测地线.h
- Geodesic.c
- Geodesic.swift
Swift 文件封装了 C 代码,使其更易于使用。我在该目录中也有一个 module.modulemap 文件,但就像我之前所说的那样,它不起作用。我更愿意将 C 代码与我的 Swift 代码并排保存,但我愿意放弃它以解决这个问题。
【问题讨论】:
-
您当前的设置是什么? C 代码与 Swift 代码并列?
-
developer.apple.com/library/ios/documentation/Swift/Conceptual/…。这有帮助吗? C 代码是 Objective-C,看起来可以用 C 和 Swift 混合编写一个框架,并且在用户看来就像是用单一语言编写的一样。我自己还没试过。
-
@OmniProg 这就是我们目前正在做的事情。该方法的问题在于它必须公开所有这些标头,这是我们试图避免的。
标签: c xcode swift llvm ios-frameworks