PAYATHON 2026

如何让 Shortcuts 的 AppIntent 接收视频输入?

数据小陈

结论

目前的现象更像是 Shortcuts 传入的视频值没有映射为 AppIntent 可接收的 IntentFile。仅把变量改成 [IntentFile] 还不能解决问题。现有结果不足以判断原因是参数声明、Shortcuts 的类型转换,还是特定系统环境下的兼容问题。

单个 IntentFile 参数没有接受当前输入。数组参数虽然通过了输入步骤,实际收到的文件数却是 0。添加“Save File”后行为没有变化,说明单独增加这一步并没有让传给 action 的值变成可读取的文件输入。

建议的排查步骤

先用单个 IntentFile 参数做最小验证,避免数组参数让“接受了输入”和“实际收到文件”这两件事混在一起:

struct ImportVideoIntent: AppIntent {
    static var title: LocalizedStringResource = "导入视频"

    @Parameter(title: "视频")
    var video: IntentFile

    func perform() async throws -> some IntentResult {
        return .result()
    }
}

然后分别测试两种输入来源:

  1. 在 Shortcuts 中使用 Files 里的一个视频文件传入该 action。
  2. 使用 Photos 的“Select Photos”选择视频,再传入同一个 action。

如果 Files 输入成功、Photos 输入失败,问题就集中在 Photos 输出到该 action 的类型转换或传值路径上。此时可以检查连接到 action 的是否确实是“Save File”产生的文件结果,而不是原始的 Photos magic variable。如果已经确认传入的是保存步骤的输出,现有信息仍不足以确定哪种转换方法可用;还需要核对设备系统版本、action 的参数定义,以及 Shortcuts 中实际提供的变量类型。

如果 Files 输入也失败,先检查 action 是否声明并暴露了预期的 IntentFile 参数,再重新添加该 action 进行对照。等确认单个视频能成功传入后,再测试数组参数。

关于 Base64

目前的描述只表明 Base64 字符串方案遇到了数据量限制,没有给出具体上限,因此不适合据此设定固定大小阈值。视频体积较大时,应优先排查文件输入的传递链路。Base64 目前还不能作为已验证的替代方案。

注意事项

[IntentFile] 的 .count 为 0,表示当前调用没有向数组交付文件,不能据此判断视频文件本身为空。现有信息也不能证明所有 Photos 视频都无法传入。通过 Files 与 Photos 两种来源进行对照测试,才能缩小问题范围。

备注:内容仅供参考。