Surveillance des applications Swift : métriques et alertes de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi la surveillance des applications Swift est une nécessité

\n

Développer des applications Swift pour iOS et macOS n'est que la moitié du succès. Dans le monde moderne de l'expérience utilisateur (UX), il est crucial non seulement d'écrire du code, mais aussi d'assurer son fonctionnement stable en production. Sans système de surveillance, vous risquez de manquer une baisse de performance, une fuite mémoire ou un dysfonctionnement dans un module critique. Dans cet article, nous allons voir comment configurer la surveillance des applications Swift de zéro : de la collecte de métriques à la configuration d'alertes. Vous découvrirez les meilleures pratiques, les outils et des exemples de code qui aideront votre application à fonctionner comme sur des roulettes.

\n\n

Métriques principales pour les applications Swift

\n

La surveillance commence par la compréhension de ce qu'il faut mesurer. Pour les applications Swift (iOS/macOS), les métriques clés sont :

\n
    \n
  • Temps de démarrage (Cold Start / Warm Start) — indicateur de la première impression de l'utilisateur.
  • \n
  • Utilisation de la mémoire (Memory footprint) — prévention des plantages Out-of-Memory (OOM).
  • \n
  • FPS (Frames Per Second) — fluidité des animations et de l'interface.
  • \n
  • Requêtes réseau — temps de réponse, nombre d'erreurs (4xx, 5xx).
  • \n
  • Journaux de plantage — nombre et type de crashs de l'application.
  • \n
\n

Ces métriques peuvent être collectées à la fois par des moyens intégrés (Xcode Metrics) et à l'aide de SDK tiers (par exemple, Firebase Crashlytics, New Relic, Datadog). Cependant, pour un contrôle total, il est préférable d'utiliser vos propres outils.

\n\n

Exemple : collecte du temps de démarrage avec SwiftMetrics

\n

Pour collecter des métriques en Swift, il est pratique d'utiliser la bibliothèque SwiftMetrics (partie du package swift-metrics). Installez-la via Swift Package Manager :

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/apple/swift-metrics.git", from: "2.4.0")\n]
\n

Exemple de code pour mesurer le temps de démarrage à froid :

\n
import Metrics\n\nclass AppMetrics {\n    static let shared = AppMetrics()\n    \n    func recordLaunchTime() {\n        let startTime = CFAbsoluteTimeGetCurrent()\n        // Initialisation de l'application...\n        let elapsed = (CFAbsoluteTimeGetCurrent() - startTime) * 1000 // en millisecondes\n        Counter(label: "app.launch_time_ms").increment(by: Int(elapsed))\n    }\n}
\n

Ce code crée un compteur qui peut être envoyé à un système de surveillance (par exemple, Prometheus ou Grafana).

\n\n

Configuration des alertes : de la réaction à la proactivité

\n

La collecte de métriques est inutile sans système d'alerte. Les alertes permettent de réagir aux problèmes avant qu'ils ne deviennent critiques. Dans les applications Swift, les alertes se divisent en deux types :

\n
    \n
  • Locales — se déclenchent sur l'appareil de l'utilisateur (par exemple, en cas de dépassement du seuil de mémoire).
  • \n
  • Serveur — sont envoyées à votre tableau de bord (par exemple, en cas d'augmentation du nombre d'erreurs).
  • \n
\n

Examinons la configuration d'une alerte locale en cas de dépassement de mémoire en utilisant os.log et NotificationCenter :

\n
import Foundation\nimport os.log\n\nclass MemoryMonitor {\n    static let shared = MemoryMonitor()\n    private let memoryWarningThreshold: UInt64 = 500_000_000 // 500 MB\n    \n    func startMonitoring() {\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(handleMemoryWarning),\n            name: UIApplication.didReceiveMemoryWarningNotification,\n            object: nil\n        )\n    }\n    \n    @objc private func handleMemoryWarning() {\n        let memoryUsed = reportMemoryUsage()\n        if memoryUsed > memoryWarningThreshold {\n            os_log(.error, "Memory usage critical: %llu MB", memoryUsed / 1_000_000)\n            // Ici, on peut envoyer une alerte au serveur ou l'afficher à l'utilisateur\n        }\n    }\n    \n    private func reportMemoryUsage() -> UInt6                

Blogs

Book Recommendations