5
votes

Problème d'internationalisation avec les intentions personnalisées Sirikit et iOS 13.4.1

J'ai implémenté deux intentions personnalisées avec Sirikit dans mon application iOS. Lorsque je les développais, iOS 13.3 était installé sur mon iPhone et l'une de mes intentions a une invite Siri Dialog demandant la valeur d'un paramètre. Toute l'application est traduite en anglais et en espagnol et l'intention personnalisée a bien fonctionné dans les deux langues.

Lorsque j'ai mis à jour mon iPhone vers iOS 13.4.1, mon intention personnalisée a commencé à avoir les problèmes suivants (j'ai vu les deux problèmes en fonction de l'installation / du test / de l'appareil):

  • Siri demande la valeur du paramètre comme si je ne mettrais aucune boîte de dialogue personnalisée avec la phrase standard "Quelle valeur voulez-vous pour param ?" (plus ou moins)
  • Siri demande l'invite de dialogue Siri en anglais et non en espagnol, même lorsque le reste des phrases et les réponses Siri du reste de l'intention et de l'application sont correctement traduits en espagnol. La seule traduction qui ne fonctionne pas est l'invite Siri Dialog.

Je trouve ce problème très étrange et ennuyeux. J'ai essayé de recréer les fichiers de traduction pour Intent.intentdefinition : Intent.strings (Base) , Intent.strings (English) , Intent.strings (Spanish) et j'ai même essayé de recréer toute la définition d'intention personnalisée et j'ai toujours le problème.

J'ai également essayé de changer la langue iOS et la langue Siri sur mon téléphone, redémarrer, réinstaller l'application, les intentions, etc.

Voici le fichier Info.plist de mon extension Sirikit:

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

Une solution pour ça? Est-ce un bogue d'iOS 13.4? L'intégration de Siri est très importante pour l'application que je développe et c'est un bloqueur pour moi.

Merci d'avance!


1 commentaires

J'ai le même problème. Avez-vous résolu cela?


3 Réponses :


0
votes
  1. Localisez votre fichier de définition d'intention dans toutes les langues prises en charge par votre application
  2. Assurez-vous que votre projet Xcode identifie les localisations par le schéma d'identificateur de langue ISO 639-1 (informations supplémentaires sur les schémas). Les projets Xcode plus anciens peuvent utiliser un schéma d'identification de langue différent et doivent être mis à jour.
  3. Si votre application n'a pas encore été localisée, assurez-vous que la langue Siri sélectionnée dans Paramètres correspond à la CFBundleDevelopmentRegion de votre projet Xcode et que la valeur de cette clé est au format ISO 639-1

J'espère que cela fonctionne pour toi


4 commentaires

Il est déjà traduit dans toutes les langues prises en charge et le projet Xcode n'a que quelques mois avec la dernière version de Xcode (désormais 11.4.1). Toute la localisation fonctionnait correctement jusqu'à iOS 13.4.1. Et cela fonctionne avec exactement le même projet et le même code avec iOS 13.3


Avez-vous déjà vérifié le n ° 3 parce que j'ai eu le même problème, mais la langue Siri sélectionnée dans les paramètres ne correspondait pas à CFBundleDevelopmentRegion


Je ne comprends pas # 3. Cela signifie-t-il que je ne peux avoir qu'une seule langue? Ma langue de développement est l'anglais. J'ai des traductions de base, anglais et espagnol. La langue de Siri sur mon téléphone est l'espagnol.


Les traductions en anglais fonctionnent bien, le problème vient de la langue espagnole.



1
votes

D'après ma propre expérience, ce problème est résolu dans iOS 13.5 beta 4. Je viens de le tester sur un iPhone 6s Plus avec Xcode 11.5 beta 2 (11N605f).

Cependant, il y a encore d'autres problèmes. Par exemple, dans Raccourcis, toutes les chaînes d'opération de mon projet de test sont affichées en anglais, pas dans la langue localisée.

