我正在构建一个Siri aka Intents扩展.我知道我可以在启动后将调试器附加到正在运行的进程,但是,我从未看到过我的进程.我确实拥有我的应用程序设置为激活的授权,并且扩展程序必须至少运行一段时间,Siri正在显示明确的响应.
通过Apple文档,您应该使用Siri作为主机应用程序运行扩展方案.但是,如果我尝试在设备上没有任何反应,那么它正在等待永久地附着.Apple提到第一个连接可能需要" 几分钟 ",但不是几个小时......
知道我哪里出错或者如何实现与调试器的连接?或者至少有一些控制台输出?
我构建Intents扩展,我正在处理INSendMoneyIntent,我说:
送25欧元给约翰史密斯
应用程序确认后的响应
这是您的<Your_App>付款,价格为25.00美元.你想发送吗?
Intent包含正确的货币iso 3代码 - EUR,那么为什么siri在付款确认中显示错误的货币?
回归意图
INSendPaymentIntentResponse *reponse = [[INSendPaymentIntentResponse alloc] initWithCode:INSendPaymentIntentResponseCodeReady userActivity:userActivity];
completion(reponse);
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我希望能够告诉Siri:
所以我启用了Siri功能,添加了一个目标,实现了INStartWorkoutIntentHandling
(以及其他)委托方法,一切正常.
我现在可以说Start a workout with MyAppName
.PERFEKT!
现在我想告诉她类似Start an activity using MyAppName
甚至是什么Start a hike using MyAppName
.
所以我去了,并添加了AppIntentVocabulary.plist
这样的东西:
那里的快速问题......词汇项目标识符...如果工作 - 远足fe应该用于开始,结束,暂停,恢复,取消...标识符是否应该对所有人都相同?
现在我面临三个问题.
1.我可以告诉Siri的Start a hike
,它会工作,她会问我,我应该使用哪个应用.我告诉她Start a hike using MyApp
,她会告诉我她在Apple Music上找不到它?!?我勒个去?
2.如果我将单词添加Activity
到我的词汇表中,她将只打开iOS活动应用程序...永远不会问我是否可能要打开我的应用程序.
3.在提交我得到漏字的警告一样的一拳No example phrase was provided for INStartWorkoutIntent in the "en" language
,我也有!要么Sample phrase "Start a Hike using MyAppName" was not classified as a INStartWorkoutIntent intent
如果有人能向我展示一个AppIntentVocabulary.plist
与siri和iTunes Connect配合使用的文件的有效样本,我将非常高兴!
我正在尝试使用Intents框架创建自定义CLPlacemark。我正在文件开头导入“意图”。
我找到了这个解决方案:
let waypointLocation = CLLocation(latitude: 50.00, longitude: 8.00)
let waypointName = "Some Name"
let w1 = CLPlacemark.init(location: waypointLocation,
name: waypointName,
postalAddress: nil)
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码给了我以下错误信息:
对成员'init(placemark :)'的引用不明确
任何想法有什么问题吗?
说明文件:
我正在处理这样的自定义意图操作:
internal func handle(intent: UsageIntent, completion: @escaping (UsageIntentResponse) -> Void) {
completion(UsageIntentResponse(code: .continueInApp, userActivity: nil))
}
Run Code Online (Sandbox Code Playgroud)
它曾经用于打开应用程序,但现在显示了一个新的 Siri 屏幕,上面会显示You'll need to continue in [App]
并为您提供一个用于打开应用程序的按钮。
这是新行为吗??我错过了什么吗?谢谢!
Siri 意图:是否可以要求用户在执行之前解锁 iPhone?我不希望 Intent 导致相应的 iOS 应用程序启动。
如果我取消选中“支持后台执行”框(如下所示),Siri 会要求解锁设备,但它也会启动应用程序,但我不希望这样。
我有一个带有意图扩展目标的 SwiftUI 应用程序。我还有一个位于共享应用程序组的核心数据存储。
Intents 扩展可以使用newBackgroundContext()
Shortcuts 应用程序成功地将数据写入商店。我的 SwiftUI 应用程序可以从应用程序组中读取数据,viewContext
但只有当我强制退出应用程序并重新打开它时。
我想我需要一种方法来让我的应用程序知道它已在不同的上下文中更新,但我不确定该怎么做?
我试过context.automaticallyMergesChangesFromParent = true
在应用程序委托中设置并在 SwiftUI 视图中添加context.refreshAllObjects()
,onAppear
但这似乎没有任何区别。
mergeChanges(fromContextDidSave:)似乎很有希望,但我不确定如何获取通知。
我是 Core Data 的新手并且很困惑,所以任何指向正确方向的指针都会很棒,谢谢!
这是我当前代码的消毒版本:
应用委托
lazy var persistentContainer: NSCustomPersistentContainer = {
let container = NSCustomPersistentContainer(name: "exampleContainerName")
container.loadPersistentStores { description, error in
if let error = error {
print("error loading persistent core data store")
}
}
return container
}()
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save() …
Run Code Online (Sandbox Code Playgroud) 我无法将一些基本的 SiriKit 操作添加到 macOS Monterey 中的 macOS 应用程序中。为了测试这一点,我创建了一个新项目,使其成为带有 Storyboard 的 macOS 应用程序。然后我添加了一个意图定义文件,并添加了一个基本意图,没有输入/输出。我将意图名称添加到目标“常规”配置中的“支持的意图”中。
当我构建并运行应用程序时,快捷方式不会显示在 Apple Shortcuts 应用程序中。我尝试在“签名和功能”中查找“Siri”功能,但它没有列出(与新的 iOS 应用程序相比)。
我不确定我在这里缺少什么。希望得到一些帮助。
顺便说一句,我在 macOS Monterey RC 上使用 Xcode 13.1。
这就是我的自定义意图的样子。