Aller au contenu
RECDiagnosticSDK

Enregistrez une fois. Rejouez à l’infini.

Voyez chaque requête de votre app iOS.Rejouez n’importe quel bug.

Un débogueur réseau intégré à l’app : deux lignes dans votre AppDelegate, ni proxy, ni certificat à installer. Votre SSL pinning continue de fonctionner.

  1. 01

    Capturer

    Chaque requête, au moment où l’app l’envoie.

  2. 02

    Inspecter

    Regroupées par l’écran qui les a envoyées.

  3. 03

    Partager

    Un seul fichier chiffré pour votre équipe.

  4. 04

    Rejouer

    Mêmes réponses, même bug, partout.

Le problème

« Ça n’arrive que sur son téléphone. »

OK en dev. Cassé en recette.

Le QA trouve un bug sur son téléphone. Sur le vôtre, tout marche. Autre compte, autres données, ou autre backend : le bug ne se montre jamais chez vous. Sauf s’il a été enregistré.

POST /v1/transfers · Même requête, trois endroits
EnvironnementStatutRésultat
Backend recette · téléphone du QA422Bug
Backend dev · votre simulateur200Non reproductible
Replay · votre simulateur422Reproduit

Replay

Son bug. Votre appareil. Mêmes réponses.

Les requêtes correspondantes reçoivent les réponses enregistrées. Tout le reste part sur le réseau, sans modification.

  1. 01

    Votre QA tombe sur le bug

    Tout est déjà enregistré, écran par écran.

    Session en direct2 requêtes
    TransferViewController10:32:08
    GET/v1/beneficiaries20097ms
    POST/v1/transfers422302ms
  2. 02

    Il vous envoie la session

    En JSON simple, ou chiffrée avec Safe export.

    • JSON simple

      Lisible par la personne qui le reçoit.

      Dx_4f2a9c1.json · 84 ko

      Il s’ouvre partout : éditeur de texte, Session Studio, vos propres outils. Pour le consulter et le rejouer dans l’app, importez-le depuis l’écran History du SDK.

    • Safe export

      Chiffré par mot de passe (AES-256-GCM).

      Dx_4f2a9c1_S.json · 84 ko

      Après l’import, la session reste verrouillée : impossible de la consulter ou de la rejouer tant que le mot de passe n’a pas été saisi pour la déchiffrer.

  3. 03

    Vous la rejouez

    Mêmes réponses, même bug, sur votre simulateur ou votre appareil de test.

    Replay actif3 requêtes
    TransferViewController10:32:08
    GET/v1/beneficiariesreplay20097ms
    GET/v1/limitsnetwork20088ms
    POST/v1/transfersreplay422302ms

    1 requête absente de l’enregistrement est partie sur le réseau

    Correspondance : Strict (méthode, chemin, paramètres) ou Ignore query (méthode, chemin).

Comment fonctionne le replay

Une session. Toutes les réponses.

Le contexte entre la requête et la réponse.

Pas une simple liste d’URL : l’écran qui a fait chaque requête, ce qui s’est passé ensuite, et la session exacte vécue par votre utilisateur.

01 / LIVE

Chaque requête, en temps réel.

La liste en direct des requêtes de votre app, regroupées par l’écran affiché quand elles sont parties. Recherche et filtres par classe de statut et par méthode.

Tous2xx4xx5xx
GET/v1/accounts200124ms
GET/v1/me20086ms
GET/v1/notifications?unread=true200141ms
GET/v1/beneficiaries20097ms
Découvrir Live

02 / SCREEN MAP

Le trafic, dans son contexte.

Chaque visite d’un UIViewController qui lance des requêtes devient un chapitre. La chronologie de navigation est préservée, même quand un écran est visité deux fois.

  1. HomeViewController10:32:043
  2. TransferViewController10:32:082
  3. HomeViewController10:32:151
Découvrir Screen Map

03 / HISTORIQUE DES SESSIONS

Chaque session, conservée.

Les sessions sont enregistrées automatiquement quand l’app passe en arrière-plan. Rouvrez n’importe quelle session passée dans la même vue que Live.

  • Dx_4f2a9c1.jsonAujourd’hui, 10:32 · Cet iPhone84 ko
  • Dx_9b13e07.jsonHier, 18:05 · Cet iPhone212 ko
  • IMP_qa-transfer-bug.jsonLun., 14:41 · Importée96 ko
Découvrir Historique des sessions

05 / PARTAGE SÉCURISÉ

Partagez une session. Seuls ceux qui ont le mot de passe peuvent la lire.

Exportez une session en JSON simple, ou chiffrez-la en AES-256-GCM avec un mot de passe que vous choisissez. Sans ce mot de passe, le fichier ne s’ouvre pas : ni dans l’app, ni dans Session Studio.

••••••••
Dx_4f2a9c1_S.jsonAES-256-GCM
Découvrir Partage sécurisé

Nous écoutons. Nous ne touchons à rien.

Votre requête ne quitte jamais votre session.

La plupart des débogueurs interceptent votre requête et la renvoient depuis leur propre session. Nous observons la URLSession de votre app : les challenges d’authentification, les certificats, les cookies et la politique TLS continuent de fonctionner.

Lire le fonctionnement

Intercepteur classique

Votre appSession du débogueurRéseau

Renvoyée depuis une seconde session : le pinning, les certificats et les en-têtes de session restent en route.

DiagnosticSDK

Votre appVotre session à l’écouteRéseau

Même requête, même délégué. Observée au passage, jamais renvoyée.

Une intégration minuscule

Deux lignes pour commencer à écouter.

Voir l’installation complète

Étape 1 · Ajouter le package

Dans Xcode : File → Add Package Dependencies…

https://github.com/elarbi-allam/DiagnosticSDK.git
Étape 2 · AppDelegate.swift
import DiagnosticSDK @mainfinal class AppDelegate: UIResponder, UIApplicationDelegate {  private lazy var networkInterceptor = NetworkInterceptor()   func application(_ application: UIApplication,                   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {    #if DEBUG    networkInterceptor.start()    #endif    return true  }}

Prêt quand vous l’êtes

Votre prochain rapport de bug se rejouera tout seul.

Commencer avec SPM