Outils

serve-sim : j’ai testé le simulateur iOS dans le navigateur

14 juillet 2026 Mehdi 17:22
serve-sim : j’ai testé le simulateur iOS dans le navigateur

serve-sim est un outil qui promet de rendre un simulateur Apple accessible depuis un navigateur, un peu comme un npx serve pour iOS Simulator. Mon verdict court : l’idée est excellente pour les équipes mobile et les agents de test, mais il faut accepter une contrainte forte, le vrai produit exige macOS, Xcode et Apple Silicon.

serve-sim, c’est quoi ?

serve-sim est un serveur local pour Apple Simulators. Il capture l’écran d’un simulateur iOS, iPadOS ou watchOS, expose un flux vidéo MJPEG ou H.264, puis ajoute une interface web React pour piloter la session.

L’intérêt est simple : au lieu de regarder le simulateur uniquement sur le Mac qui le fait tourner, on le transforme en cible web. Un développeur, un outil d’IA, un navigateur automatisé ou un poste distant peut alors interagir avec l’app en cours de test.

Le README annonce notamment : gestes tactiles, touches clavier, boutons hardware, rotation, logs, actions récentes, glisser déposer de médias, injection de caméra synthétique et skill agent pour Claude Code, Cursor, Codex CLI ou Gemini CLI.

Point testé Résultat observé
Dépôt EvanBacon/serve-sim
Package npm installé serve-sim 0.1.44
Runtime demandé Node 20+
Système requis macOS avec Xcode CLI, Apple Silicon selon le README
Dépendances npm directes inspect-webkit, sonner, ws
Interface web HTML de preview servi par le middleware
Test complet simulateur Bloqué sur Linux, pas de xcrun simctl

Installation de serve-sim : ce que j’ai vraiment lancé

J’ai cloné le dépôt dans /tmp, lu le README, les scripts et les sources TypeScript. Le projet est un monorepo avec un package principal packages/serve-sim. Le build de développement utilise Bun, mais le package publié vise bien Node pour l’usage courant.

Pour tester l’installation utilisateur, je suis passé par npm dans un dossier temporaire :

npm init -y
npm install serve-sim@latest
node -e "const p=require('./node_modules/serve-sim/package.json'); console.log(p.version)"

Résultat : installation OK, 8 paquets ajoutés, 0 vulnérabilité npm signalée, version installée 0.1.44.

J’ai aussi exporté les variables OpenAI et OpenRouter demandées avant les essais. serve-sim ne m’a pas demandé de LLM ni de clé API dans ce parcours, ce qui est logique : c’est un outil de simulation et de pilotage, pas un agent autonome.

serve-sim à l’usage : commandes, UI et sortie réelle

Premier point positif : l’aide CLI est claire. Elle liste le mode serveur, le mode sans preview, les gestes, le tap, les boutons, le texte, la rotation, les permissions, les options d’UI et la caméra.

Comme mon environnement d’exécution est Linux, npx serve-sim a d’abord renvoyé un Permission denied, probablement lié à l’exécution depuis /tmp dans ce conteneur. J’ai contourné ce point en lançant directement le binaire Node publié :

node node_modules/serve-sim/dist/serve-sim.js --help
node node_modules/serve-sim/dist/serve-sim.js --list
node node_modules/serve-sim/dist/serve-sim.js --no-preview

La commande d’aide produit bien la sortie complète. La commande de liste renvoie un JSON minimal :

{"running":false}

C’est cohérent : aucun helper de simulateur n’est actif.

Le test le plus important était le lancement réel. Là, serve-sim a échoué proprement :

/bin/sh: 1: xcrun: not found
/bin/sh: 1: xcrun: not found
No device specified and no available iOS simulator found.

Ce n’est pas un bug mystérieux, c’est la frontière du produit. serve-sim s’appuie sur xcrun simctl, donc sur Xcode. Sans Mac, il ne peut pas créer un flux de simulateur. Il ne simule pas un iPhone dans Node, il sert un vrai Apple Simulator.

J’ai quand même monté le middleware serve-sim/middleware dans un petit serveur HTTP Node pour voir ce que l’interface produit côté web. L’endpoint / sert une page Simulator Preview d’environ 422 Ko, et /api renvoie null quand aucune session n’est disponible. C’est utile pour vérifier que la preview est bien embarquée dans le package npm, mais ce n’est pas un remplacement du test sur Mac.

