插件

示例 | 文档


一个简单的 Swift 应用程序插件框架。

加载动态库并动态调用其函数。

示例

Plugin.swift

@_cdecl("loadPlugin")
public func loadPlugin(_ data: UnsafeMutablePointer) -> Int32 {
  print("Plugin was loaded!")
  return 0
}

@_cdecl("somePluginFunction")
public func somePluginFunction() {
  print("Called some library function")
}

Main.swift

let plugin = Plugin(name: "Plugin", location: URL.currentDirectory())
// output: Plugin was loaded!
typealias SomePluginFunction = @convention(c) () -> ()
let pluginFn: PluginFunction<SomePluginFunction> = plugin.loadFunction(name: "somePluginFunction")!
pluginFn.function()
// output: Called some library function

我们可以使用 Swift Package Manager 编译上面的 Plugin.swift 文件,通过为 Plugin 目标定义一个库产品

.library(
  name: "Plugin",
  type: .dynamic,
  targets: ["Plugin"]
)

更多示例,请参阅 EXAMPLES.md

日志记录

该库还支持使用 swift-log 进行一些基本的日志记录。