Ошибка: недопустимый словарь намерений из App Store при попытке отправить приложение с расширением Siri

Мое приложение использует расширение Siri с настраиваемыми намерениями Siri, что является новой функцией для Xcode 10 / iOS 12. Я разрабатываю свои собственные намерения Siri в файле .intentdefinition (включаемом как для приложений, так и для целей расширения) .

Мои пользовательские (не системные) намерения Siri объявлены в категории "Что делать".

введите здесь описание изображения

Намерение 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, я получаю:

[Вывод ошибок транспортера]: ERROR ITMS-90624: «Недопустимый словарь намерений. Файл AppIntentVocabulary.plist в папке Payload / AppName.app / en.lproj не может содержать имя намерения« MyIntentName1 ».

И последующие сообщения об ошибках повторяются для каждой .lproj папки.

Если это поможет, мое приложение локализовано на 14 языков, проект не использует базовую локализацию.


person Desmond Hume    schedule 29.10.2018    source источник
comment
Я не уверен, но можете ли вы попробовать заменить MyIntentName1.someParam только на MyIntentName1 и попробовать еще раз   -  person Muhammad Waqas    schedule 10.11.2018
comment
Это должен быть ключевой путь @iOS_Developer   -  person Mojtaba Hosseini    schedule 11.11.2018
comment
@ Десмонд, ты нашел решение?   -  person Garry    schedule 29.01.2019


Ответы (2)


У меня была аналогичная проблема, когда я не использовал базовую локализацию. Как указано в Apple Docs:

Поместите файл AppIntentVocabulary.plist в каталог для конкретного языка (.lproj) вашего приложения iOS, который соответствует вашему базовому языку разработки.

Неиспользование базовой локализации может создать такие проблемы, особенно с именами ключей, поскольку для связывания со всеми локализованными ключами требуется нейтральное имя (с использованием той же английской формулировки).

person Lookaji    schedule 09.11.2018

На данный момент вы можете определить собственный словарь только для нескольких конкретных типов намерений: см. здесь в разделе «Зарегистрировать пользовательский словарь» для получения списка, но это такие вещи, как совместное использование поездок, заметки, тренировки и т. д. Другими словами, не ваши пользовательские намерения (которые вы, возможно, захотите открыть для ярлыков Siri iOS 12 - это недоступно ... пока что).

И в документах говорится, что вам нужно указать одно из этих намерений в качестве Intent name в списке. Точно так же имена параметров должны быть конкретными параметрами только тех разрешенных целей. Я предполагаю, что именно поэтому вы получаете ошибки при загрузке в App Store - он проверяет, поддерживает ли Siri настраиваемый словарь для «MyIntentName1». Не уверен, почему он работает для вас локально или почему это не проверка, встроенная в Xcode. ????‍♀️

person Zoë Smith    schedule 03.11.2018
comment
Спасибо за ваш ответ. Однако я не могу найти точное место в документации, где говорится, что мы не должны использовать AppIntentVocabulary.plist с пользовательскими намерениями, созданными с помощью .intentdefinition файлов. Регистрация пользовательского словаря, о котором вы говорите, немного отличается: это способ регистрации пользовательских терминов словаря во время выполнения, а не во время компиляции AppIntentVocabulary.plist. - person Desmond Hume; 05.11.2018
comment
В документах проводится различие между глобальными и пользовательскими терминами, но перечисляются только допустимые категории для пользовательских терминов. developer.apple.com/documentation/sirikit/ гласит: В отличие от глобальных условий, которые вы объявляете в своем пакете приложений, вы объявляете пользовательские условия во время выполнения из своего приложения iOS. Заявленные вами условия должны принадлежать к одной из следующих категорий. А затем перейдите по ограниченному количеству категорий - person Desmond Hume; 05.11.2018
comment
Ты прав, я тоже! - На самом деле, developer.apple.com/documentation/sirikit/, когда речь идет о plist, он на самом деле еще более строгий и указывает, что вы можете указать собственные термины словаря для параметров езды и названий тренировок. Это то, что вы можете и должны включать фразы намерения для любых настраиваемых намерений, которые вы предоставляете (ключ IntentPhrases содержит примеры фраз для вызова ваших служб. Всегда включайте этот ключ.), Но имена параметров для настраиваемых намерений недопустимы, и вот что выдает ошибку? - person Zoë Smith; 05.11.2018
comment
Я уже пробовал отправить без параметров, без параметров в пользовательском намерении и без параметров в AppIntentVocabulary.plist, но получил ту же ошибку из App Store, что и раньше. - person Desmond Hume; 05.11.2018
comment
Ты видел это? Возможная проблема с тестовым полетом? forum.developer.apple.com/thread/108226 - person Zoë Smith; 05.11.2018
comment
Да, я это видел. Это мало что объясняло. - person Desmond Hume; 05.11.2018
comment
Да, мне было интересно, было ли это подсказкой, что комбинация xcode + testflight была виновата. Я все еще думаю, что это то, что Apple в настоящее время не поддерживает, но я надеюсь, что вы разберетесь в этом! Удачи :) - person Zoë Smith; 05.11.2018
comment
Я только что столкнулся с той же проблемой и нашел этот ответ сотрудника Apple на форумах Apple Dev: Настраиваемые намерения не должны включать файл AppIntentVocabulary.plist в приложение. Эти фразы не используются для запуска вашего намерения, используется только фраза, связанная с ярлыком. - person Kai Oelfke; 10.10.2020