MFormations
Modern Mobile Engineering

Chapitre 20

20 - QCM d'auto-évaluation

20 - QCM d'auto-évaluation

Chapitre 20 — 100 QCM corrigés

Objectif : valider l'ensemble des connaissances des chapitres 01 à 18 au travers de 100 questions à choix multiples. Les réponses, commentées, sont données en fin de fichier.

Section 1 — Android (Questions 1 à 10)

Q1. Quel est le langage recommandé par Google pour le développement Android natif depuis 2019 ?

A. Java B. Kotlin C. C++ D. JavaScript

Q2. Que déclare l'élément <application> du fichier AndroidManifest.xml ?

A. Les activités et le point d'entrée de l'application B. La version du SDK de compilation C. Le chemin des ressources graphiques D. La configuration du système de build

Q3. Quel composant exécute un travail de longue durée sans interface utilisateur ?

A. Activity B. Fragment C. Service D. ContentProvider

Q4. Quelle est la différence principale entre onCreate et onStart d'une Activity ?

A. onCreate est appelé une seule fois, onStart à chaque retour au premier plan B. onCreate prépare la vue, onStart charge les données réseau C. onStart est appelé avant onCreate D. Aucune différence

Q5. Quel fichier Gradle centralise les versions de vos dépendances ?

A. gradle.properties B. libs.versions.toml C. settings.gradle.kts D. local.properties

Q6. Quel composant Compose est équivalent à RecyclerView ?

A. Column B. LazyColumn C. Scaffold D. Card

Q7. À quoi sert viewModelScope ?

A. Lancer des coroutines liées au cycle de vie du ViewModel B. Effectuer des appels réseau bloquants C. Créer des vues personnalisées D. Gérer la navigation entre écrans

Q8. Quel est le rôle du composant WorkManager ?

A. Planifier des travaux de fond garantis, même après redémarrage B. Afficher des notifications locales C. Gérer la rotation de l'écran D. Optimiser la compilation Kotlin

Q9. Quelle permission utilise le modèle runtime (octroi à l'exécution) ?

A. ACCESS_FINE_LOCATION B. INTERNET C. VIBRATE D. READ_APP_BADGE

Q10. Quel annotation Compose permet d'optimiser la recomposition en préservant une valeur ?

A. @Composable B. @Immutable C. @Stable D. @Preview

Section 2 — iOS (Questions 11 à 20)

Q11. Quel est le langage de programmation officiel d'Apple depuis 2014 ?

A. Objective-C B. Swift C. Kotlin D. Dart

Q12. Que représente le symbole ? dans let name: String? ?

A. Une valeur optionnelle pouvant être nil B. Une valeur obligatoire C. Une constante générique D. Un paramètre inout

Q13. Quelle structure UI, introduite en 2019, décrit l'interface de façon déclarative ?

A. UIKit B. AppKit C. SwiftUI D. CoreGraphics

Q14. Quel est le rôle d'un AppDelegate dans le cycle de vie iOS ?

A. Répondre aux événements du cycle de vie de l'application B. Gérer la mémoire du processeur C. Compiler le code Swift D. Créer les fichiers storyboard

Q15. Quelle API Swift gère la concurrence de façon moderne (async/await) ?

A. GCD et DispatchQueue B. OperationQueue C. La concurrence structurée (async let, TaskGroup) D. Thread solo

Q16. Comment déclarer une classe dont le comportement est décrit par un contrat ?

A. class avec override B. protocol puis extension C. struct avec mutating D. enum avec associatedValue

Q17. Quelle technique permet de lancer deux travaux async en parallèle dans Swift ?

A. DispatchQueue.main.async B. async let C. @escaping D. defer

Q18. Comment protéger des données partagées entre plusieurs acteurs concurrents ?

A. Un actor B. Un singleton C. Un enum D. Une struct mutée librement

Q19. Quelle balise Xcode permet d'associer l'interface à une classe ?

A. @IBOutlet / @IBAction B. @State C. @Published D. @ViewBuilder

Q20. Quel framework permet d'intercepter le trafic réseau en iOS (équivalent d'OkHttp) ?

