Aller au contenu
Chandler Nguyen
IA12 min de lecture

IA

Le natif, ce n'est pas un vernis : j'ai reconstruit l'app iOS de DIALØGUE

J'ai sorti l'app iOS de DIALØGUE comme un port du produit web, puis je l'ai reconstruite en natif — trois onglets, audio sur l'écran verrouillé, transcription synchronisée, offline robuste et Siri — parce qu'une web app rétrécie sur un téléphone reste une web app.

J'ai sorti l'app iOS de DIALØGUE il y a des mois comme un port du produit web. Puis j'ai reconstruit presque tout en app native.

Elle est maintenant disponible sur l'App Store — si ça te tente, va y jeter un œil. Le reste, c'est ce qui a changé, et pourquoi.

La différence a l'air d'un détail de vocabulaire jusqu'au moment où tu tiens les deux versions dans la main. La première, c'était la web app rétrécie pour rentrer dans un téléphone : les mêmes onglets, le même wizard de création, le même dashboard. Ça compilait, ça tournait, ça passait le review. Et ça donnait l'impression d'un site web déguisé en app.

Une web app rétrécie sur un téléphone reste une web app. Le natif, ce n'est pas un vernis posé sur ton layout web — c'est un autre contrat avec l'appareil. Ce contrat, c'est précisément celui que j'avais sauté, et le reconstruire pour l'honorer a changé les onglets, l'audio, la surface d'écoute, le comportement offline et la façon dont l'app démarre. Voilà ce que ça a vraiment voulu dire, écran par écran.

Le port, c'était un dashboard

La première version partait du principe que le boulot de l'app était d'exposer le générateur. DIALØGUE fait des podcasts avec l'IA, alors le raisonnement était : mets chaque surface web à l'écran et c'est réglé.

Ce que tu en tires, c'est un dashboard. Cinq onglets, un wizard à plusieurs étapes, des panneaux pour tout. Personne n'ouvre une app de podcasts pour piloter un dashboard. On l'ouvre pour transformer une idée en audio, pour écouter un truc qu'on a fait, ou pour relancer un show qu'on a déjà monté. L'interface portée protégeait le layout de la web app. Elle ne protégeait pas ces trois boulots-là.

Donc la reconstruction a commencé par la toute première chose que tu vois.

Trois onglets, parce qu'un téléphone punit les onglets

L'ancienne app s'ouvrait sur cinq onglets : Library, Studio, Create, Credits, Profile. C'est ce que tu obtiens en portant la web app — chaque surface web se mérite un onglet.

L'app reconstruite en a trois : Listen, Create, You.

Deux onglets n'ont pas survécu. Credits a cessé d'être une destination — personne n'ouvre une app pour fixer un solde. C'est passé dans « You », et le seul moment qui compte vraiment — être à court juste au moment où tu vas générer — fait maintenant apparaître une feuille d'achat exactement là. Studio a cessé d'être un lieu. C'est devenu Series — un setup enregistré (hosts, ton, format, langue, modèle de sources) qui vit dans Create et qui apparaît dans Listen comme une collection, au lieu d'un onglet qui jouait à la régie. Library et Profile sont devenus les plus simples « Listen » et « You ».

Sur un desktop, un onglet de plus est gratuit. Sur un téléphone, chaque onglet est un impôt sur l'attention. La reconstruction a remboursé cet impôt.

Écran Series de l'app iOS de DIALØGUE pour enregistrer un setup de podcast réutilisable
Series — un setup enregistré dans Create, pas une régie avec son propre onglet.

De l'audio comme iOS l'attend

C'est là que « le natif est un contrat » arrête d'être abstrait.

L'app portée n'était pas analphabète en audio. Elle apparaissait déjà sur l'écran verrouillé avec play, pause et skip, elle se mettait en pause pour un appel, et elle s'arrêtait quand tu retirais tes écouteurs. C'est le minimum vital, et c'était là.

Ce qu'elle ne savait pas faire, c'était se comporter comme une vraie app audio une fois l'écran verrouillé. Tu ne pouvais pas déplacer la tête de lecture depuis l'écran verrouillé. Il n'y avait pas de jaquette là — juste du texte. Pas de bouton AirPlay, pas de minuteur de veille, et le skip était figé à quinze secondes que ça te plaise ou non.

