# Argentique

> Application mobile qui reconstruit une archive Instagram sur le téléphone, hors-ligne, sans le moindre accès réseau. React Native, module natif Kotlin et Swift.

Étude de cas, projet personnel

Onze ans d’Instagram relus sur un téléphone incapable de se connecter.

Une application mobile qui reconstruit votre archive une fois que vous avez quitté le réseau : le fil, les conversations, les stories, le profil, les statistiques. Tout est rebâti sur l’appareil à partir du fichier que Meta vous remet, et rien n’en ressort.

En clair

Quand on quitte Instagram, on récupère ses données dans un fichier illisible. Argentique est une application de téléphone qui les retransforme en photos, en messages et en souvenirs consultables, **sans que rien ne quitte l’appareil**. Ce n’est pas une promesse de confidentialité, c’est une impossibilité technique.
Le détail technique commence ici.

## D’où vient le besoin

Quitter Instagram ne fait pas perdre qu’un compte : on y laisse des années de photos, de conversations et de moments qui n’existent nulle part ailleurs. Le réseau le sait très bien, et c’est une bonne partie de ce qui retient les gens.

La loi oblige pourtant Meta à vous rendre vos données. Ce qu’on reçoit est une archive de plusieurs gigaoctets : des milliers de fichiers techniques, des dossiers imbriqués les uns dans les autres, des photos nommées par des suites de chiffres. **La donnée est bien là, mais personne ne peut rien en faire.**

C’est le genre d’écart qui me plaît. Il n’y avait rien à collecter ni à inventer ; tout le travail consistait à rendre lisible un contenu qui appartient déjà à celui qui le lit.

## Une promesse vérifiable de l’extérieur

Une application qui lit onze ans de vie privée doit répondre à une question avant toutes les autres : où partent ces données ? On répond d’habitude par une phrase dans une politique de confidentialité, que personne n’est en mesure de vérifier.

Argentique ne promet pas de ne rien envoyer : **elle en est techniquement incapable**. L’autorisation d’accès au réseau est retirée de la version publiée, si bien que le téléphone refuse lui-même toute connexion, au niveau du système, avant que le code ait son mot à dire.
Arbitrage

Il aurait suffi de n’écrire aucun code réseau, comme le font la plupart des applications qui se disent hors-ligne.

Sauf qu’une application moderne embarque des dizaines de bibliothèques écrites par d’autres, et qu’aucune relecture ne garantit qu’aucune d’elles n’appellera un serveur après une mise à jour. Retirer l’autorisation transforme l’intention en **garantie structurelle** : elle tient même contre du code que je n’ai pas écrit, et n’importe qui peut la contrôler sur la fiche de l’application.

**Conséquence.** Aucun serveur, aucun compte, aucune mesure d’audience. **Il n’y a rien à héberger, et rien à pirater.**

## Faire tenir plusieurs gigaoctets dans un téléphone

L’obstacle central du projet, et celui qui a décidé de toute l’architecture.
Le premier réflexe

### Ne jamais décompresser l’archive

La façon normale de lire une archive consiste à l’ouvrir : on décompresse, on obtient des fichiers, on les lit. Sur un téléphone, ça demande de doubler la place occupée, ça fait patienter plusieurs minutes, et ça échoue dès que l’appareil est un peu plein.

Argentique ne décompresse rien. Sa base de données ne retient que **l’adresse de chaque photo à l’intérieur de l’archive**, un peu comme une table des matières. Une image n’est extraite qu’au moment où elle doit s’afficher, puis rangée dans un cache de 150 Mo qui oublie les plus anciennes.

Pour une grille de vignettes, les images sortent par lot, en une seule traversée de l’archive au lieu de trente. C’est ce qui sépare une galerie qui défile d’une galerie qui saccade.
Le détail qu’on ne demandait pas

### Relire une année comme on la vivait

Un mode permet de filtrer toute l’application sur un mois donné et de lui rendre l’apparence de l’époque : sépia façon 2014, plat façon 2018, ou actuel. Le sélecteur ne propose que **les mois réellement habités par votre archive**, jamais un mois vide.
La pièce manquante

### Écrire moi-même le module natif

Rien de tout cela n’était possible avec les outils existants. Les bibliothèques disponibles savent décompresser une archive entière ; aucune ne sait piocher un fichier précis au milieu de plusieurs gigaoctets sans lire le reste.

J’ai donc écrit ce morceau à la main, deux fois : en Kotlin pour Android, en Swift pour iOS. Treize fonctions de chaque côté, rigoureusement les mêmes, pour que l’application se comporte pareil sur les deux systèmes.
Ce que j’ai raté, et comment je l’ai vu

Six de ces treize fonctions ont manqué côté iOS pendant un bon moment. Le pire, c’est que l’import ne plantait pas : il _réussissait_, sans importer la moindre conversation. Une panne silencieuse, le genre de défaut qui coûte le plus cher, puisque rien n’indique qu’il faut aller chercher.

Une revue de code systématique l’a rattrapé, en comparant les fonctions déclarées de chaque côté au lieu de se fier au fait que l’application démarrait. **La parité est complète depuis**, et elle est contrôlée à chaque modification.

## Ce que l’application refuse de deviner

Il arrive qu’une archive s’arrête en 2019 alors qu’on a publié jusqu’en 2023. Argentique le repère et vous le dit, parce qu’il n’y a pas pire façon d’apprendre un trou de quatre ans que de tomber dessus soi-même.

En revanche, elle n’invente pas d’explication. Un export tronqué par Meta, un téléchargement interrompu, des publications supprimées il y a des années : depuis le téléphone, **rien ne permet de trancher entre ces causes**. L’application les présente donc comme des hypothèses, et écrit qu’elle ne sait pas laquelle est la bonne.

Même logique pour les dates, affichées telles qu’elles ont été enregistrées, jamais sous la forme « il y a tant de temps ». Une archive est figée, et la seule date qui ait du sens reste celle du jour où la photo a été publiée.

**Principe.** Le même que pour le verrou réseau : mieux vaut **dire « je ne sais pas »** qu’avancer une explication plausible.

**Langue.** Interface, messages d’erreur et commentaires du code : tout est en français.

## L’application

Captures prises sur une archive de démonstration, les vraies contenant des conversations privées.

## L’état du chantier

Sur Android, l’application fonctionne de bout en bout : on importe son archive, et on retrouve son fil, ses conversations, ses stories et ses statistiques. C’est cette version qui est en test aujourd’hui, avant publication.

Ce qui est en place a été mesuré : **1 353 tests automatiques** répartis en 64 suites, 94 % du code couvert, un contrôle qui refuse toute version instable des dépendances, et un garde-fou qui bloque l’ajout accidentel de données personnelles dans le dépôt.

Le module natif est écrit pour les deux systèmes, mais la sortie se fera d’abord sur Android. La version iOS suivra.

**Prochaine étape.** Recette complète sur appareil, puis publication.

**Revue.** Le code a été audité par écrit, défauts inclus. [Ma méthode](https://noah-baron.fr/#methode).

---

Source : https://noah-baron.fr/argentique
