Cas pratiques iOS (Swift)

30 cas pratiques iOS (Swift) disponibles. Niveaux : fondamental (10), avancé (10), expert (10).

Fait partie de : Cas pratiques de développement mobile

FondamentaliOS (Swift)

Correction d’un appel réseau bloquant le thread principal

Contexte : Une application récupère des données depuis une API distante. Le Problème : L’interface se fige pendant l’appel réseau. Extrait logique actuelle : let data = try? Data(contentsOf: url) label.text = String(data: data!, encoding: .utf8) Contraintes : Effectuer appel réseau en arrière-plan via URLSession. Mettre à jour UI sur le thread principal. Livrable attendu : Corriger l’implémentation afin d’assurer fluidité de l’interface utilisateur.

networkingurlsessionbugfix+2
FondamentaliOS (Swift)

Correction d’un bouton ne déclenchant pas son action IBAction

Contexte : Une application iOS contient un bouton censé afficher un message. Le Problème : Le tap sur le bouton ne déclenche aucune action. Extrait logique actuelle : @IBAction func buttonTapped() { showMessage() } Mais le bouton n’est pas connecté. Contraintes : Vérifier connexion dans Interface Builder. S’assurer que l’IBAction est correctement liée. Tester comportement. Livrable attendu : Corriger la configuration afin que l’action soit correctement déclenchée lors du tap.

ibactionuibuttonbugfix+2
FondamentaliOS (Swift)

Correction d’un crash dû à un IBOutlet non connecté

Contexte : L’application plante au lancement avec une erreur liée à un IBOutlet. Le Problème : Une propriété IBOutlet est déclarée mais non connectée dans le storyboard. Extrait logique actuelle : @IBOutlet weak var titleLabel: UILabel! Contraintes : Vérifier connexions dans Interface Builder. Supprimer ou reconnecter IBOutlet correctement. Livrable attendu : Identifier et corriger l’erreur afin d’éviter crash au démarrage.

iboutletcrashbugfix+2
FondamentaliOS (Swift)

Correction d’une alerte UIAlertController non affichée

Contexte : Une alerte doit s’afficher après une action utilisateur. Le Problème : L’alerte ne s’affiche pas ou génère un avertissement. Extrait logique actuelle : let alert = UIAlertController(title: "Info", message: "Succès", preferredStyle: .alert) Sans présentation. Contraintes : Appeler present(alert, animated: true). Vérifier contexte correct. Livrable attendu : Corriger l’implémentation afin que l’alerte soit correctement affichée à l’utilisateur.

uialertcontrollerbugfixswift+2
FondamentaliOS (Swift)

Correction d’une UITableView n’affichant aucun élément

Contexte : Une UITableView est déclarée mais reste vide à l’écran. Le Problème : Les méthodes obligatoires du datasource ne sont pas correctement implémentées. Extrait logique actuelle : func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 0 } Contraintes : Retourner nombre correct d’éléments. Vérifier datasource assigné. Livrable attendu : Corriger l’implémentation afin que la liste s’affiche correctement.

uitableviewdatasourcebugfix+2
FondamentaliOS (Swift)

Création d’un formulaire simple avec validation basique

Contexte : Une application doit permettre saisie d’un email et d’un mot de passe. Le Problème : Aucun mécanisme de validation n’est implémenté. Contraintes : Utiliser UITextField. Vérifier que les champs ne sont pas vides. Afficher une alerte si validation échoue. Livrable attendu : Implémenter un formulaire Swift avec validation simple et retour utilisateur clair via UIAlertController.

formvalidationuitextfield+2
FondamentaliOS (Swift)

Création d’un système simple de persistance avec UserDefaults

Contexte : L’application doit mémoriser un nom utilisateur entre deux sessions. Le Problème : Les données saisies sont perdues après fermeture de l’application. Contraintes : Utiliser UserDefaults pour stocker une chaîne. Charger valeur au démarrage du ViewController. Livrable attendu : Implémenter une solution simple de persistance locale en Swift permettant sauvegarde et récupération d’une donnée utilisateur.

userdefaultspersistenceswift+2
FondamentaliOS (Swift)

Création d’un ViewController Swift avec interaction bouton

Contexte : Une équipe démarre une application iOS native en Swift et souhaite valider la configuration du projet avec un premier écran interactif. Le Problème : Aucun écran fonctionnel n’est encore implémenté et il faut vérifier que les interactions UI sont correctement gérées. Contraintes : Créer un UIViewController avec un UILabel et un UIButton. Connecter le bouton via IBAction. Au tap sur le bouton, modifier dynamiquement le texte du label. Ne pas utiliser de librairie externe. Livrable attendu : Implémenter un ViewController Swift complet avec gestion d’action utilisateur et mise à jour correcte de l’interface.

