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.
Enregistrez une fois. Rejouez à l’infini.
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.
01
Capturer
Chaque requête, au moment où l’app l’envoie.
02
Inspecter
Regroupées par l’écran qui les a envoyées.
03
Partager
Un seul fichier chiffré pour votre équipe.
04
Rejouer
Mêmes réponses, même bug, partout.
Le problème
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é.
| Environnement | Statut | Résultat |
|---|---|---|
| Backend recette · téléphone du QA | 422 | Bug |
| Backend dev · votre simulateur | 200 | Non reproductible |
| Replay · votre simulateur | 422 | Reproduit |
Préprod, recette, feature flags, comptes de test : le bug n’existe que là où vous n’êtes pas.
Avec DiagnosticSDK
Le replay rejoue exactement les réponses enregistrées sur votre simulateur.
VPN, liste blanche d’IP, compte de test expiré, données modifiées depuis.
Avec DiagnosticSDK
Le fichier de session devient votre backend : chaque requête enregistrée y trouve sa réponse. Les autres partent sur le réseau comme d’habitude.
L’API n’existe pas encore, ou le serveur est indisponible, et l’équipe mobile attend.
Avec DiagnosticSDK
Créez des mocks dans Session Studio (formulaire ou cURL collé), chargez le fichier dans l’app et lancez le replay : chaque requête mockée reçoit sa réponse, comme si le backend était là.
Replay
Les requêtes correspondantes reçoivent les réponses enregistrées. Tout le reste part sur le réseau, sans modification.
01
Tout est déjà enregistré, écran par écran.
02
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.
03
Mêmes réponses, même bug, sur votre simulateur ou votre appareil de test.
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).
Une session. Toutes les réponses.
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
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.
02 / SCREEN MAP
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.
03 / HISTORIQUE DES SESSIONS
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.
05 / PARTAGE SÉCURISÉ
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.
Nous écoutons. Nous ne touchons à rien.
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.
Intercepteur classique
Renvoyée depuis une seconde session : le pinning, les certificats et les en-têtes de session restent en route.
DiagnosticSDK
Même requête, même délégué. Observée au passage, jamais renvoyée.
Une intégration minuscule
Étape 1 · Ajouter le package
Dans Xcode : File → Add Package Dependencies…
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