我在Xcode 10(iOS 12 Beta)中捐赠自定义意图时遇到问题。
我已经创建了一个自定义框架,该框架在我的主要应用目标和我的“订购内容”之间共享。目标
我创建了一个.intentdefinition文件,其目标成员资格设置为我的自定义框架(下面的屏幕截图)。
我已经嵌入了一个' Intents Extension' &安培; ' Intents UI Extension'在主要申请中。
我还添加了' OrderIntent' NSExtension-> NSExtensionAttributes->在我添加意图扩展时创建的两个info.plist文件中的IntentsSupported(截图如下)。
我试图捐出这样的意图:
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,并请求了用户等的许可。
是否还需要采取其他措施才能让我捐赠意图?
答案 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)