Error "Invalid Intent Vocabulary" from App Store when trying to submit an app with Siri extension

Viewed 1722

My app is using a Siri extension with custom Siri intents, which is a new feature for Xcode 10 / iOS 12. I design my custom Siri intents in a .intentdefinition file (included for both app and extension targets).

My custom (not system) Siri intents are declared within the "Do" category.

enter image description here

A Siri intent also requires a AppIntentVocabulary.plist file with example phrases in it https://developer.apple.com/documentation/sirikit/registering_custom_vocabulary_with_sirikit

I've got my AppIntentVocabulary.plist included for the app target only. It looks like this:

<?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>

It builds fine and works ok too. But when I'm trying to submit it to App Store, I get:

[Transporter Error Output]: ERROR ITMS-90624: "Invalid Intent Vocabulary. The AppIntentVocabulary.plist file in the Payload/AppName.app/en.lproj folder can't contain the intent name "MyIntentName1"."

And there are subsequent error messages repeating for every .lproj folder.

If it helps, my app is localized for 14 languages, the project is not using base localization.

2 Answers

I had a similar issue when not using Base Localization. As stated from the Apple Docs:

Place your AppIntentVocabulary.plist file in the language-specific (.lproj) directory of your iOS app that corresponds to your base development language.

Not using Base localization can create this kind of problems especially with key names, as it needs a neutral name (using the same English wording works as well) to link against all the localized keys.

For the moment, you can only define custom vocabulary on a few specific types of intents: see here under "Register User-Specific Vocabulary" for a list, but it's things like ride sharing, notes, workouts etc. In other words, not your custom intents (that you might want to expose to iOS 12's Siri shortcuts - that's not available... yet).

And the docs say you need to specify one of those intents as the Intent name in the plist. Likewise, the parameter names need to be specific parameters of just those permitted intents. So I'm guessing that's why you're getting errors on uploading to the App Store - it's checking to see if Siri supports custom vocabulary for "MyIntentName1". Not sure why it's working locally for you, or why this isn't a check built into Xcode. ‍♀️

Related