SwiftUIFX

card

使用说明

  1. SwiftUIFX 应用 移动到“应用程序”文件夹,并运行 xattr -cr /Applications/SwiftUIFX.app 命令来解除应用的隔离(参见 #4)。至少打开一次该应用,以允许其运行。
  2. 解压缩 SwiftUIFX.zip,并将 SwiftUIFX 目录放置到 /Applications/Final Cut Pro.app/Contents/PlugIns/MediaProviders/MotionEffect.fxp/Contents/Resources/Templates.localized/Generators.localized/ 中。
  3. 确保你已安装 Swift 工具链,并创建一个新的 Swift 包。确保包的库名称与包名称匹配,并将库的 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")]
)
  1. 在你的包中创建一个 SwiftUI 视图,并通过添加 @_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)
}
  1. 创建或打开一个 Final Cut Pro 项目,并从资源库中的“Generators>SwiftUIFX”类别将一个“SwiftUI View”生成器拖到时间轴上。
  2. 选择该生成器,导航到生成器检查器,并将你的 Swift 包的顶级目录拖到“Package Path”文本字段中。
  3. 按下“编译”按钮以编译你的视图。它现在应该显示在你的视频时间轴中。
  4. 每当你更改你的包时,都需要再次按下“编译”按钮。

注意

SwiftUIFX Mac 应用不会自动更新,因此任何更新都需要从最新版本手动下载。

环境变量

要在你的 SwiftUI 视图中访问环境变量:

  1. 将 SwiftUIFX 添加为你的包的依赖项。
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")])]
)
  1. 在你的 SwiftUI 视图中导入 SwiftUIFX。
import SwiftUIFX
  1. 使用 Environment 属性包装器访问环境变量。
@Environment(\.timelineTime) var timelineTime: CMTime
@Environment(\.timelineTimeRange) var timelineTimeRange: CMTimeRange
@Environment(\.generatorTimeRange) var generatorTimeRange: CMTimeRange

注意

查看 Examples 目录,其中包含可以与 SwiftUIFX 一起使用的示例包。

开发

  1. 克隆该存储库。
  2. 在存储库的顶层运行 swift build -c release --arch arm64 --arch x86_64
  3. 更改 Plugin 的构建脚本阶段(“Copy and Code Sign FxPlug.framework”和“Copy and Code Sign PluginManager.framework”)中的代码签名标识。
  4. 打开 SwiftUIFX.xcodeproj

鸣谢

感谢 Arclite/Halloween2024 演示了如何从 dylib 加载 SwiftUI 视图。