Flutter Plugin:在 iOS 和 MacOS 之间共享代码
Posted
技术标签:
【中文标题】Flutter Plugin:在 iOS 和 MacOS 之间共享代码【英文标题】:Flutter Plugin: share code between iOS and MacOS 【发布时间】:2021-12-30 08:54:30 【问题描述】:我在插件的根目录中有一个公共目录,其中包含应该由 ios 和 MacOS 共享的代码。我将两者的.podspec
文件中的source_files
更改为指向公共目录:s.source_files = '../common/Classes/**/*'
,
但是现在当我构建任何一个 ios/macos 示例时,构建失败并显示找不到插件导入的错误。
/Flutter/GeneratedPluginRegistrant.swift:8:8: error: no such module 'plugin_name'
这是在 iOS 和 Macos 之间共享代码的正确方式吗?我该如何解决这个问题?
【问题讨论】:
【参考方案1】:这似乎不是在 iOS 和 MacOS 之间共享代码的正确方式。 相反,我应该做的是:
-
保持
.podspec
文件不变。
在插件代码库的根目录下创建一个名为 apple 的目录(名称无关紧要)。
将通用代码移至步骤 2 中创建的目录。
从ios/Classes
和macos/Classes
为每个公共代码文件创建符号链接(假设在相应目录中):
ln -s ../../apple/Classes/SwiftSomePlugin.swift SwiftSomePlugin.swift
就我而言,我只有一个文件,但如果您有更多文件,则需要为每个文件创建符号链接。
最终结果应该是这样的:
├── apple
│ └── Classes
│ └── SwiftSomePlugin.swift
├── ios
│ ├── Assets
│ ├── Classes
│ │ ├── SomePlugin.h
│ │ ├── SomePlugin.m
│ │ └── SwiftSomePlugin.swift -> ../../apple/Classes/SwiftSomePlugin.swift
│ └── some.podspec
├── macos
│ ├── Classes
│ │ └── SwiftSomePlugin.swift -> ../../apple/Classes/SwiftSomePlugin.swift
│ └── some.podspec
现在运行构建,它应该会成功。
【讨论】:
以上是关于Flutter Plugin:在 iOS 和 MacOS 之间共享代码的主要内容,如果未能解决你的问题,请参考以下文章
颤振flutter_webview_plugin错误[NSNull长度]:无法识别的选择器发送到ios上的实例