A. URLSession B. CoreData C. Metal D. MapKit

Section 3 — Cross-platform (Questions 21 à 30)

Q21. Comment React Native exécute-t-il le JavaScript ?

A. Sur le thread principal de l'UI B. Sur un moteur JavaScript (JSC/Hermes) dans un thread séparé C. Sur le serveur D. En compilant directement en natif

Q22. Qu'est-ce que le « bridge » dans React Native ?

A. Le pont entre le code JS et le code natif B. Une librairie de navigation C. Un composant de liste D. Un outil de débogage

Q23. Quel hook React Native remplace componentDidMount ?

A. useMemo B. useEffect C. useReducer D. useLayoutEffect uniquement

Q24. Quel composant Flutter dessine un conteneur avec marge, padding et décorations ?

A. Text B. Container C. Button D. AppBar

Q25. En Flutter, comment gérer l'état global simplement avec le SDK (sans package) ?

A. InheritedWidget B. ValueNotifier C. Les deux D. Context seul

Q26. Quelle est la différence entre une StatefulWidget et une StatelessWidget ?

A. Une StatefulWidget possède un état mutable ; une StatelessWidget est immuable B. Une StatelessWidget est plus rapide car elle n'utilise pas le GPU C. Une StatefulWidget ne peut pas être reconstruite D. Aucune différence fonctionnelle

Q27. Qu'est-ce que l'objet buildContext en Flutter ?

A. La référence à la position du widget dans l'arbre B. Un modèle de données C. Un gestionnaire de base de données D. Un type de layout

Q28. Quel outil permet de compiler Flutter en code natif ?

A. Webpack B. Le compilateur Dart (AOT) avec l'engin Skia/Impeller C. React Native CLI D. Le navigateur

Q29. Qu'est-ce qu'Expo pour React Native ?

A. Un framework et une plateforme de build pour RN B. Un système de base de données C. Un langage de programmation D. Un simulateur iOS uniquement

Q30. Quel avantage principal du cross-platform ?

A. Un code unique pour Android et iOS (partiel ou total) B. Des performances toujours identiques au natif C. L'absence de SDK natif D. La gratuité des stores

Section 4 — Architecture (Questions 31 à 40)

Q31. Que signifie MVVM ?

A. Model-View-ViewModel B. Model-View-Vie-Mobile C. Multi-View-ViewModel D. Model-Vue-VueModèle (pattern Android uniquement)

Q32. Dans Clean Architecture, de quoi dépend le domaine ?

A. D'aucun framework externe B. D'Android SDK C. De Retrofit D. De la base de données

Q33. Quel est le rôle d'un use case ?

A. Orchestrer une règle métier de l'application B. Afficher l'interface utilisateur C. Gérer les permissions D. Compiler le code

Q34. Dans MVI, que représente un Intent ?

A. Une intention d'utilisateur (action) dans l'application B. Un composant Android de navigation C. Une classe de layout D. Un service de notification

Q35. Quel est l'avantage de l'« unidirectional data flow » ?

A. Un état prévisible et traçable B. Des animations plus fluides C. Une base de données plus rapide D. Un code moins verbeux toujours

Q36. Qu'est-ce qu'une « single source of truth » ?

A. Une seule source de données de référence pour l'état B. Un seul fichier par feature C. Un seul serveur backend D. Une seule activité dans l'application

Q37. À quoi sert l'injection de dépendances ?

A. Fournir les dépendances d'un objet au lieu de les créer lui-même B. Injecter du JavaScript dans l'UI C. Ralentir les builds D. Ajouter des logs automatiquement

Q38. Quel est le rôle de la couche data ?

A. Fournir les données (réseau, base, cache) B. Afficher les données C. Décrire les règles métier D. Gérer le rendu graphique

