一个简单的 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 进行一些基本的日志记录。