Développement et débogage des fonctions utilisateur dans les applications mobiles

Récemment, je suis tombé sur cette remarque dans une revue de code effectuée par un développeur senior concernant le travail d'un collègue : « J'ai légèrement modifié la fonction utilisateur pour qu'elle fonctionne correctement lorsque des langues autres que l'anglais sont utilisées. » C'était une remarque surprenante : le code est le code, et il ne devrait pas importer la langue parlée par le développeur ou par l'utilisateur final ! Une fonction utilisateur n'est qu'une expression qui peut accepter des paramètres d'entrée et renvoyer un résultat.

Altova MobileTogether prend en charge les fonctions utilisateur dans un cadre de développement mobile multiplateforme qui combine la conception d'interfaces utilisateur par glisser-déposer et la programmation fonctionnelle standardisée pour la sélection et le traitement des données. Plusieurs applications de démonstration de MobileTogether dépendent fortement des fonctions utilisateur, et l'outil MobileTogether Designer intègre des fonctionnalités qui facilitent grandement la création et la validation de ces fonctions.

Examinons les fonctionnalités offertes aux utilisateurs dans les applications mobiles en analysant l'une de ces applications de démonstration.

Dans une publication précédente, nous avons cité l'application Parcel Delivery comme un exemple de techniques de programmation avancées pour le développement mobile. Parcel Delivery est une implémentation élégante réalisée par un développeur expérimenté, qui repose fortement sur des fonctions utilisateur.

L'exemple de livraison de colis est une simulation complète d'une application de livraison de colis réelle. L'utilisateur final joue le rôle d'un livreur pour une entreprise de livraison, chargé de transporter des colis d'un entrepôt du New Jersey vers des destinations à New York, en se guidant grâce au GPS. Vous pouvez exécuter l'application dans la fenêtre de simulation de MobileTogether Designer pour observer des mouvements réalistes vers chaque destination. Si vous exécutez l'application Parcel Delivery sur votre propre téléphone à partir du serveur de démonstration MobileTogether, votre téléphone utilisera sa fonctionnalité GPS intégrée.

Voici deux exemples d'écrans d'affectation de conducteurs, affichés sur un iPhone en mode sombre et sur un téléphone Android en mode clair :

Les fonctions définies par l'utilisateur, qui s'exécutent au moment de l'exécution, génèrent la liste des tâches de livraison et les marqueurs affichés sur la carte. Nous pouvons consulter les définitions de ces fonctions dans la fenêtre "Constructeur d'expressions XPath" de l'outil MobileTogether Designer :

L'option "Constructeur" sélectionnée ci-dessus fournit des outils d'aide, des descriptions contextuelles sous forme de fenêtres pop-up pour les constructions XPath/XQuery, et une fonction de complétion automatique au fur et à mesure que les expressions sont créées. L'option "Évaluateur" vous permet de visualiser les résultats des expressions, ce qui vous permet de valider ou de modifier une expression si nécessaire.

Lorsque l'application s'exécute dans le simulateur MobileTogether, l'évaluateur XPath a accès à toutes les valeurs en temps réel des données sources de la page. Nous pouvons ouvrir l'évaluateur XPath dans le simulateur pour évaluer les fonctions utilisateur dans les applications mobiles :

La fonction RemainingDestinations() renvoie une liste contenant les attributs de chaque destination, et cette liste est utilisée pour afficher les informations dans la section inférieure de la page "À faire".

La fonction utilisateur DestinationMarkerList() appelle la fonction RemainingDestinations() et crée une liste de marqueurs de carte pour localiser chaque destination sur la carte

Le texte et le titre correspondant à chaque destination s'affichent lorsque l'utilisateur clique sur un marqueur sur la carte

La fonction DestinationMarkerList() est une propriété du contrôle de la carte :

Le menu principal du projet comprend une option permettant de générer une liste de toutes les utilisations des fonctions définies par l'utilisateur dans l'application

Pour obtenir une analyse détaillée de l'évaluation d'une fonction utilisateur, vous pouvez activer le mode débogage pendant la simulation et observer l'évaluation de la fonction étape par étape :

Au fur et à mesure de l'utilisation de l'application, l'utilisateur simule chaque livraison et enregistre le destinataire ainsi que l'état des colis (endommagés ou non). Une page de résumé des livraisons affiche les résultats :

Sur cette carte, les marqueurs sont codés par couleur, et le texte qui s'affiche lorsqu'on clique sur un marqueur décrit l'état de la livraison. Pour la livraison mise en évidence ci-dessus, Joan Jones a été la personne qui a reçu le colis à la place du destinataire initial, c'est pourquoi le marqueur est orange au lieu de vert. La fonction utilisateur ReportMarkerList() a extrait le résumé de la livraison à partir de la base de données et a coloré le marqueur car le destinataire initial n'était pas la personne qui a reçu le colis.

La seule façon dont nous savons que la livraison n'a pas été entièrement réussie, c'est grâce au texte associé à l'action. Et c'est ainsi que le mystère de la remarque dans la revue de code est résolu ! Le texte est en anglais, ce qui explique pourquoi le relecteur de code a modifié une fonction utilisateur pour qu'elle fonctionne dans n'importe quelle langue.

MobileTogether offre des fonctionnalités de localisation qui permettent de traiter facilement les textes des messages dans différentes langues pendant l'exécution du programme.

L'application de livraison de colis est adaptée aux versions en anglais, allemand, espagnol, japonais ou français du système d'exploitation. La partie supérieure de la fenêtre de localisation, illustrée ci-dessous, présente un tableau des traductions pour les éléments fixes tels que les titres de pages, les étiquettes, les boutons, etc.

La section inférieure définit une table de traduction pour les chaînes de caractères, configurée au moment de l'exécution en fonction de conditions qui se produisent pendant l'exécution. MobileTogether inclut une fonction intégrée, mt-load-string('nom'), qui permet de référencer les chaînes de caractères en utilisant leur nom, indépendamment de la langue du dispositif.

L'image ci-dessous illustre la définition de la fonction ReportMarkerList() qui permet de définir les couleurs des marqueurs et le texte affiché dans les fenêtres contextuelles pour les marqueurs présents sur la carte du rapport de livraison. Si le texte associé à une livraison correspond à la chaîne de caractères nommée delivered_C, alors le marqueur sera de couleur verte. Le texte delivered_C en anglais est : "Livraison acceptée en personne". En espagnol, ce texte serait : "Entrega aceptada en persona"

Si le développeur avait simplement comparé le champ "DeliverySummary" à la chaîne de caractères "Personally accepted delivery" en anglais, les marqueurs sur la carte ne seraient pas colorés correctement dans aucune autre langue.

Nous pouvons valider le comportement de la fonction utilisateur ReportMarkerText() dans différentes langues grâce au simulateur MobileTogether. Le menu principal du projet propose une option pour exécuter l'application dans d'autres langues :

Nous pouvons exécuter l'application en espagnol et parcourir une série de livraisons afin de générer un rapport de livraison en espagnol. La couleur de chaque marqueur est correctement définie en fonction du texte associé à chaque élément du résumé de livraison.

Utilisez toutes vos compétences et outils, y compris les techniques de programmation avancées comme les fonctions personnalisées dans les applications mobiles, pour créer vos propres applications en un temps record ! Découvrez MobileTogether Démonstrations vidéo, plus applications de démonstration, ou même le manuel en ligne pour une exploration approfondie de toutes les informations. Lorsque vous serez prêt à vous lancer et à créer vos propres applications mobiles multiplateformes, Téléchargez le logiciel MobileTogether Designer.