制作混合的Objective-C和Swift框架

nap*_*aza 10 macos frameworks objective-c ios swift

所以我开始将Swift添加到现有的Objective-C框架中.

坏消息是它做起来相当简单,看起来好像在起作用.这意味着我获得了Swift代码来查看obj-c类,甚至可以轻松地构建它们.我设置了一个桥接头添加了我需要它,更改了模块名称等,基本上一切都工作正常.

后来我意识到了一些事情.

首先,你不应该在框架中有一个桥接头.事实上,我试过一个测试项目,它不会让我.但是在我的实际项目中有人允许它.

它肯定会开始蠢蠢欲动.我认为因为它似乎包含了Swift生成的头文件中的桥接头,或者可能包含了如何导入伞头的其他内容.我得到了swift自动使用Umbrella标头的简单性,除了我需要另一个标头,原因有几个.

  1. 从框架内导入我不想成为公共框架头的私有头.
  2. 导入我们链接到的其他框架并需要访问公共头文件.我不想在这个框架的伞头中导入这些其他框架.

我在这种情况下面临几个问题.

外部目标无法使用加载此框架@import.我也无法直接导入框架的桥接头.这意味着我无法从另一个目标访问Swift代码.我写了一个访问者类,在这种情况下,这不是什么大问题.直到我意识到包含一个测试用例目标,所以如果没有在框架目标中的某种测试实现,我就无法有效地测试这些代码.即使我的测试目标中的快速测试也无法访问Swift.

有没有办法做到这一点?TL:DR"我可以拥有一个混合的Swift/Obj-c框架,它可以在外部访问Swift + Obj-c并保持其部分对象的私有性吗?"

小智 0

我解决了。

我将 public 添加到类和协议中,以便我可以访问 Objective-C 中的 swift 代码