Introduction : Pourquoi la surveillance est essentielle pour les applications Swift
Les applications modernes en Swift pour iOS et macOS évoluent dans un environnement hautement concurrentiel. Les utilisateurs s'attendent à des réponses instantanées, un fonctionnement stable et l'absence de pannes. Sans système de surveillance, vous risquez de découvrir une panne de serveur ou une erreur critique seulement après les plaintes des clients. Dans cet article, nous allons voir comment organiser une surveillance efficace des applications Swift : quelles métriques collecter, comment configurer des alertes et automatiser les processus.
1. Métriques clés pour les applications Swift
La surveillance commence par le choix des bonnes métriques. Pour les applications iOS et macOS, il est important de suivre trois groupes d'indicateurs.
1.1. Performance et UI
- FPS (Frame Per Second) — le taux d'images par seconde. Une chute en dessous de 30 FPS signale des problèmes d'animation ou de rendu.
- Temps de démarrage — démarrage à froid et à chaud. Mesuré du début du chargement jusqu'à la première image.
- Consommation mémoire — surveillez les fuites via Instruments ou les métriques intégrées de Xcode.
import MetricKit
class PerformanceMonitor: NSObject, MXMetricManagerSubscriber { override init() { super.init() MXMetricManager.shared.add(self) } func didReceive(_ payloads: [MXMetricPayload]) { for payload in payloads { if let fpsData = payload.applicationLaunchMetrics { print("FPS moyen : \\(fpsData.histogrammedApplicationResumeTime)") } } }}1.2. Requêtes réseau et API
- Temps de réponse du serveur (latence).
- Codes d'erreur (4xx, 5xx).
- Nombre de requêtes réussies/échouées.
import Foundation
class NetworkMonitor { static func trackRequest(_ url: URL, duration: TimeInterval, statusCode: Int) { let metrics: [String: Any] = [ "url": url.absoluteString, "duration_ms": duration * 1000, "status": statusCode ] // Envoi à l'analytique AnalyticsService.sendEvent("network_request", parameters: metrics) }}1.3. Crashes et erreurs
Utilisez Crashlytics (Firebase) ou votre propre gestionnaire. Il est important de capturer non seulement les erreurs fatales, mais aussi les erreurs récupérables (recoverable errors).
import Crashlytics
class CrashHandler { static func logError(_ error: Error, context: String) { Crashlytics.crashlytics().record(error: error, userInfo: ["context": context]) }}2. Outils pour la collecte de métriques
Le choix de l'outil dépend de l'échelle du projet. Examinons trois options populaires.
2.1. Firebase Crashlytics + Performance
Outil gratuit de Google. Permet de suivre les crashes, les requêtes réseau et les métriques personnalisées. Intégration via Swift Package Manager.
// Installez via SPM : firebase-ios-sdkimport FirebasePerformance
class PerformanceTracer { static func startTrace(name: String) -> Trace { let trace = Performance.startTrace(name: name) return trace } static func stopTrace(_ trace: Trace) { trace.stop() }}2.2. Sentry
Système avancé avec prise en charge du traçage distribué. Convient aux solutions d'entreprise (enterprise).
import Sentry
SentrySDK.start { options in options.dsn = "https://examplePublicKey@o0.ingest.sentry.io/0" options.tracesSampleRate = 1.0 // 100% de traçage}
// Capture manuelle d'erreurSentrySDK.capture(error: NSError(domain: "com.example", code: 404))2.3. New Relic
Outil puissant pour la surveillance des performances en temps réel. Prend en charge SwiftUI et UIKit.
// Intégration via CocoaPods : pod 'NewRelicAgent'import NewRelic
NewRelic.start(w