xattr -cr /Applications/SwiftUIFX.app
命令来解除应用的隔离(参见 #4)。至少打开一次该应用,以允许其运行。/Applications/Final Cut Pro.app/Contents/PlugIns/MediaProviders/MotionEffect.fxp/Contents/Resources/Templates.localized/Generators.localized/
中。type
设置为 .dynamic
。// swift-tools-version: 6.0
import PackageDescription
let package = Package(
name: "MyVideoOverlay",
platforms: [.macOS(.v13)],
products: [.library(name: "MyVideoOverlay", type: .dynamic, targets: ["MyVideoOverlay"])],
targets: [.target(name: "MyVideoOverlay")]
)
@_cdecl("createView")
函数将其公开给插件。import SwiftUI
@_cdecl("createView") public func createView() -> UnsafeMutableRawPointer {
return Unmanaged.passRetained(
AnyView(MyView()) as AnyObject
).toOpaque()
}
struct MyView: View {
var body: some View {
Text("Hello World")
}
}
#Preview {
MyView()
.frame(width: 1920, height: 1080)
}
注意
SwiftUIFX Mac 应用不会自动更新,因此任何更新都需要从最新版本手动下载。
要在你的 SwiftUI 视图中访问环境变量:
let package = Package(
name: "MyVideoOverlay",
platforms: [.macOS(.v13)],
products: [.library(name: "MyVideoOverlay", type: .dynamic, targets: ["MyVideoOverlay"])],
dependencies: [.package(url: "https://github.com/finnvoor/SwiftUIFX.git", branch: "main")],
targets: [.target(name: "MyVideoOverlay", dependencies: [.product(name: "SwiftUIFX", package: "SwiftUIFX")])]
)
import SwiftUIFX
Environment
属性包装器访问环境变量。@Environment(\.timelineTime) var timelineTime: CMTime
@Environment(\.timelineTimeRange) var timelineTimeRange: CMTimeRange
@Environment(\.generatorTimeRange) var generatorTimeRange: CMTimeRange
注意
查看 Examples 目录,其中包含可以与 SwiftUIFX 一起使用的示例包。
swift build -c release --arch arm64 --arch x86_64
。SwiftUIFX.xcodeproj
。感谢 Arclite/Halloween2024 演示了如何从 dylib 加载 SwiftUI 视图。