macOS基础App Intent在快捷指令中触发内部错误,求排查
我在macOS应用中开发了一个基础的App Intent扩展,仅用于接收两个参数,但在快捷指令(Shortcuts)中运行时始终报错:操作“Compare”无法运行,因为发生了内部错误。
相关代码如下:
struct CompareIntent: AppIntent { static let title = LocalizedStringResource("intent.compare.title") static let description = IntentDescription("intent.compare.description") static let openAppWhenRun = true @Parameter(title: "intent.compare.parameter.original") var original: String @Parameter(title: "intent.compare.parameter.modified") var modified: String func perform() async throws -> some IntentResult { return .result() } }
可能的问题及解决方法
本地化字符串未配置:代码中使用了
LocalizedStringResource和带本地化键的IntentDescription,如果项目中没有对应的本地化文件(如Localizable.strings)或未在文件中添加对应键值对,系统无法解析这些字符串会触发内部错误。
解决:检查项目的本地化文件,确保intent.compare.title、intent.compare.description、intent.compare.parameter.original、intent.compare.parameter.modified这些键都有对应的字符串值;或者暂时替换为硬编码字符串测试,比如static let title = LocalizedStringResource("Compare")。App Intent注册不完整:需要确保App的
Info.plist中正确配置了App Intent相关项,或通过@main入口的App结构体注册该Intent。另外openAppWhenRun = true时,要保证主App启动过程无崩溃,否则会导致Intent执行失败。
解决:在App的主结构体中添加注册代码:@main struct YourApp: App { var body: some Scene { WindowGroup { ContentView() } } init() { IntentConfiguration(for: CompareIntent.self) { intent in // 可选配置逻辑 } handling: { intent in return .result() } } }参数未设置默认值:虽然String类型参数理论上支持空值,但部分场景下快捷指令可能需要明确默认值才能正常传递参数。
解决:给参数添加默认值:@Parameter(title: "intent.compare.parameter.original") var original: String = "" @Parameter(title: "intent.compare.parameter.modified") var modified: String = ""缓存或环境问题:Xcode的Derived Data缓存、快捷指令App的缓存都可能导致异常。
解决:清理Xcode的Derived Data(Xcode > Settings > Locations > Derived Data),重启Xcode和快捷指令App,重新安装测试App。
内容的提问来源于stack exchange,提问作者Nickkk