uiviewcontrolleruibuttonswift+2
FondamentaliOS (Swift)

Implémentation d’une navigation simple entre deux ViewControllers

Contexte : L’application nécessite un écran principal et un écran de détail. Le Problème : Aucun mécanisme de navigation n’est encore configuré. Contraintes : Utiliser UINavigationController. Pousser un second ViewController via pushViewController. Permettre retour arrière standard. Livrable attendu : Implémenter navigation fonctionnelle entre deux ViewControllers en Swift.

navigationcontrollerviewcontrollerswift+2
FondamentaliOS (Swift)

Implémentation d’une UITableView simple pour afficher une liste

Contexte : L’application doit afficher une liste dynamique d’éléments. Le Problème : Aucun composant de liste performant n’est encore utilisé. Contraintes : Utiliser UITableView avec UITableViewDataSource. Afficher liste simple de chaînes. Gérer cellule standard. Livrable attendu : Mettre en place une UITableView fonctionnelle en Swift affichant une liste dynamique.

uitableviewdatasourceswift+2
AvancéiOS (Swift)

Correction d’un appel réseau exécuté sans gestion correcte du thread principal

Contexte : Une application charge des données via URLSession. Le Problème : L’UI est mise à jour depuis un thread secondaire, provoquant comportements imprévisibles. Extrait logique actuelle : URLSession.shared.dataTask(with: url) { data, _, _ in self.label.text = "Loaded" }.resume() Contraintes : Mettre à jour l’interface uniquement sur le thread principal via DispatchQueue.main.async. Gérer erreurs réseau proprement. Livrable attendu : Corriger l’implémentation afin d’assurer respect des règles de thread UI et stabilité de l’application.

urlsessionthreadingbugfix+2
AvancéiOS (Swift)

Correction d’un crash lors de rotation d’écran

Contexte : Une application affiche des données dynamiques dans un ViewController. Le Problème : Lors de rotation, certaines données sont perdues ou provoquent crash. Extrait logique actuelle : var dataList: [String] = [] Contraintes : Conserver état via ViewModel ou mécanisme approprié. Éviter rechargement inutile. Tester rotation. Livrable attendu : Corriger la gestion d’état afin d’assurer stabilité lors changement d’orientation.

rotationstate-managementbugfix+2
AvancéiOS (Swift)

Correction d’un problème de concurrence lors d’appels réseau multiples

Contexte : Plusieurs appels API sont déclenchés simultanément depuis un ViewController. Le Problème : Les réponses arrivent dans un ordre imprévisible et modifient l’état de manière incohérente. Extrait logique actuelle : fetchUser() fetchOrders() Contraintes : Synchroniser mises à jour critiques. Garantir cohérence finale des données affichées. Gérer erreurs partielles. Livrable attendu : Corriger la gestion concurrente afin d’assurer stabilité et cohérence des informations.

concurrencynetworkingbugfix+2
AvancéiOS (Swift)

Correction d’une fuite mémoire liée à une closure capturant self fortement

Contexte : Une closure asynchrone est utilisée pour un appel réseau. Le Problème : Le ViewController n’est jamais libéré en mémoire. Extrait logique actuelle : service.fetchData { self.updateUI() } Contraintes : Utiliser capture list faible (weak self). Vérifier cycle de vie correct. Éviter retain cycle. Livrable attendu : Corriger l’implémentation afin d’éliminer fuite mémoire liée aux closures.

memory-leakclosureretain-cycle+2
AvancéiOS (Swift)

Correction d’une UITableView provoquant rechargements excessifs

Contexte : Une UITableView affiche des éléments dynamiques. Le Problème : La méthode reloadData() est appelée trop fréquemment, provoquant saccades. Extrait logique actuelle : tableView.reloadData() Utilisé après chaque modification mineure. Contraintes : Mettre à jour uniquement les cellules modifiées. Utiliser performBatchUpdates si nécessaire. Livrable attendu : Optimiser la gestion de la UITableView afin d’améliorer fluidité et performance globale.

uitableviewperformanceoptimization+2
AvancéiOS (Swift)

Implémentation d’un cache local simple pour données API

Contexte : L’application consulte fréquemment des données depuis une API distante. Le Problème : Les requêtes répétées ralentissent l’application. Contraintes : Implémenter cache local en mémoire ou via Core Data simple. Définir stratégie d’invalidation. Garantir cohérence minimale. Livrable attendu : Mettre en place un système de cache structuré améliorant performance et expérience utilisateur.