Q39. Pourquoi découper en modules Gradle ?

A. Limiter les recompilations, clarifier les responsabilités B. Réduire le nombre de fichiers Kotlin C. Cacher le code au Play Store D. Éviter les tests

Q40. Quelle est la différence entre une architecture en couches et en modules/features ?

A. Les couches séparent par responsabilité, les modules par domaine fonctionnel B. Aucune, ce sont des synonymes C. Les modules ne permettent pas les tests D. Les couches obligent à un seul fichier par couche

Section 5 — Data (Questions 41 à 50)

Q41. Quelle base de données est utilisée par Room en interne ?

A. SQLite B. PostgreSQL C. MySQL D. MongoDB

Q42. Comment Room expose-t-il des données réactives ?

A. Flow<List<T>> ou LiveData B. JSON C. String D. CompletableFuture seul

Q43. À quoi sert l'annotation @Dao ?

A. À définir une interface d'accès aux données B. À créer une table C. À configurer le thème D. À déclarer une permission

Q44. Quel framework Apple gère la persistance relationnelle graphique ?

A. CoreData B. Metal C. AVFoundation D. CoreGraphics

Q45. Que représente NSManagedObjectContext dans CoreData ?

A. L'espace de travail de l'app, où l'on crée et modifie des objets B. Le modèle de base de données C. Un framework réseau D. Un contrôleur de navigation

Q46. Quelle est la différence entre SharedPreferences et Room (Android) ?

A. SharedPreferences stocke des paires clé/valeur simples ; Room stocke des données structurées B. SharedPreferences est plus puissant C. Room ne supporte pas les requêtes D. Aucune différence

Q47. Comment stocker un secret (token) de façon sécurisée sur Android ?

A. Dans Android Keystore / EncryptedSharedPreferences B. Dans SharedPreferences en clair C. Dans le code source D. Dans un fichier JSON dans assets

Q48. Sur iOS, où stocker un secret de façon sécurisée ?

A. Dans le Keychain B. Dans UserDefaults C. Dans un fichier plist public D. Dans le code source

Q49. Qu'est-ce qu'une migration en base de données ?

A. Le passage d'un schéma à une version supérieure en préservant les données B. La copie de la base vers le réseau C. La suppression de la base D. Le chiffrement de la base

Q50. Qu'est-ce que le « offline-first » ?

A. Concevoir l'app pour fonctionner sans réseau en priorité, puis synchroniser B. Refuser le réseau par défaut C. N'utiliser que le cache serveur D. Supprimer toutes les données locales

Section 6 — Networking (Questions 51 à 60)

Q51. Quelle bibliothèque Android est un client HTTP typé avec annotations ?

A. Retrofit B. OkHttp seul C. Room D. Glide

Q52. Que permet un interceptor OkHttp ?

A. Intercepter et modifier les requêtes/réponses (auth, logs, cache) B. Créer des tables C. Gérer la mémoire D. Animer les vues

Q53. Comment décoder une réponse JSON en Swift moderne ?

A. JSONDecoder().decode(Type.self, from: data) B. JSONSerialization uniquement C. parse() D. Codable seulement avec NSArray

Q54. Quel est le rôle de URLSession ?

A. Effectuer des requêtes HTTP et gérer les téléchargements B. Sauvegarder des données C. Rendre des vues D. Déclencher des notifications

Q55. Quelle méthode HTTP est idempotente et généralement utilisée pour lire ?

A. GET B. POST C. DELETE D. PATCH

Q56. Que signifie « HTTP 429 » ?

A. Too Many Requests B. Not Found C. Unauthorized D. Internal Server Error

Q57. Quelle technologie permet une communication bidirectionnelle temps réel ?

A. WebSocket B. HTTP simple C. FTP D. SMTP

Q58. Qu'est-ce que le « payload » d'une requête ?

A. Le corps des données envoyées B. L'URL de la requête C. L'en-tête uniquement D. Le certificat SSL

