Swift插件架构

我正在寻找一种在 Swift中的插件架构中实现的方法.

用例

一个应用程序,fx. CLI,有一个文件夹,可以在其中放置插件,并在应用程序启动时加载.

要求

>能够定义插件的协议或协议集
必须或可以坚持.
> Pure Swift.
>反思给定插件实现的协议.
>在应用程序启动时动态加载.
>与委托模式沟通.
>插件开发人员应该能够导入协议,实现它们,编译并将二进制文件放在插件文件夹中.

我试过的

我已经使用Processto启动一个可执行文件,我也可以添加参数.
但这并不符合我的要求.

我遇到了这个可以完成的post,但是这需要使用NSBundle和Objective-C,所以这也没有用.

我真的不确定如何解决这个问题.任何帮助或指向正确的方向将不胜感激.

Swift目前没有稳定的ABI,所以你不能依赖原生接口. (预计这将由Swift 4解决.)

我现在可以想到两个选项,但两者都依赖于在主机和插件之间定义某种通信协议.如果不能使用Objective-C,您还必须自己实现自己的要求(功能内省等).

>降低到C ABI.对于您需要的每个函数,使用@convention(c)注释在Swift的被调用端实现它,并在调用者一侧在标题中声明它以进行外部链接.您将无法实现两次函数,因此您应该定义一个基于回调的API,插件将自己注册到该API中.
>定义一个(例如,基于套接字的)通信协议,并编写要在每个插件中导入的Swift源文件.使插件可执行,在主机应用程序启动时启动通信.

我个人更喜欢选项2,因为它不需要与链接器混合等等,并且您可以为插件的使用定义Swift类型和函数.此外,由于插件是分叉子,它可能会崩溃而不会影响主机.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...