ios - Sirikit 自定义意图和 iOS 13.4.1 的国际化问题

标签 ios swift iphone siri sirikit

我在 iOS 应用程序中使用 Sirikit 实现了两个自定义意图。当我开发它们时,我的 iPhone 上安装了 iOS 13.3,我的意图之一是有一个 Siri 对话框提示,要求输入一个参数的值。所有应用程序都被翻译成英语和西类牙语,并且自定义意图在两种语言中都能很好地工作。

当我将 iPhone 更新到 iOS 13.4.1 时,我的自定义意图开始出现以下问题(我看到了这两个问题,具体取决于安装/测试/设备):

  • Siri 询问参数值,就好像我不会放置任何带有标准短语“您想要 param 的值是多少?”的自定义对话框一样。 (或多或少)
  • Siri 用英语而不是西类牙语询问 Siri 对话提示,即使 Intent 和应用程序的其余短语和 Siri 响应已正确翻译为西类牙语。唯一不起作用的翻译是 Siri 对话提示。

我觉得这个问题很奇怪而且很烦人。我尝试重新创建 Intent.intentdefinition 的翻译文件:Intent.strings (Base)Intent.strings (English) Intent.strings(西类牙语),我什至尝试重新创建整个自定义意图定义,但仍然遇到问题。

我还尝试更改手机上的 iOS 语言和 Siri 语言、重新启动、重新安装应用程序、意图等...

这是我的 Sirikit 扩展的 Info.plist:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
  <key>CFBundleDevelopmentRegion</key>  
  <string>$(DEVELOPMENT_LANGUAGE)</string>  
  <key>CFBundleDisplayName</key>  
  <string>InventorySearchIntent</string>  
  <key>CFBundleExecutable</key>  
  <string>$(EXECUTABLE_NAME)</string>  
  <key>CFBundleIdentifier</key>  
  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>  
  <key>CFBundleInfoDictionaryVersion</key>  
  <string>6.0</string>  
  <key>CFBundleName</key>  
  <string>$(PRODUCT_NAME)</string>  
  <key>CFBundlePackageType</key>  
  <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>  
  <key>CFBundleShortVersionString</key>  
  <string>$(MARKETING_VERSION)</string>  
  <key>CFBundleVersion</key>  
  <string>$(CURRENT_PROJECT_VERSION)</string>  
  <key>NSExtension</key>  
  <dict>  
  <key>NSExtensionAttributes</key>  
  <dict>  
  <key>IntentsRestrictedWhileLocked</key>  
  <array/>  
  <key>IntentsRestrictedWhileProtectedDataUnavailable</key>  
  <array/>  
  <key>IntentsSupported</key>  
  <array>  
  <string>NumTotalItemsIntent</string>  
  <string>SearchItemIntent</string>  
  </array>  
  </dict>  
  <key>NSExtensionPointIdentifier</key>  
  <string>com.apple.intents-service</string>  
  <key>NSExtensionPrincipalClass</key>  
  <string>$(PRODUCT_MODULE_NAME).IntentHandler</string>  
  </dict>  
</dict>  
</plist>  

有什么解决办法吗?这是 iOS 13.4 的错误吗? Siri 集成对于我正在开发的应用程序非常重要,这对我来说是一个障碍。

提前致谢!

最佳答案

根据我自己的经验,这个问题已在 iOS 13.5 beta 4 中得到解决。我刚刚在 iPhone 6s Plus 中使用 Xcode 11.5 beta 2 (11N605f) 进行了测试。

但是,仍然存在其他问题。例如,在“快捷方式”中,我的测试项目中的所有操作字符串均以英语显示,而不是本地化语言。

此外,INStringResolutionResult.confirmationRequired(with:)没有按预期工作。

我有一个函数获取用户所说的话并在数据库中查找它们,然后使用 INStringResolutionResult.confirmationRequired(with:) 与用户进行检查。 SiriKit目前只使用用户说的话,而不是我与用户核对的结果,这导致最终的代码崩溃。

更新

我刚刚收到 Apple 错误报告团队的回复。这是我现在得出的结论。

  1. 切换语言时,Siri 有时(如果不是总是)会出现使用默认句子替换开发者提供的句子的问题。
  2. 安装 Siri 配置文件并重新启动可能会解决当前设置的 Siri 上的上述问题。但如果你更改 Siri 的语言,问题仍然存在。
  3. INStringResolutionResult 的 API 存在回归。对于单个结果,open class func disambiguation(with stringsToDisambiguate: [String]) -> Self 和 open class func notificationRequired(with stringToConfirm: String?) -> Self 在 iOS 13.3 之后的 iOS 上都不起作用。 Siri 使用了一个名为“名称”的占位符,而不是实际值。

关于ios - Sirikit 自定义意图和 iOS 13.4.1 的国际化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61303894/

相关文章:

ios - 我如何在 Swift iOS 中监听来自服务器的网络数据?

ios - 移动带有 subview 的 UIView

ios - 没有在 Swift 中正确检测碰撞

xcode swift 如何拆分图像?

iphone - InitWithName 在 ViewDidLoad 之前执行可能吗?

ios - 在 iPhone 上放大背景图像

ios - 在容器 View 中,导航 Controller 的导航栏未调整大小以包含状态栏

swift - UITableview 不显示我在 swift 中作为 nib 文件制作的单元格

swift - 将字符串选择从 UIPicker 转换为 UIColor 的最简单方法?

iphone - 如何反转音频样本?