Insights des mises à jour EAS
Interrogez la santé des mises à jour EAS publiées directement depuis la CLI : lancements, lancements échoués, taux de crash, utilisateurs uniques, taille de charge utile, répartition des utilisateurs embarqués par rapport à OTA par canal, et les mises à jour les plus populaires par version runtime. Les données sont les mêmes que celles qui alimentent les pages de détails de mise à jour et de canal sur expo.dev ; ces commandes les exposent dans le terminal en format humain et JSON.
Quand utiliser cette skill
Utilisez-la lorsque l'utilisateur souhaite évaluer la santé ou l'adoption d'une mise à jour EAS publiée : taux de crash, nombre d'installations, utilisateurs uniques, taille du bundle, ou la répartition entre utilisateurs embarqués et OTA sur un canal.
Exemples de prompts :
- « Comment se comporte la dernière mise à jour ? »
- « La dernière mise à jour est-elle saine ? »
- « La nouvelle version crash-t-elle plus que la précédente ? »
- « Combien d'utilisateurs sont sur la dernière mise à jour par rapport au build embarqué ? »
- « Quelle mise à jour est la plus populaire en production en ce moment ? »
- « Quelle est la taille de notre bundle de mise à jour ? »
Convient également pour : suivi du déploiement post-publication et détection de régressions.
Ne l'utilisez pas lorsque l'utilisateur a besoin de détails de crash par utilisateur ou de rapports au niveau des appareils ; cette skill n'expose que les métriques EAS agrégées.
Prérequis
eas-cliinstallé (npm install -g eas-cli).- Connecté :
eas login. - Pour
channel:insights: exécutez depuis un répertoire de projet Expo (la commande résout l'ID du projet à partir deapp.json).update:insightsnécessite seulement une connexion.
Commandes en un coup d'œil
| Commande | Objectif |
|---|---|
eas update:list |
Découvrir les groupes de mises à jour récents, leurs IDs group, et les noms de branches |
eas update:insights <groupId> |
Lancements par plateforme, lancements échoués, taux de crash, utilisateurs uniques, taille de charge utile, ventilation quotidienne |
eas update:view <groupId> --insights |
Détails du groupe de mises à jour + les mêmes métriques ajoutées |
eas channel:insights --channel <name> --runtime-version <version> |
Nombres d'utilisateurs embarqués/OTA, mises à jour les plus populaires, métriques cumulatives pour un canal + runtime |
Tous supportent --json --non-interactive pour l'analyse programmatique.
Découvrir les IDs
Avant d'interroger les insights pour un groupe de mises à jour, vous avez besoin de son ID group. Utilisez eas update:list avec soit --branch <name> (mises à jour sur cette branche) soit --all (mises à jour sur toutes les branches). Passez toujours --json --non-interactive lors d'une exécution non-interactive ; sans un flag de branche/--all, la commande vous demandera sinon une sélection de branche :
# Dernier group id sur toutes les branches
eas update:list --all --json --non-interactive | jq -r '.currentPage[0].group'
# Dernier group id sur une branche spécifique
eas update:list --branch production --json --non-interactive | jq -r '.currentPage[0].group'
La réponse JSON contient un tableau currentPage avec une entrée par groupe de mises à jour (les deux plateformes d'une même publication sont regroupées en une seule entrée) :
{
"currentPage": [
{
"branch": "production",
"message": "\"Fix checkout crash\" (1 week ago by someone)",
"runtimeVersion": "1.0.6",
"group": "03d5dfcf-736c-475a-8730-af039c3f4d06",
"platforms": "android, ios",
"isRollBackToEmbedded": false
}
]
}
Les entrées contiennent aussi codeSigningKey et rolloutPercentage, mais uniquement quand ces fonctionnalités sont en use pour le groupe (les valeurs non définies sont omises de la sortie JSON).
Quand appelée avec --branch <name>, la réponse inclut aussi name (le nom de la branche) et id (l'ID de la branche) au niveau supérieur.
eas update:insights <groupId>
Affiche lancements, lancements échoués, taux de crash, utilisateurs uniques, nombre d'actifs de lancement, et taille de charge utile moyenne pour un seul groupe de mises à jour, ventilés par plateforme (iOS, Android), plus une ventilation quotidienne des lancements et des échecs.
Utilisation basique
eas update:insights 03d5dfcf-736c-475a-8730-af039c3f4d06
Flags
| Flag | Description |
|---|---|
--days <N> |
Remonter N jours. Par défaut : 7. Mutuellement exclusif avec --start/--end. |
--start <iso-date> / --end <iso-date> |
Plage de temps explicite, ex. --start 2026-04-01 --end 2026-04-15. |
--platform <ios\|android> |
Filtrer une seule plateforme. Omettez pour voir toutes les plateformes du groupe. |
--json |
Sortie lisible par machine. Implique --non-interactive. |
--non-interactive |
Requis lors de scripts. |
Forme de sortie JSON
Niveau supérieur : groupId, timespan (start, end, daysBack), et platforms[] avec une entrée par plateforme pour laquelle le groupe a été publié. Chaque entrée de plateforme a updateId, totals (uniqueUsers, installs, failedInstalls, crashRatePercent), payload (launchAssetCount, averageUpdatePayloadBytes), et une série temporelle daily[] de { date, installs, failedInstalls }.
Pour le schéma complet et la référence des champs, voir references/update-insights-schema.md.
Champs importants pour l'évaluation de la santé :
platforms[].totals.crashRatePercent, calculé commefailedInstalls / (installs + failedInstalls) * 100. Zéro quand il n'y a pas d'installations.platforms[].totals.installsetuniqueUsersdonnent le signal d'adoption.platforms[].dailyest une série temporelle, utile pour détecter un pic soudain d'échecs.
Erreurs
Could not find any updates with group ID: "<id>"— le groupe n'existe pas ou vous n'avez pas accès.Update group "<id>" has no ios update (available platforms: android)—--platform iosa été utilisé mais le groupe n'a pas été publié pour iOS.EAS Update insights is not supported by this version of eas-cli. Please upgrade ...— le serveur a déprécié un champ sur lequel la CLI dépend. Exécuteznpm install -g eas-cli@latest.
eas update:view <groupId> --insights
Étend la sortie standard update:view avec les mêmes insights par plateforme, en ligne.
# Lisible par humain
eas update:view 03d5dfcf-... --insights
eas update:view 03d5dfcf-... --insights --days 30
# JSON : enveloppé comme { updates: [...], insights: {...} }
eas update:view 03d5dfcf-... --json --insights
Sans --insights, update:view se comporte exactement comme avant — pas de changement de forme JSON pour les consommateurs existants. Les flags --days / --start / --end s'appliquent seulement quand --insights est défini ; les passer seuls produit une erreur.
eas channel:insights --channel <name> --runtime-version <version>
Affiche, par canal, combien d'utilisateurs sont sur le build embarqué par rapport aux mises à jour over-the-air et quelles mises à jour attirent le plus de trafic. Doit être exécutée depuis un répertoire de projet Expo.
Utilisation basique
eas channel:insights --channel production --runtime-version 1.0.6
Flags
| Flag | Description |
|---|---|
--channel <name> |
Requis. Le nom du canal (ex. production, staging). |
--runtime-version <version> |
Requis. Doit correspondre exactement à ce qui a été publié. Vérifiez les valeurs runtimeVersion dans update:list. |
--days <N> |
Remonter N jours. Par défaut : 7. |
--start / --end |
Plage de temps explicite, comme update:insights. |
--json / --non-interactive |
Sortie lisible par machine. |
Forme de sortie JSON
Niveau supérieur : channel, runtimeVersion, timespan, embeddedUpdateTotalUniqueUsers, otaTotalUniqueUsers, mostPopularUpdates[] (chacun avec rank, groupId, message, platform, totalUniqueUsers), cumulativeMetricsAtLastTimestamp[], plus les objets en forme de graphique uniqueUsersOverTime et cumulativeMetricsOverTime avec labels et datasets.
Pour le schéma complet et la référence des champs, voir references/channel-insights-schema.md.
Champs importants :
embeddedUpdateTotalUniqueUsersest le nombre d'utilisateurs exécutant le build embarqué (regroupé dans le binaire).mostPopularUpdates[]sont les mises à jour classées partotalUniqueUsers. Attention : c'est le top-N que le serveur retourne ;otaTotalUniqueUsersest une somme de cette liste et peut sous-estimer la portée OTA totale si plus de top-N mises à jour sont actives.uniqueUsersOverTimeetcumulativeMetricsOverTimesont des séries de données quotidiennes pour les graphiques.
Erreurs
Could not find channel with the name <name>— typo ou mauvais compte.- « No update launches recorded » dans le tableau /
mostPopularUpdatesvide en JSON — aucune mise à jour OTA n'a été lancée pour ce canal + runtime. Habituellement cela signifie que le canal ne sert que le build embarqué.
Workflows courants
Vérifier que la mise à jour que je viens de publier est saine
# 1. Récupérez la dernière publication sur production
GROUP_ID=$(eas update:list --branch production --json --non-interactive \
| jq -r '.currentPage[0].group')
# 2. Donnez-lui un peu de temps d'adoption (minutes à heures), puis vérifiez le taux de crash
eas update:insights "$GROUP_ID" --json --non-interactive \
| jq '.platforms[] | {platform, installs: .totals.installs, crashRate: .totals.crashRatePercent}'
Comparez le crashRate entre plateformes et par rapport aux versions précédentes ; les pics soudains ou les comportements asymétriques (iOS en spike pendant qu'Android est plat, ou vice versa) sont le signal pour enquêter.
Comparer l'adoption entre deux canaux
for channel in production staging; do
echo "--- $channel ---"
eas channel:insights --channel "$channel" --runtime-version 1.0.6 --json --non-interactive \
| jq '{
channel,
embedded: .embeddedUpdateTotalUniqueUsers,
ota: .otaTotalUniqueUsers,
topUpdate: .mostPopularUpdates[0]
}'
done
Détecter une régression du déploiement dans les 24 dernières heures
eas update:insights "$GROUP_ID" --days 1 --json --non-interactive \
| jq '.platforms[] | select(.totals.crashRatePercent > 1)'
Résumer les métriques du groupe pour les notes de publication
eas update:view "$GROUP_ID" --insights --days 30
Détails du groupe lisibles par humain plus 30 jours de lancements/échecs par plateforme — approprié pour coller dans un changelog ou un examen d'incident.
Conseils de sortie
- Passez JSON dans
jq; les charges utiles sont structurées pour un filtrage facile. --jsonimplique--non-interactive, mais passer les deux est explicite et adapté aux scripts.- Les dates dans
daily[].datesont des timestamps ISO UTC ; le tableau lisible par humain les rend sous formeYYYY-MM-DD(UTC). - Les étiquettes du tableau de la CLI disent « Launches » / « Crashes » tandis que JSON utilise
installs/failedInstalls. Même champ, nom d'affichage différent.
Limitations
- Utilisateurs uniques entre plateformes peuvent double-compter les utilisateurs qui exécutent la même publication sur iOS et Android. Le même avertissement s'applique à
otaTotalUniqueUsersdans les insights de canal, qui est une somme surmostPopularUpdates. - Les publications fraîches peuvent afficher des zéros pendant une courte période tandis que le pipeline de métriques rattrape.
- Les installations sont des téléchargements, pas des lancements : le champ
installs/ « Launches » compte les utilisateurs qui ont téléchargé le manifeste et l'actif de lancement. Une exécution confirmée ne s'enregistre que lors du prochain contrôle de mise à jour de l'utilisateur (généralement jusqu'à 24h plus tard, selon la politique de mise à jour de l'application). Les métriques accusent donc un léger décalage par rapport à l'état du monde réel. - Les crashes sont auto-signalés :
failedInstalls/ « Crashes » compte les mises à jour qui ont erré lors de l'installation/lancement et ont été signalées lors du prochain contrôle de mise à jour. Les crashs qui ne déclenchent pas une requête de mise à jour (ex. suppression de processus avant récupération) n'apparaîtront pas.