Q59. Que fait try? await client.fetch() en Swift ?

A. Retourne une valeur optionnelle si une erreur est levée B. Échoue silencieusement toujours C. Annule la tâche D. Bloque le thread

Q60. Comment optimiser les téléchargements d'images ?

A. Cache mémoire + cache disque (Coil/Glide/SDWebImage) B. Charger toutes les images en mémoire C. Décoder en haute résolution toujours D. Utiliser le format BMP

Section 7 — Testing (Questions 61 à 70)

Q61. Quel est l'objectif d'un test unitaire ?

A. Vérifier une unité de code de façon isolée et rapide B. Vérifier l'ensemble du parcours utilisateur C. Tester les performances réseau D. Valider le design

Q62. Qu'est-ce qu'un « fake » en test ?

A. Une implémentation simulée d'une dépendance B. Un test qui échoue C. Une classe de production D. Un build de release

Q63. Que vérifie un test d'UI Compose ?

A. Le comportement de l'interface utilisateur B. La base de données C. La performance CPU D. Le design du thème uniquement

Q64. Quelle bibliothèque Android permet de tester les interactions UI ?

A. Espresso (ou Compose UI Test) B. JUnit uniquement C. Mockito seulement pour le réseau D. LeakCanary

Q65. Quel outil E2E mobile est écrit en YAML et multi-plateforme ?

A. Maestro B. JaCoCo C. Lint D. SonarQube

Q66. Que mesure la couverture de code ?

A. La part de code exécuté par les tests B. La vitesse des tests C. La qualité du design D. Le nombre de bugs

Q67. Quelle est la structure recommandée pour un test ?

A. Arrange – Act – Assert (AAA) B. Read – Write – Delete C. Build – Run – Deploy D. Compile – Link – Execute

Q68. Qu'est-ce que le « snapshot testing » ?

A. Comparer le rendu à une référence enregistrée B. Tester les captures d'écran en réseau C. Un test de performance D. Un test de sécurité

Q69. Pourquoi tester sur des devices/émulateurs réels (E2E) ?

A. Pour vérifier l'intégration avec le vrai environnement (network, sensors, GPU) B. Pour économiser du temps de build C. Pour éviter d'écrire des tests unitaires D. Ce n'est jamais utile

Q70. Que signifie « test qui flak(e) » ?

A. Un test qui échoue de manière intermittente, non reproductible B. Un test qui réussit toujours C. Un test qui se déploie automatiquement D. Un test de sécurité

Section 8 — Sécurité (Questions 71 à 80)

Q71. Quel standard référence les exigences de sécurité mobile ?

A. OWASP MASVS B. ISO 27001 seul C. WCAG D. GDPR seul

Q72. Quel est le plus grand risque de stocker des données sensibles en clair ?

A. L'accès par des applications ou processeurs malveillants sur le device B. Une batterie plus faible C. Une UI plus lente D. Un build plus long

Q73. Qu'est-ce que le « code signing » ?

A. La signature cryptographique qui certifie l'origine et l'intégrité de l'app B. La compression du code source C. La licence de l'IDE D. Le hash des ressources graphiques

Q74. Que protège le « certificate pinning » ?

A. L'app contre l'interception en épinglant les certificats attendus B. La batterie C. Les ressources graphiques D. La vitesse de compilation

Q75. Quelle donnée est la plus sensible à chiffrer en transit ?

A. Les identifiants et données personnelles B. Les images publiques C. Les logs de debug D. Les fichiers d'icônes

Q76. Que permet la biométrie (Face ID / empreinte) dans une app ?

A. Authentifier l'utilisateur de façon forte et pratique B. Chiffrer les images C. Suivre la publicité D. Compresser la vidéo

Q77. Quel est le rôle du sandbox Android/iOS ?

A. Limiter l'accès d'une app aux ressources du système B. Accélérer le réseau C. Sauvegarder les données automatiquement D. Rendre l'app gratuite

Q78. Comment éviter les attaques « man-in-the-middle » sur le réseau ?

