尝试提交带有 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 使用的语言

自定义键盘应用程序扩展 iOS 8 上的 Siri

SIRI 不会根据提供的参数回话,而是打开“快捷方式”应用程序

带有 Safari 扩展的 Mac App Store 应用程序

提交到 App Store 时,未找到 WatchKit 扩展的匹配配置文件

如何调试我的 Siri (Intents) 扩展?