如何在 Flutter 插件的 Swift 编写的 iOS 部分中使用 Objective-C 框架
Posted
技术标签:
【中文标题】如何在 Flutter 插件的 Swift 编写的 iOS 部分中使用 Objective-C 框架【英文标题】:How to use Objective-C framework in a Swift written iOS part of a flutter plugin 【发布时间】:2019-06-25 20:25:44 【问题描述】:在 Flutter 插件中,我想在我的 ios 部分中使用 Objective-C 框架,用 swift 编写,然后在使用 Swift 作为 iOS 语言的 Flutter 项目中使用它。经过一些研究(我不是 iOS 开发人员)我发现我想做的可以通过在 swift 和 Objective- 之间导入 充当桥接标题的文件中的标题来实现C,但是如果在 Podfile 中定义了use_frameworks!
(据我所知),flutter 插件中的桥接头是自动创建的,而且我不明白如何从Objective-C (我认为是通过在 podspec 中定义一些东西,但我不知道) pod in that。事实上,如果我尝试从 Objective-C pod 中导入某些内容,XCode 会抱怨(以及编译器)会说它 "doesn't find the module with name <framework name>"
或者它无法构建 Objective-C代码。如果我尝试在 Objective-C 插件中使用该框架,我可以使用它,但前提是我从项目 Podfile 中注释掉 use_frameworks!
最后,我想知道是否可以在 Swift 插件中使用 Objective-c 外部框架来开发 Flutter 插件。
【问题讨论】:
这个运气好吗?我在同一条船上...... 嗯,不是真的。最后我发现可以从播客文件中导入不同的 pod,问题是当有一些东西是不能用命令“podspec.dependency 'SocketRocket'
即可从您的项目中获取依赖项。我建议您查看starflut
包https://pub.dev/packages/starflut。但很可能你想要完成的事情在另一个包中更简单地为你完成,但如果你完全一心想要自己做,我认为你应该试试这个包
【讨论】:
嘿塞缪尔!谢谢你的建议,我一定会看看这个包,但我认为它没有帮助,我有 2 个问题针对同一个论点,这两个问题都有 10 多票但没有答案: ( . 不幸的是,我不得不做的事情是引用一个只提供本机代码的付费库,仅此而已,我希望从中创建一个插件,但我刚刚结束将它绑定到应用程序代码!跨度> 【参考方案2】:如果对于某些开发人员来说这仍然是一个相关问题,这里是可能的解决方案。
在插件的.podspec
文件中,将此字符串粘贴到远程框架
Pod::Spec.new do |s|
...
s.dependency 'GoogleWebRTC'
end
或者,对于本地框架,粘贴这些
Pod::Spec.new do |s|
...
s.preserve_paths = 'WebRTC.framework'
s.xcconfig = 'OTHER_LDFLAGS' => '-framework WebRTC', 'ENABLE_BITCODE' => 'NO'
s.vendored_frameworks = 'WebRTC.framework'
end
【讨论】:
嗨,伙计,谢谢您的回答,如果您开始收到一些赞成票,请在 cmets 中联系我,这样我会给您分配最佳答案。不幸的是,我无法再验证它了,因为我很久没有在 Flutter 中编码了。以上是关于如何在 Flutter 插件的 Swift 编写的 iOS 部分中使用 Objective-C 框架的主要内容,如果未能解决你的问题,请参考以下文章
如何从用 Swift 编写的 Flutter 平台特定代码启动 ViewController?
Flutter 插件问题(引入插件同时存在静态库与swift)
如何在 Flutter 中启用对现有项目的 Swift 支持