A. TLS/HTTPS + validation des certificats + pinning B. HTTP non chiffré C. Compression gzip D. Requêtes POST seulement

Q79. Que protège le « Data at rest » ?

A. Les données stockées sur l'appareil B. Les données en transit C. Les données en RAM seulement D. Rien

Q80. Quel est le risque d'un « API key » codée en dur dans l'app ?

A. Extraction par les attaquants via désassemblage B. Une app plus lourde C. Une UI instable D. Une consommation batterie

Section 9 — DevOps (Questions 81 à 90)

Q81. Que signifie CI ?

A. Continuous Integration (intégration continue) B. Code Interpreter C. Cloud Interface D. Compile Instant

Q82. Quel est le rôle de Fastlane ?

A. Automatiser les tâches de build et de déploiement B. Gérer les données C. Analyser la sécurité D. Créer les UI

Q83. Qu'est-ce qu'un « build pipeline » ?

A. La chaîne automatisée de compilation, tests et livraison B. Un fichier de thème C. Un type de base de données D. Un plugin de design

Q84. Quel est l'outil de CI/CD cloud multi-plateforme le plus courant ?

A. GitHub Actions (ou GitLab CI, Jenkins) B. Gradle seul C. Xcodebuild seul D. CocoaPods

Q85. Comment distribuer une version de test Android en interne ?

A. Android App Bundle / APK via lien (Firebase App Distribution…) B. Uniquement via le Play Store public C. Via un QR code magique D. Par Bluetooth

Q86. Sur iOS, comment distribuer une build bêta ?

A. TestFlight B. Le navigateur web C. Par SMS D. Les stores publics uniquement

Q87. Que contient le « Build Variants » Android ?

A. Combinaisons buildType × productFlavor (debug/release × flavor) B. Les fichiers de thème C. Les dépendances versionnées D. Les emulators

Q88. Qu'est-ce que l'observabilité mobile ?

A. Collecter logs, metrics et traces pour surveiller l'app en production B. Rendre l'app accessible C. Optimiser le design D. Le suivi des users du store

Q89. Que fait la « dSYM » sur iOS ?

A. Symbolise les crashs pour l'analyse B. Compile le code C. Chiffre les données D. Dessine les vues

Q90. Quel outil analyse les crashs et issues en production (exemple) ?

A. Crashlytics / Firebase Crashlytics B. Gradle C. Xcode préview D. le compilateur Swift

Section 10 — PWA (Questions 91 à 100)

Q91. Qu'est-ce qu'une PWA ?

A. Une application web avec capacités d'app native (installable, offline, notifications) B. Une application iOS uniquement C. Un site statique sans JS D. Un framework mobile

Q92. Quel composant central permet le mode hors-ligne ?

A. Le Service Worker B. Le WebView C. Le DOM D. Le CSS Grid

Q93. Quel fichier JSON déclare l'installation de la PWA ?

A. manifest.json B. package.json C. config.xml D. webpack.json

Q94. Quel stockage est recommandé pour les données hors-ligne d'une PWA ?

A. IndexedDB B. Les cookies C. localStorage toujours D. Le cache DNS

Q95. Qu'est-ce que le « app shell » ?

A. La structure HTML/CSS/JS minimale à mettre en cache pour un lancement rapide B. Le fichier de configuration C. Une coquille de notification D. Un outil de build

Q96. Comment une PWA peut-elle envoyer des notifications ?

A. Via l'API Push Notifications (Web Push) B. Uniquement via le serveur SMTP C. Impossibilité totale D. Via la caméra

Q97. Quel est le critère « LCP » dans les Core Web Vitals ?

A. Le plus grand contenu visible (temps de chargement) B. La latence du réseau C. Le nombre de requêtes D. La taille du bundle

Q98. Quelle technologie permet le stockage hors-ligne de gros volumes en PWA ?

A. Cache API + IndexedDB B. sessionStorage C. Le DOM D. JSON inline