La reconstruction a comblé ce trou avec la plateforme, pas en la contournant. L'écran verrouillé porte maintenant une jaquette d'épisode dynamique et une barre de progression que tu peux glisser jusqu'à n'importe quel point. Il y a AirPlay, un minuteur de veille qui fait descendre le volume en fondu au lieu de le couper net, et un intervalle de skip réglable de dix à soixante secondes — qui pilote ensuite aussi les boutons de l'écran verrouillé, parce que les contrôles système devraient correspondre à ceux de l'app. La session audio se déclare comme de l'audio parlé, donc l'OS la traite comme de la voix et pas comme de la musique.

Rien de tout ça n'est glamour. C'est tout l'intérêt. Sur un téléphone, un audio qui ignore l'écran verrouillé et AirPlay n'est pas « minimaliste ». Il est cassé aux moments exacts où les gens écoutent vraiment — en marchant, en conduisant, le téléphone dans la poche.

Une transcription que seul un podcast IA peut construire

Voilà la partie qui est vraiment à nous, pas juste de la bonne hygiène iOS.

Pendant qu'un épisode joue, l'app affiche une transcription synchronisée : la ligne en cours se surligne, la vue défile automatiquement pour la garder centrée, et tu peux toucher n'importe quelle ligne pour sauter direct à ce moment-là. Une app de podcasts générique ne peut pas vraiment faire ça, parce qu'elle ne sait pas ce qui a été dit ni quand. DIALØGUE, si — elle a généré le script, donc elle connaît déjà la structure de l'épisode.

Le détail d'ingénierie honnête, c'est qu'une ligne n'est touchable que quand l'audio a un timing exact par segment. Quand le timing est approximatif, la ligne s'affiche quand même, elle n'est juste pas navigable, et l'app ne fait pas semblant du contraire. Ce même timing par segment dessine des repères de chapitre directement sur la barre, donc tu peux parcourir un épisode comme de l'audio mais avec une carte de ce que le système a fabriqué. La transcription montre même quel host a dit quelle ligne, parce que le script a été écrit comme un dialogue à deux voix.

C'est la différence entre coller une transcription sur un lecteur et traiter le script généré comme la source de vérité de toute l'expérience d'écoute.

Deux choses font que ça marche, et aucune n'apparaît à l'écran. Le backend estampille chaque segment avec son heure de début et de fin et marque si le timing est exact ou seulement estimé — pour que l'app puisse te laisser toucher une ligne au timing exact et, sur une ligne estimée, s'abstenir discrètement au lieu de faire semblant. Et ta position de lecture est enregistrée sur le serveur, pas seulement sur l'appareil, donc « reprends où tu t'étais arrêté » tient même si tu démarres un épisode sur le web et le finis sur le téléphone.

Écran de transcription synchronisée de l'app iOS de DIALØGUE avec des cartes de transcription qui sautent au toucher
Transcription synchronisée — touche une ligne pour sauter. Possible uniquement parce que l'app a généré le script et connaît le timing.

Un offline qui survit à un vrai trajet

L'app pouvait télécharger des épisodes depuis le début. Ça, ce n'est pas nouveau, et je veux être précis là-dessus. Ce que la reconstruction a ajouté, c'est de la robustesse — la différence entre une fonction de téléchargement et un offline en qui tu peux avoir confiance.

Un téléchargement interrompu reprend maintenant là où il s'est arrêté au lieu de tout recommencer, parce que l'app enregistre les données de reprise du système par épisode et repart de là. Il y a une option Wi-Fi uniquement qui interdit vraiment les données mobiles, donc un téléchargement en file d'attente attend le Wi-Fi au lieu de cramer ton forfait en douce. Les téléchargements tournent au maximum à trois en même temps dans une file FIFO au lieu de prendre le réseau d'assaut. Il y a une vue de stockage pour voir et supprimer ce qui est sur l'appareil. Et les requêtes éphémères qui échouent sur une connexion instable réessaient avec backoff — trois tentatives, une demi-seconde qui grimpe jusqu'à un plafond, et jamais de réessai quand quelqu'un a annulé.

Réessayer, c'est facile ; réessayer sans se battre contre quelqu'un qui a appuyé sur annuler, c'est ce qui fait que l'offline semble solide sur une mauvaise connexion de métro au lieu de tourner dans le vide.