De plus, INStringResolutionResult.confirmationRequired (avec :) ne fonctionne pas comme prévu.

J'ai une fonction qui récupère les mots que l'utilisateur dit et les recherche dans la base de données, puis utilise INStringResolutionResult.confirmationRequired (avec :) pour vérifier avec l'utilisateur. SiriKit n'utilise actuellement que les mots prononcés par l'utilisateur, et non le résultat que je vérifie avec l'utilisateur, ce qui entraîne le blocage du code final.

MISES À JOUR

Je viens de recevoir la réponse de l'équipe de rapport de bogue d'Apple. Voici les conclusions que je tire pour l'instant.

  1. Lors du changement de langue, Siri a parfois, sinon tout le temps, un problème d'utilisation des phrases par défaut pour remplacer les phrases fournies par un développeur.
  2. L'installation du profil Siri et le redémarrage peuvent résoudre le problème ci-dessus sur Siri du paramètre actuel. Mais si vous changez la langue de Siri, le problème est toujours là.
  3. Il y avait des régressions sur les API de INStringResolutionResult. Pour un résultat unique, les deux fonctions de désambiguïsation de la classe ouverte (avec stringsToDisambiguate: [String]) -> Self et open class func confirmationRequired (avec stringToConfirm: String?) -> Self ne fonctionnerait pas sur iOS plus tard que iOS 13.3. Siri a utilisé un espace réservé appelé "nom" au lieu de la valeur réelle.

6 commentaires

J'ai contacté le support technique Apple Developer et j'ai recréé le bogue dans un projet séparé et ils m'ont dit de déposer un rapport de bogue à l'aide de Feedback Assistant. Je ne peux pas tester iOS 13.5 beta 4 car j'utilise mon téléphone principal pour tester mon application et je ne veux pas tout réinstaller et utiliser la beta iOS pour mon utilisation quotidienne. Cela semble clairement être un bogue et je pense que je devrai attendre la disponibilité d'iOS 13.5, ce qui est vraiment dommage car cela bloque la sortie de mon application.


Confirmé. iOS 13.5 résout le problème avec la boîte de dialogue Siri demandant le paramètre bien que certaines chaînes ne soient pas complètement traduites lors de la tentative d'ajout du raccourci Siri.


D'après mon propre test, SiriKit dans iOS 13.5 ne fonctionne pas du tout sur un appareil réel. Siri dans un appareil réel n'utilise que les mots par défaut, pas ce que le programmeur fournit, même en anglais. Siri dans le simulateur 13.5 ne fonctionne pas du tout. Siri dans le simulateur 13.3 fonctionne très bien. Mon iPhone est un iPhone 6s Plus avec le dernier iOS 13.5.


Dans mon cas, cela fonctionne bien avec un iPhone 11 Pro (iOS 13.5). Je ne sais pas si votre problème ou votre cas d'utilisation est le même que le mien. Je pense que nous devons être patients car ils devront le corriger dans les versions ultérieures. BTW, vérifiez la catégorie d'intention que vous exécutez dans votre fichier .intentdefinition. J'ai également eu des problèmes avec cela et category = "Exécuter" fonctionne pour moi mais "Rechercher" ou "Rechercher" échoue


Merci. Le mien est dans "Find". Voici mon exemple de projet, vous pouvez faire un test si vous le souhaitez. dropbox.com/sh/a55svrip3myb8rd/AADE2nFpvTNR9lkzLC4hT5uNa?dl=‌ 0


Alors vous devriez vraiment essayer de changer cette catégorie et voir ce qui se passe.



1
votes

Mise à jour iOS 14

Je vois toujours le comportement suivant (tel que rapporté par Owen Zhao) avec iOS 14:

  • Lors du changement de langue, Siri a parfois, sinon tout le temps, un problème d'utilisation des phrases par défaut pour remplacer les phrases fournies par un développeur.

J'ai observé que le redémarrage de l'appareil iOS après le changement de langue résout (toujours) le problème.


0 commentaires