Q99. Que signifie « Installable » pour une PWA ?

A. L'utilisateur peut l'installer sur son écran d'accueil B. Elle s'installe automatiquement dans tous les stores C. Elle remplace le Play Store D. Elle nécessite un APK

Q100. Quelle est la principale limite des PWA par rapport au natif ?

A. Accès matériel limité et dépendance au navigateur B. Le langage de programmation C. L'impossibilité d'avoir une UI D. La gratuité


Corrigé commenté

Android — Q1 à Q10

QRéponseJustification
Q1BKotlin est le langage officiellement recommandé par Google (2019).
Q2A<application> déclare les composants et le point d'entrée.
Q3CUn Service exécute des tâches de fond sans UI.
Q4AonCreate une fois ; onStart à chaque retour au premier plan.
Q5Blibs.versions.toml centralise les versions (version catalog).
Q6BLazyColumn rend les listes de façon paresseuse, comme RecyclerView.
Q7AviewModelScope lie les coroutines au cycle de vie du ViewModel.
Q8AWorkManager garantit l'exécution des tâches différées, même après redémarrage.
Q9ALa localisation nécessite une permission runtime (dangerous).
Q10C@Stable garantit que la valeur est observée efficacement par Compose.

iOS — Q11 à Q20

QRéponseJustification
Q11BSwift est le langage officiel depuis 2014.
Q12ALe ? déclare une optionnelle, qui peut être nil.
Q13CSwiftUI, framework déclaratif (WWDC 2019).
Q14AL'AppDelegate gère les événements du cycle de vie.
Q15CLa concurrence structurée (async/await, async let, TaskGroup).
Q16BUn protocol définit un contrat, implémenté par une extension ou un type.
Q17Basync let lance deux tâches en parallèle.
Q18AUn actor protège son état mutable de la course de données.
Q19A@IBOutlet/@IBAction relient le storyboard au code (UIKit).
Q20AURLSession est le framework HTTP natif iOS.

Cross-platform — Q21 à Q30

QRéponseJustification
Q21BRN exécute le JS sur un moteur séparé (JSC/Hermes), dans un thread hors UI.
Q22ALe bridge (ou JSI) relie JS et natif.
Q23BuseEffect reproduit componentDidMount/componentDidUpdate.
Q24BContainer applique marges, paddings et décorations.
Q25CInheritedWidget et ValueNotifier sont dans le SDK sans package.
Q26AStateful = état mutable, Stateless = immuable.
Q27AbuildContext localise le widget dans l'arbre.
Q28BLe compilateur Dart AOT + moteur Skia/Impeller.
Q29AExpo est un framework + plateforme de build pour RN.
Q30ALe principal avantage : code partagé entre plateformes.

Architecture — Q31 à Q40

QRéponseJustification
Q31AModel-View-ViewModel.
Q32ALe domaine (entités + use cases) est indépendant des frameworks.
Q33ALe use case orchestre une règle métier.
Q34AEn MVI, un Intent est une intention/action de l'utilisateur.
Q35AFlux unidirectionnel = état prévisible et traçable.
Q36AUne seule source de vérité pour l'état.
Q37ALa DI fournit les dépendances de l'extérieur.
Q38ALa couche data fournit les données.
Q39AModules = recompilation limitée + responsabilités claires.
Q40ACouches = responsabilité ; modules = domaine fonctionnel.

Data — Q41 à Q50

QRéponseJustification
Q41ARoom est un wrapper typé sur SQLite.
Q42AFlow/LiveData fournissent des données réactives.
Q43A@Dao définit l'interface d'accès (CRUD).
Q44ACoreData est la couche de persistance d'Apple.
Q45ALe contexte gère l'ensemble des objets en mémoire.
Q46APréférences = paires clé/valeur ; Room = relationnel structuré.
Q47AKeystore + EncryptedSharedPreferences.
Q48ALe Keychain, gestionnaire de secrets d'Apple.
Q49AMigration = évolution du schéma en préservant les données.
Q50AOffline-first : local d'abord, synchronisation ensuite.