Écran d'écoute offline de l'app iOS de DIALØGUE avec les contrôles des épisodes téléchargés
L'offline a toujours été là. La reconstruction l'a rendu robuste — reprise, Wi-Fi uniquement, contrôles de stockage, une file plafonnée.

Instantané, parce qu'un spinner se lit comme « cassé »

Sur un téléphone, la latence est une sensation, pas un chiffre. Un spinner au démarrage à froid se lit comme « cette app est cassée », même quand tout va bien.

L'app portée re-téléchargeait chaque image de jaquette à chaque démarrage à froid, donc la bibliothèque s'ouvrait comme un mur de spinners. La reconstruction a ajouté un cache mémoire-et-disque partagé pour les jaquettes — la couche disque survit aux relances, la couche mémoire garde le scroll fluide, et l'écran verrouillé réutilise le même cache pour sa jaquette. Rouvrir un épisode attendait avant un aller-retour réseau ; maintenant les segments et la transcription sont mis en cache par épisode et s'affichent immédiatement, puis se rafraîchissent discrètement en arrière-plan. J'ai aussi sorti le tick de lecture toutes les demi-secondes des lignes de la liste, pour que le timer arrête de forcer toute la bibliothèque à se redessiner.

Ce n'est pas une fonctionnalité que tu peux capturer en screenshot. C'est l'écart entre une app et un site web.

Elle te prévient quand l'épisode est prêt

Générer un podcast prend des minutes, pas des secondes — il y a la recherche, un plan, un script, puis l'audio. L'app portée te faisait regarder une barre de progression pendant tout ce temps. L'app native, non.

Avec ta permission, elle envoie une notification push à l'instant où ton épisode est prêt, donc tu peux verrouiller le téléphone, faire autre chose, et revenir quand ça vibre. Le token de l'appareil est stocké côté serveur, seul le job de notification peut le lire, et tu peux tout désactiver dans les réglages. C'est un petit bout de plomberie — une table, un worker, le service push d'Apple — mais ça change la forme ressentie du produit : on passe de « attends sur cet écran » à « je te préviens quand c'est prêt ».

Le workflow peut démarrer depuis l'extérieur de l'app

Une app native ne vit pas seulement dans sa propre fenêtre. La reconstruction a ajouté la prise en charge de Siri et des Raccourcis via App Intents, donc « crée un podcast », « reprends l'écoute » et « ouvre mes podcasts » marchent comme des phrases parlées, dans l'app Raccourcis et dans Spotlight — sans entitlement spécial. La décision de ce que « reprendre » devrait faire (continuer l'épisode en cours, ou ouvrir la bibliothèque si rien n'est chargé) est une toute petite fonction pure que j'ai pu tester unitairement toute seule, exactement le genre de chose qui empêche le comportement de Siri de dériver.

Il y a aussi un accueil sobre de trois pages au premier lancement — créer, voix, écouter partout —, montré une seule fois, et des deep links pour qu'un lien touché ouvre le bon écran au lieu de te larguer sur l'onglet d'accueil. De petites choses. Elles font la différence entre une app posée sur le téléphone et une app qui lui appartient.

Un mot sur l'endroit où je me suis arrêté : il n'y a pas encore de widgets d'écran d'accueil, pas de Live Activities, pas de CarPlay — chacun a besoin de sa propre extension ou d'un entitlement accordé par Apple, et j'ai choisi de sortir d'abord le cœur d'écoute. « Natif », ici, c'est une direction, pas une checklist terminée.

La leçon que je tire de tout ça

Si tu portes quelque chose sur une nouvelle plateforme, le réflexe tentant, c'est de le faire tourner là-bas et de considérer que c'est fini. Ça va tourner. Ça va aussi sembler emprunté.

Le natif est un contrat avec l'appareil : respecte l'écran verrouillé, les changements de route audio, la réalité de l'offline, les surfaces système que les gens utilisent déjà. Un port honore ton ancien layout. Une app native honore les conventions de la plateforme, même quand ça veut dire supprimer des onglets et réécrire des écrans que tu avais déjà sortis.

