SiriKit错误:此应用程序不支持捐赠意图

时间:2018-06-12 12:20:16

标签: ios sirikit ios12

我在Xcode 10(iOS 12 Beta)中捐赠自定义意图时遇到问题。

我已经创建了一个自定义框架,该框架在我的主要应用目标和我的“订购内容”之间共享。目标

我创建了一个.intentdefinition文件,其目标成员资格设置为我的自定义框架(下面的屏幕截图)。

enter image description here

我已经嵌入了一个' Intents Extension' &安培; ' Intents UI Extension'在主要申请中。

我还添加了' OrderIntent' NSExtension-> NSExtensionAttributes->在我添加意图扩展时创建的两个info.plist文件中的IntentsSupported(截图如下)。

enter image description here

我试图捐出这样的意图:

INPreferences.requestSiriAuthorization { (status) in

        if status != INSiriAuthorizationStatus.authorized {return}

        let orderIntent = OrderIntent()
        orderIntent.product = "Test product"
        orderIntent.quantity = 2

        let interaction = INInteraction(intent: customIntent, response: nil)

        interaction.donate { (error) in
            if error != nil {2
                if let error = error as NSError? {
                    print(error)
                }
            } else {
                print("success")
            }
        }
    }

当用户点击应用中的按钮时,上述代码就会运行。

我还设置了这样的意图处理程序:

class IntentHandler: INExtension {

override func handler(for intent: INIntent) -> Any {

    switch intent {
        case is OrderIntent:
            return OrderIntentHandler()

        default:
            fatalError()
    }

    return self
}

OrderIntentHandler就像这样:

public class OrderIntentHandler: NSObject, OrderIntentHandling {

    public func handle(intent: OrderIntent, completion: @escaping (OrderIntentResponse) -> Void) {

        let orderIntentResponse = OrderIntentResponse(code: OrderIntentResponseCode.success, userActivity: nil)

        completion(orderIntentResponse)
    }

    public func confirm(intent: OrderIntent, completion: @escaping (OrderIntentResponse) -> Void) {

        let response = OrderIntentResponse(code: OrderIntentResponseCode.ready, userActivity: nil)

        completion(response)
    }
}

在设备上测试时,我收到以下错误:

  

错误Domain = IntentsErrorDomain Code = 1901"捐赠意图' OrderIntent'此应用程序不支持。请确保您有一个支持此意图的扩展程序。" UserInfo = {NSLocalizedDescription =捐赠意图' OrderIntent'此应用程序不支持。请确保您有一个支持此意图的扩展程序。}

我无法理解为什么' OrderIntent'该应用程序不支持。

我已经在功能选项卡中启用了Siri,并请求了用户等的许可。

是否还需要采取其他措施才能让我捐赠意图?

3 个答案:

答案 0 :(得分:1)

我相信您的问题的答案恰好在您的描述中(强调我的意思):

  

我已经创建了一个.intentdefinition文件,并将 target成员身份设置为我的自定义框架

我假设执行对interaction.donate的调用的代码在您的应用中,而不在共享框架中。如果是这种情况(根据your answer判断问题的解决方法),还需要从.intentdefinition文件中将主应用程序添加为目标。您将希望没有没有生成的类,因为它们已经在应用程序链接到的共享框架中。您可能会遇到问题,因为您看起来像是在单独的Xcode项目中创建了共享框架,因此其他目标不可见。

答案 1 :(得分:0)

尝试从NSExtension上的“订单意图”字符串中删除“意图”一词 - > NSExtensionAttributes - > IntentsSupported

即。您的路径将类似于NSExtension - > NSExtensionAttributes - > IntentsSupported - > Item 0 - > Order

我知道Apple Documentation表明我们应该:

  

将每个项目的值设置为意图的类名称

但对我来说,它根本不起作用。

希望能帮助你:)

答案 2 :(得分:0)

我已经能够通过将.intentdefinition文件拖放到我的应用程序文件夹以及我的自定义框架文件夹中来添加对应用程序文件夹中的CustomIntents.intentdefinition文件的引用来实现此功能(请参见下图):

enter image description here

复制文件时,我确保不要检查“如果需要复制项目”选项,以便.intentdefinition文件只存在于一个地方:

enter image description here

在设备上运行和测试后,交互成功捐赠,应用程序现在提供'订购测试产品'作为'Siri& amp;在设备设置中搜索。