Networking — Q51 à Q60

QRéponseJustification
Q51ARetrofit fournit une API HTTP typée par annotations.
Q52ALes intercepteurs modifient requêtes/réponses.
Q53AJSONDecoder().decode(...) décodage typé et sûr.
Q54AURLSession effectue les requêtes HTTP.
Q55AGET est idempotent et utilisé pour la lecture.
Q56A429 = Too Many Requests.
Q57AWebSocket est bidirectionnel temps réel.
Q58ALe payload est le corps des données envoyées.
Q59Atry? convertit l'erreur en optionnelle nil.
Q60ACache mémoire + disque (Coil/Glide/SDWebImage).

Testing — Q61 à Q70

QRéponseJustification
Q61AUn test unitaire vérifie une unité isolée, rapidement.
Q62AUn fake est une implémentation simulée de dépendance.
Q63ALes tests d'UI vérifient le comportement de l'interface.
Q64AEspresso / Compose UI Test.
Q65AMaestro, flows E2E en YAML multi-plateforme.
Q66ALa couverture mesure la part de code exécutée par les tests.
Q67AArrange – Act – Assert.
Q68AComparaison avec une référence enregistrée.
Q69AIntégration avec le vrai environnement.
Q70AUn test flaky est intermittent et non reproductible.

Sécurité — Q71 à Q80

QRéponseJustification
Q71AOWASP MASVS référence les exigences de sécurité mobile.
Q72ALe principal risque est l'accès par des acteurs malveillants sur le device.
Q73ALe code signing certifie l'origine et l'intégrité.
Q74ALe pinning empêche l'interception en vérifiant le certificat.
Q75AIdentifiants et données personnelles en priorité.
Q76ALa biométrie renforce l'authentification.
Q77ALe sandbox limite l'accès aux ressources.
Q78ATLS + validation + pinning contre les MITM.
Q79A« Data at rest » = données stockées sur l'appareil.
Q80ALes clés sont extractibles par désassemblage.

DevOps — Q81 à Q90

QRéponseJustification
Q81AContinuous Integration.
Q82AFastlane automatise build et déploiement.
Q83ALa chaîne automatisée compile, teste et livre.
Q84AGitHub Actions, GitLab CI, Jenkins…
Q85AAAB/APK distribué par lien (Firebase App Distribution…).
Q86ATestFlight pour les builds bêta iOS.
Q87AbuildType × productFlavor.
Q88ALogs, metrics et traces pour surveiller en production.
Q89ALa dSYM symbolise les crashs.
Q90ACrashlytics analyse les crashs en production.

PWA — Q91 à Q100

QRéponseJustification
Q91AUne app web avec capacités natives.
Q92ALe Service Worker gère le mode hors-ligne.
Q93Amanifest.json déclare l'installation.
Q94AIndexedDB pour les données hors-ligne.
Q95AL'app shell est la structure minimale à cacher.
Q96AWeb Push pour les notifications.
Q97ALCP = Largest Contentful Paint.
Q98ACache API + IndexedDB.
Q99AInstallable sur l'écran d'accueil.
Q100AAccès matériel limité et dépendance au navigateur.

Analyse des résultats

ScoreInterprétation
90-100Prêt pour les entretiens et le projet fil rouge
70-89Solide, revoir les sections < 7/10
50-69Revoir les chapitres des sections faibles
< 50Reprendre les chapitres 01 à 18 en priorité

Liens vers les chapitres à réviser

  • Android → chapitre 02, 03, 04
  • iOS → chapitre 05, 06, 07
  • Cross-platform → chapitre 08, 09
  • Architecture → chapitre 10
  • Data → chapitre 11
  • Networking → chapitre 12
  • Testing → chapitre 13
  • Sécurité → chapitre 15
  • DevOps → chapitre 16
  • PWA → chapitre 17