cachingcoredataperformance+2
AvancéiOS (Swift)

Implémentation d’une architecture MVVM avec ViewModel et binding simple

Contexte : Une application iOS commence à intégrer plusieurs écrans avec logique métier et appels réseau. Le Problème : Toute la logique est actuellement dans les ViewControllers, ce qui rend le code difficile à tester et maintenir. Contraintes : Mettre en place une architecture MVVM. Créer un ViewModel séparé. Établir un mécanisme simple de binding (closure ou Combine). Éviter toute logique métier dans le ViewController. Livrable attendu : Proposer une structure MVVM claire avec séparation des responsabilités et flux de données propre entre ViewModel et interface.

mvvmviewmodelarchitecture+2
AvancéiOS (Swift)

Implémentation d’une navigation structurée avec Coordinator Pattern

Contexte : L’application comporte plusieurs flux de navigation complexes. Le Problème : La navigation est gérée directement dans les ViewControllers et devient difficile à maintenir. Contraintes : Introduire Coordinator Pattern. Séparer logique de navigation des ViewControllers. Maintenir back stack cohérent. Livrable attendu : Concevoir une architecture de navigation propre et maintenable via Coordinator.

coordinatornavigationarchitecture+2
AvancéiOS (Swift)

Implémentation d’une pagination avec UITableView et API distante

Contexte : Une application affiche une liste d’éléments provenant d’une API distante. Le Problème : Tous les éléments sont chargés en une seule requête, ralentissant l’application. Contraintes : Implémenter pagination côté client. Détecter fin de scroll via UIScrollViewDelegate. Charger données par page. Gérer indicateur de chargement. Livrable attendu : Mettre en place un système de pagination performant améliorant fluidité et consommation réseau.

paginationuitableviewapi+2
AvancéiOS (Swift)

Mise en place d’un système d’authentification avec token persistant

Contexte : Une application nécessite gestion de session utilisateur via token. Le Problème : Le token n’est pas correctement conservé entre deux lancements. Contraintes : Utiliser UserDefaults ou Keychain pour stockage sécurisé. Vérifier validité au lancement. Rediriger vers écran login si nécessaire. Livrable attendu : Implémenter un système cohérent de gestion de session et redirection conditionnelle.

authenticationtoken-managementuserdefaults+2
ExpertiOS (Swift)

Conception d’un système de cache multi-niveaux cohérent

Contexte : L’application interroge fréquemment des ressources distantes et doit optimiser latence et consommation réseau. Le Problème : Les données ne sont pas cohérentes entre cache mémoire et stockage persistant. Contraintes : Définir stratégie de cache en mémoire et via Core Data. Implémenter invalidation intelligente. Garantir cohérence entre sources. Livrable attendu : Concevoir un système de cache robuste garantissant performance, cohérence et maintenabilité.

cachingcoredatadata-consistency+2
ExpertiOS (Swift)

Conception d’un système sécurisé de gestion de tokens avec rafraîchissement automatique

Contexte : L’application communique avec une API protégée par token d’authentification. Le Problème : À expiration du token, les requêtes échouent sans mécanisme automatique de renouvellement. Contraintes : Intercepter erreurs HTTP 401. Implémenter rafraîchissement automatique du token. Empêcher requêtes multiples concurrentes de refresh. Stocker token dans Keychain. Livrable attendu : Concevoir une stratégie robuste de gestion de session et de renouvellement automatique garantissant sécurité et cohérence.

authenticationkeychaintoken-management+2
ExpertiOS (Swift)

Conception d’une architecture modulaire scalable basée sur Clean Architecture

Contexte : Une application iOS en Swift évolue rapidement avec plusieurs équipes travaillant sur des fonctionnalités distinctes (authentification, catalogue, paiement, notifications). Le Problème : Le projet est devenu monolithique, les dépendances sont mal maîtrisées et la testabilité est limitée. Contraintes : Mettre en place une Clean Architecture avec séparation stricte des couches (Presentation, Domain, Data). Isoler les dépendances via protocoles. Permettre injection de dépendances. Assurer testabilité complète de la logique métier sans UIKit. Livrable attendu : Proposer une architecture modulaire détaillée incluant organisation des dossiers, flux de dépendances, et exemple de parcours complet entre ViewController, UseCase et Repository.

clean-architecturemodularizationdependency-injection+2
ExpertiOS (Swift)

Correction d’un crash intermittent lié à mise à jour UI hors thread principal

Contexte : L’application met à jour l’interface après traitement en arrière-plan. Le Problème : Un crash intermittent apparaît lié à modification UI hors thread principal. Extrait logique actuelle : DispatchQueue.global().async { self.label.text = "Updated" } Contraintes : Mettre à jour UI uniquement via DispatchQueue.main.async. Vérifier cohérence des flux asynchrones. Livrable attendu : Corriger le code afin de respecter strictement les règles de thread UI iOS et éliminer crash.

multithreadingui-threadbugfix+2
ExpertiOS (Swift)

Correction d’un problème de performance dans une UITableView complexe

Contexte : Une UITableView affiche plusieurs types de cellules avec images chargées dynamiquement. Le Problème : Le défilement est saccadé et provoque pertes de frames. Extrait logique actuelle : tableView.reloadData() Appelé après chaque mise à jour. Contraintes : Mettre en place mise à jour ciblée via performBatchUpdates. Optimiser chargement d’images asynchrone. Éviter recalculs inutiles. Livrable attendu : Optimiser la gestion de la UITableView afin d’assurer fluidité même avec grand volume de données.

uitableviewperformanceoptimization+2
ExpertiOS (Swift)

Correction d’un retain cycle complexe entre ViewModel et ViewController

Contexte : Une application utilise MVVM avec closures pour notifier les mises à jour. Le Problème : Le ViewController n’est jamais libéré après navigation, provoquant fuite mémoire. Extrait logique actuelle : viewModel.onUpdate = { self.updateUI() } Contraintes : Identifier cycle de rétention. Utiliser capture list faible appropriée. Vérifier désallocation via outils de debug mémoire. Livrable attendu : Corriger l’implémentation afin d’éliminer retain cycle et garantir libération correcte des ressources.

retain-cyclememory-leakmvvm+2
ExpertiOS (Swift)

Correction d’une condition de course avec Combine et appels réseau concurrents

Contexte : L’application utilise Combine pour gérer flux de données asynchrones. Le Problème : Plusieurs publishers modifient simultanément le même état, produisant résultats incohérents. Extrait logique actuelle : publisher1 .sink { updateState($0) } publisher2 .sink { updateState($0) } Contraintes : Synchroniser mises à jour critiques. Utiliser opérateurs Combine appropriés. Garantir cohérence de l’état final. Livrable attendu : Corriger la gestion concurrente afin d’éviter conditions de course et assurer stabilité des données.

combineconcurrencyrace-condition+2
ExpertiOS (Swift)

Correction d’une navigation complexe causant accumulation de ViewControllers

Contexte : L’application utilise UINavigationController avec flux complexes. Le Problème : Certains ViewControllers restent dans la pile de navigation, provoquant comportements inattendus. Extrait logique actuelle : navigationController?.pushViewController(vc, animated: true) Sans gestion appropriée du stack. Contraintes : Analyser gestion du back stack. Utiliser popToViewController ou setViewControllers si nécessaire. Vérifier désallocation correcte. Livrable attendu : Corriger la navigation afin d’éviter accumulation de ViewControllers et garantir gestion propre du cycle de vie.

navigationviewcontrollermemory-leak+2
ExpertiOS (Swift)

Implémentation d’un système offline-first avec synchronisation intelligente

Contexte : Une application terrain doit fonctionner sans connexion réseau stable et synchroniser les données ultérieurement. Le Problème : Les modifications locales peuvent entrer en conflit avec les données serveur. Contraintes : Utiliser Core Data pour stockage local. Implémenter file d’attente d’actions hors ligne. Définir stratégie de résolution de conflits. Garantir cohérence des données. Livrable attendu : Concevoir une architecture offline-first complète incluant persistance locale, synchronisation différée et gestion cohérente des conflits.

offline-firstcoredatasynchronization+2
ExpertiOS (Swift)

Implémentation d’une stratégie complète de tests unitaires et UI

Contexte : Une application critique nécessite validation fiable avant déploiement en production. Le Problème : La logique métier et les flux UI ne sont pas couverts par des tests automatisés. Contraintes : Séparer logique métier testable. Implémenter tests unitaires avec XCTest. Ajouter tests UI pour scénarios critiques. Livrable attendu : Proposer une stratégie complète de tests automatisés couvrant logique métier et parcours utilisateur essentiels.

testingxctestui-testing+2

Questions originales conçues par CodeDuel. CodeDuel n'est affilié à aucun éditeur ni organisme de certification cité ; les noms de certifications et les marques appartiennent à leurs titulaires et servent uniquement à indiquer le domaine couvert. Signaler un contenu

    Cas pratiques iOS (Swift) : 30 mises en situation | CodeDuel