尝试提交带有 Siri 扩展的应用时,来自 App Store 的“Invalid Intent Vocabulary”错误
Posted
技术标签:
【中文标题】尝试提交带有 Siri 扩展的应用时,来自 App Store 的“Invalid Intent Vocabulary”错误【英文标题】:Error "Invalid Intent Vocabulary" from App Store when trying to submit an app with Siri extension 【发布时间】:2018-10-29 17:56:46 【问题描述】:我的应用正在使用带有 自定义 Siri 意图的 Siri 扩展,这是 Xcode 10 / ios 12 的一项新功能。我在 .intentdefinition
文件中设计了我的自定义 Siri 意图(两者都包含应用程序和扩展程序目标)。
我的自定义(非系统)Siri 意图在“Do”类别中声明。
Siri 意图还需要一个 AppIntentVocabulary.plist
文件,其中包含示例短语 https://developer.apple.com/documentation/sirikit/registering_custom_vocabulary_with_sirikit
我的AppIntentVocabulary.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>IntentPhrases</key>
<array>
<dict>
<key>IntentName</key>
<string>MyIntentName1</string>
<key>IntentExamples</key>
<array>
<string>Do stuff with foo</string>
<string>Do stuff with fu</string>
</array>
</dict>
<dict>
<key>IntentName</key>
<string>MyIntentName2</string>
<key>IntentExamples</key>
<array>
<string>Do other stuff</string>
</array>
</dict>
</array>
<key>ParameterVocabularies</key>
<array>
<dict>
<key>ParameterNames</key>
<array>
<string>MyIntentName1.someParam</string>
</array>
<key>ParameterVocabulary</key>
<array>
<dict>
<key>VocabularyItemIdentifier</key>
<string>paramName</string>
<key>VocabularyItemSynonyms</key>
<array>
<dict>
<key>VocabularyItemPhrase</key>
<string>foo</string>
<key>VocabularyItemPronunciation</key>
<string>fu</string>
<key>VocabularyItemExamples</key>
<array>
<string>Do stuff with foo</string>
</array>
</dict>
<dict>
<key>VocabularyItemPhrase</key>
<string>bar</string>
<key>VocabularyItemPronunciation</key>
<string>bur</string>
<key>VocabularyItemExamples</key>
<array>
<string>Do stuff with bar</string>
</array>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</dict>
</plist>
它构建良好并且工作正常。但是当我尝试将其提交到 App Store 时,我得到:
[传输器错误输出]:错误 ITMS-90624:“Invalid Intent 词汇。 AppIntentVocabulary.plist 文件中的 Payload/AppName.app/en.lproj 文件夹不能包含意图名称 “我的意图名称 1”。”
每个.lproj
文件夹都会重复出现后续错误消息。
如果有帮助,我的应用已本地化为 14 种语言,该项目未使用基本本地化。
【问题讨论】:
好吧,我不确定,但你能不能尝试只用 MyIntentName1 替换 MyIntentName1.someParam,然后再试一次 应该是关键路径@iOS_Developer @Desmond 你得到解决方案了吗? 【参考方案1】:我在不使用基本本地化时遇到了类似的问题。如Apple Docs所述:
将您的 AppIntentVocabulary.plist 文件放在特定语言中 (.lproj) 与您的基础相对应的 iOS 应用程序目录 开发语言。
不使用 Base 本地化会产生此类问题,尤其是键名,因为它需要一个中性名称(使用相同的英文措辞也可以)来链接所有本地化的键。
【讨论】:
【参考方案2】:目前,您只能在几种特定类型的意图上定义自定义词汇:请参阅“注册用户特定词汇”下的 here 以获取列表,但它是诸如拼车、笔记、锻炼等之类的内容。换句话说,不是您的自定义意图(您可能希望向 iOS 12 的 Siri 快捷方式公开 - 尚不可用……)。
docs 表示您需要在 plist 中将其中一个意图指定为 Intent name
。同样,参数名称需要是那些允许的意图的特定参数。所以我猜这就是你上传到 App Store 时出错的原因——它正在检查 Siri 是否支持“MyIntentName1”的自定义词汇。不知道为什么它在本地为您工作,或者为什么这不是 Xcode 内置的检查。 ?♀️
【讨论】:
感谢您的回复。但是,我在文档中找不到确切的位置,它说我们不应该使用AppIntentVocabulary.plist
和使用.intentdefinition
文件创建的自定义意图。您所指的“注册用户特定词汇”有点不同,它是一种在运行时注册用户特定词汇术语的方法,而不是编译时AppIntentVocabulary.plist
。
文档区分了全局术语和用户特定术语,但仅列出了用户特定术语的可接受类别。 developer.apple.com/documentation/sirikit/… 说:“与您在应用程序包中声明的全局条款不同,您在 iOS 应用程序运行时声明用户特定条款。您声明的条款必须属于以下类别之一。”然后去有限数量的类别
你是对的,我也不对! - 实际上更进一步developer.apple.com/documentation/sirikit/… 在谈论 plist 选项时,它实际上更具限制性,并指出“您可以为骑行选项和锻炼名称指定自定义词汇术语。”您是否可以并且应该为您提供的任何自定义意图包含意图短语(“IntentPhrases 键包含用于调用服务的示例短语。始终包含此键。”),但自定义意图的参数名称是不行的,并且这就是给你的错误?
我已经尝试过不带参数提交,自定义 Intent 中没有参数,AppIntentVocabulary.plist
中没有参数,但从 App Store 收到与以前相同的错误。
你看到了吗?可能的试飞问题? forums.developer.apple.com/thread/108226以上是关于尝试提交带有 Siri 扩展的应用时,来自 App Store 的“Invalid Intent Vocabulary”错误的主要内容,如果未能解决你的问题,请参考以下文章
SIRI 不会根据提供的参数回话,而是打开“快捷方式”应用程序
带有 Safari 扩展的 Mac App Store 应用程序