Ce que j’aime dans serve-sim

Le concept est très bon. Pour une équipe mobile, partager un simulateur dans un navigateur peut réduire énormément les frictions : QA à distance, démo rapide, review d’une app interne, test piloté par un agent.

J’aime aussi le choix d’être agnostique. Le README insiste sur le fait que l’outil n’est pas réservé à Expo ou React Native. Il parle à Apple Simulator, pas à un framework applicatif précis.

Autre point solide : la surface CLI couvre les actions qui comptent vraiment pour du test automatisé. Taper du texte, envoyer un bouton Home, tourner l’appareil, injecter une caméra, consulter les événements, ce sont des primitives concrètes. Pour un agent, ce genre de petites commandes vaut souvent mieux qu’une grosse API trop abstraite.

Côté sécurité DevOps, j’apprécie que le serveur se lie par défaut à 127.0.0.1. Le code commente explicitement que l’exposition réseau doit être volontaire, car le middleware contient des routes d’exécution shell. C’est exactement le genre de détail que je veux voir avant de conseiller un outil à une équipe.

Les limites de serve-sim : ce qu’il faut savoir avant d’adopter

La limite numéro un est non négociable : il faut un Mac compatible, avec Xcode et un simulateur disponible. Dans mon test Linux, le produit s’arrête avant de produire un flux vidéo, faute de xcrun.

Deuxième limite : ce n’est pas un SaaS prêt à cliquer. Pour faire un usage distant sérieux, il faut opérer le Mac hôte, gérer le tunnel, sécuriser l’accès, tuer les helpers, surveiller les ports et éviter d’exposer la route shell au mauvais réseau.

Troisième limite : le package est encore jeune. La version installée était 0.1.44. Ce n’est pas forcément mauvais, Evan Bacon connaît très bien l’écosystème Expo, mais je le traiterais comme un outil à essayer en environnement de dev avant de le mettre dans un pipeline critique.

Enfin, mon test n’a pas pu valider la promesse la plus importante, le vrai streaming 60 FPS d’un simulateur. Je peux confirmer l’installation npm, la CLI, le comportement d’erreur, le middleware et la preview web. Je ne peux pas prétendre avoir piloté Safari ou une app iOS depuis ce conteneur Linux.

Est-ce que serve-sim marche vraiment ?

Oui, sur le périmètre que j’ai pu vérifier : le package s’installe, la CLI répond, le serveur web de preview existe, l’API reflète l’absence de session, et l’outil détecte proprement l’absence de simulateur.

Mais le vrai verdict technique dépend d’un test sur Mac Apple Silicon. Là seulement, on peut juger la latence, la fluidité vidéo, la fiabilité des gestes, l’injection caméra et la robustesse sur une session longue.

Pour moi, le signal est bon : l’architecture colle au problème réel, le README est précis, les commandes sont orientées usage, et les erreurs observées sont explicables. Ce n’est pas une coquille vide. C’est plutôt un outil spécialisé qui demande le bon terrain.

Faut-il adopter serve-sim ?

Mon verdict : essayer, pas adopter aveuglément.

Si vous développez des apps iOS sur Mac et que vous voulez donner un accès navigateur à un simulateur, serve-sim mérite clairement un test. Il peut devenir très pratique pour des agents de coding, des tests exploratoires, une QA distribuée ou une démo interne.

Si vous êtes sur Linux, Windows, CI standard ou infra sans Mac, passez votre chemin pour l’instant. serve-sim ne remplace pas macOS et Xcode. Il les rend accessibles autrement.

Ma recommandation de freelance sécu/DevOps : lancez-le d’abord en local, gardez le bind sur 127.0.0.1, testez avec une app non sensible, puis seulement ensuite regardez tunnel, réseau et intégration agent.

FAQ

serve-sim fonctionne-t-il sur Linux ?

Non pour le vrai streaming d’un simulateur. Mon test Linux confirme que l’outil cherche xcrun simctl, donc Xcode et macOS sont nécessaires.

serve-sim est-il utile sans Expo ?

Oui en théorie. Le README indique que l’outil est agnostique et parle à Apple Simulator, pas seulement à Expo ou React Native.

serve-sim est-il sûr à exposer sur un réseau ?

Pas sans précaution. Le serveur se limite par défaut à 127.0.0.1, et le code mentionne une route d’exécution shell, donc l’exposition LAN ou tunnel doit être protégée et volontaire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *