如何在不添加flutter sdk作为依赖项的情况下通过dart-ffi添加iOS支持



我正在开发dart_ping包,尽管它目前被标记为支持iOS,但实际上并不支持iOS。这是由于pub.dev检测支持的平台的方式造成的。我已经提交了关于dart-sdk回购的问题。

尽管如此,我还是想添加iOS支持,同时保留对dart native的支持。现在,dart_ping通过调用主机操作系统的ping二进制文件来工作。ping二进制文件在Windows、macOS、Linux和Android上可用,但在iOS上不可用。

目前在iOS上执行ping的方法使用本机Objective-C代码,并通过方法通道或ffi调用它们。由于方法通道是一个flutter功能,而不是dart功能,因此使用它们需要dart_ping依赖于flutter sdk,这将阻止它在dart本地应用程序(可能是服务器端(中使用。

另一方面,Ffi是飞镖的原生功能,可以做我想做的事。然而,我似乎找不到一种方法来将用于ping的iOS框架/库/二进制文件包含在我的dart_ping包中,从而指示flutter应用程序将其包含并链接到iOS目标/运行程序。

有没有办法在我的包中保留对dart的本地支持,同时支持iOS需要额外的非dart框架的边缘情况?即使是联邦插件也依赖于flutter sdk。在我看来,我们需要一个相当于联邦插件系统的纯dart。

TLDR:如何在不依赖flutter sdk的情况下将预编译的iOS框架或二进制文件添加到dart包中,并仅在iOS上使用该包时调用它?

对于只为软件包的Flutter用户添加iOS支持的特定情况,但通过拥有一个依赖于您的Dart软件包的Flutter插件包,可以将软件包保持为纯Dart而不依赖于Flutter SDK。

在纯Dart软件包中,您可以对本机iOS库进行FFI调用,但实际上是Flutter插件包,它根据Flutter文档提供本机iOS库来使用FFI。

当然,您需要在纯Dart软件包的文档中非常清楚地表明,对于iOS,它只能通过";包装器";插件包。

不幸的是,这是一种相当复杂的方法,但到目前为止,我不知道有什么更好的方法可以实现这一点。

本期评论中对这一主题进行了进一步的讨论,截至今天,评论仍然开放。

相关内容

最新更新