Flutter 插件:在 iOS 和 MacOS 之间共享代码
Flutter Plugin: share code between iOS and MacOS
我在插件的根目录中有一个通用目录,其中包含应由 iOS 和 MacOS 共享的代码。我将两者的 .podspec
文件中的 source_files
更改为指向公共目录:s.source_files = '../common/Classes/**/*'
,
但是现在当我构建 ios/macos 示例中的任何一个时,构建失败并出现错误,它找不到插件导入。
/Flutter/GeneratedPluginRegistrant.swift:8:8:错误:没有这样的模块'plugin_name'
这是在 iOS 和 Macos 之间共享代码的正确方法吗?我该如何解决这个问题?
这似乎不是在 iOS 和 MacOS 之间共享代码的正确方法。
相反,我应该做的是:
- 保持
.podspec
个文件不变。
- 在插件代码库的根目录下创建一个名为 apple 的目录(名称无关紧要)。
- 将通用代码移动到步骤 2 中创建的目录。
- 从
ios/Classes
和 macos/Classes
(假设在相应的目录中)创建指向每个公共代码文件的符号链接:
ln -s ../../apple/Classes/SwiftSomePlugin.swift SwiftSomePlugin.swift
In my case I had only one file, but if you have more files, you need to create symlink per each file.
最终结果应该是这样的:
├── 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
现在 运行 构建,应该会成功。
我在插件的根目录中有一个通用目录,其中包含应由 iOS 和 MacOS 共享的代码。我将两者的 .podspec
文件中的 source_files
更改为指向公共目录:s.source_files = '../common/Classes/**/*'
,
但是现在当我构建 ios/macos 示例中的任何一个时,构建失败并出现错误,它找不到插件导入。
/Flutter/GeneratedPluginRegistrant.swift:8:8:错误:没有这样的模块'plugin_name'
这是在 iOS 和 Macos 之间共享代码的正确方法吗?我该如何解决这个问题?
这似乎不是在 iOS 和 MacOS 之间共享代码的正确方法。 相反,我应该做的是:
- 保持
.podspec
个文件不变。 - 在插件代码库的根目录下创建一个名为 apple 的目录(名称无关紧要)。
- 将通用代码移动到步骤 2 中创建的目录。
- 从
ios/Classes
和macos/Classes
(假设在相应的目录中)创建指向每个公共代码文件的符号链接:
ln -s ../../apple/Classes/SwiftSomePlugin.swift SwiftSomePlugin.swift
In my case I had only one file, but if you have more files, you need to create symlink per each file.
最终结果应该是这样的:
├── 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
现在 运行 构建,应该会成功。