Je n'ai pas de chiffres d'installation ou de rétention spectaculaires à agiter — la version actuelle est disponible sur l'App Store, et c'est l'état honnête des choses. Le vrai test n'a jamais été de savoir si les screenshots avaient l'air natifs. C'est de savoir si quelqu'un fait un épisode, l'écoute en balade téléphone verrouillé, et revient en faire un autre.

Si tu construis pour le mobile, je suis curieux de savoir où tu places la limite : quand est-ce que « ça tourne sur le téléphone » suffit, et quand est-ce que le contrat de la plateforme te force à reconstruire ?

Foire aux questions

Qu'est-ce qui a changé dans la reconstruction iOS de DIALØGUE ?

L'app est passée d'un port du produit web à une reconstruction native. L'architecture de l'information est descendue de cinq onglets à trois (Listen, Create, You). L'expérience d'écoute a gagné une transcription synchronisée qui saute au toucher, des repères de chapitre, le scrubbing et la jaquette sur l'écran verrouillé, AirPlay, un minuteur de veille et des intervalles de skip configurables. Les téléchargements offline sont devenus robustes, l'app met en cache les jaquettes et les segments pour un ressenti instantané, Siri/Raccourcis permettent de lancer les actions clés depuis l'extérieur de l'app, et une notification push te dit quand un épisode est prêt.

Pourquoi cinq onglets sont-ils devenus trois ?

Parce qu'un téléphone punit chaque onglet de trop. Credits n'était pas un endroit que quelqu'un avait envie de visiter, donc il s'est replié dans « You » plus une feuille d'achat qui apparaît quand tu es vraiment à court. Studio est devenu Series — un setup enregistré dans Create plutôt que son propre onglet. Library et Profile sont devenus les plus simples « Listen » et « You ».

Quelles fonctionnalités iOS natives la reconstruction a-t-elle ajoutées ?

Le scrubbing et la jaquette dynamique sur l'écran verrouillé, AirPlay, un minuteur de veille avec fondu du volume, des intervalles de skip configurables (10–60 s) qui pilotent aussi les contrôles de l'écran verrouillé, des repères de chapitre sur la barre, une transcription synchronisée qui saute au toucher, des téléchargements offline robustes (reprise, Wi-Fi uniquement, gestion du stockage, file plafonnée), des caches partagés de jaquettes et de segments pour un rendu instantané, des intents Siri/Raccourcis, des notifications push « épisode prêt », une position de lecture côté serveur qui reprend entre le web et le téléphone, des deep links et un onboarding au premier lancement.

La transcription synchronisée fonctionne-t-elle pour n'importe quel épisode ?

Une ligne de transcription n'est touchable pour sauter que quand l'audio a un timing exact par segment. Quand le timing est approximatif, la ligne s'affiche quand même mais n'est pas navigable, et l'app ne fait pas semblant du contraire. La transcription est possible parce que DIALØGUE a généré le script, donc elle connaît la structure et qui a dit quoi.

Quelle est la différence entre Studio et Series ?

Studio sous-entendait une régie pleine de boutons. Series, c'est juste un setup enregistré — hosts, ton, format, langue et modèle de sources — qui te laisse lancer l'épisode suivant sans tout reconfigurer. C'est un préréglage dans Create, pas un onglet à part.

En quoi est-ce différent des aperçus audio de NotebookLM ?

NotebookLM est vraiment utile, et gratuit, pour transformer tes sources en un aperçu audio rapide. DIALØGUE essaie d'être un vrai produit d'écoute natif par-dessus la génération : revue du plan et du script avant tout audio, sélection de voix, une transcription synchronisée qui saute au toucher, des chapitres, des contrôles sur l'écran verrouillé et via AirPlay, des téléchargements offline, Siri et Series pour les shows réutilisables. La vraie différence, c'est moins « qui génère le meilleur audio » que « qu'arrive-t-il à l'épisode une fois qu'il existe ».

La reconstruction a-t-elle ajouté l'écoute offline ?

Les téléchargements offline existaient déjà. La reconstruction les a rendus robustes : les téléchargements interrompus reprennent au lieu de recommencer, il y a une option Wi-Fi uniquement et une vue de stockage, les téléchargements tournent au maximum à trois en même temps, et les échecs réseau éphémères réessaient avec backoff sans se battre contre quelqu'un qui annule.

Voilà, c'est tout pour moi pour l'instant.

À bientôt, Chandler