Débogage des applications iOS : 7 méthodes pour collecter les journaux système
Les journaux iOS capturent les événements internes de l'application : requêtes réseau, erreurs, gels d'interface utilisateur et plantages. Ils aident à identifier précisément les problèmes sans indicateurs visuels. Exemples : EXC_BAD_ACCESS dans Pokemon GO, E/S sur le thread principal dans Console, et délais d'attente CFNetwork dans log collect.
Les journaux sont divisés en rapports de plantage (EXC_BAD_ACCESS, SIGSEGV) et en rapports diagnostiques (performances, réseau, mémoire). Les testeurs les utilisent pour vérifier les appels de fonctions, analyser les interactions avec le serveur et découvrir les bugs cachés.
Fichiers .ips via sysdiagnose
Les rapports générés automatiquement sont disponibles dans Réglages → Confidentialité et sécurité → Analyse et améliorations → Données d'analyse. Format : event_type_date_time.ips, par exemple AtiClient-2024-08-14-152242.ips.
Types de rapports :
- CrashReport : exceptions et signaux (par ID de bundle, p. ex. VKClient).
- JetsamEvent : déchargement dû à une pénurie de RAM (fuites mémoire).
- Watchdog : délais de lancement ou blocages.
- SpinReport : utilisation élevée du CPU sans réponse (impasses).
- NotificationServiceExtension : échecs des notifications push.
Génération manuelle : appuyer simultanément sur les boutons de volume + bouton latéral (1–1,5 s), fichier stacks.
Exporter via AirDrop. Les fichiers sont automatiquement supprimés — collectez-les immédiatement.
Cas d'utilisation : échecs sans Xcode, analyse mémoire/réseau.
log collect CLI : Outil en ligne de commande pour les archives
Nécessite Xcode Command Line Tools, connexion USB, Terminal. Récupère l'UDID via libimobiledevice.
Collecte les journaux jusqu'à 10 jours (vs sysdiagnose — instantané au moment). Plus rapide, automatable, taille contrôlable.
Commande de base :
sudo log collect --device-udid <UDID> --last 10m --output iphone_logs.logarchive
Paramètres clés :
--output ~/Desktop/iphone_logs.logarchive— chemin de sauvegarde.--last 30m / 2h / 1d— période temporelle.--start "2025-08-20" --end "2025-08-20 14:30:00"— dates.--size 100m— limite de taille.--device-udid A1B2C3D4R5F8G8H8I1J0— par UDID (préféré).
Analyse :
log show --archive system_logs.logarchive --predicate 'process == "AtiClient" AND messageType == "error"'
Filtres : processus, erreurs, période temporelle.
Comparaison avec sysdiagnose :
| Paramètre | log collect | sysdiagnose |
|---------------|-------------|-------------|
| Temps | jusqu'à 10 jours | jour de génération |
| Automatisation| CLI | manuel |
| Taille | contrôlable | importante |
| Vitesse | rapide | 10–15 min |
Cas d'utilisation : bugs instables, tendances de performance, contexte de plantage.
Console : Surveillance en direct
Xcode → Fenêtre → Appareils et simulateurs → Ouvrir Console. Filtres par processus (p. ex. AtiClient). Affiche en temps réel : Hang Risk sur le thread principal, échecs libRPAC.dylib.
Exemple de journal :
Hang Risk com.apple.runtime-issues
message: This method does I/O on the main thread...
libRPAC.dylib failure 19:12:18.350727+0300 AtiClient
Exporter vers .logarchive pour analyse hors ligne.
Méthodes 4–7 : Collecte avancée
- Xcode Devices and Simulators : journaux par UDID, filtres par sous-système (CFNetwork, Jetsam).
- libimobiledevice :
idevicesyslogpour diffuser les journaux en continu sans Xcode.
idevicesyslog -u <UDID>
- os_log dans le code : journaux personnalisés via
os_log_tet APIos_log. Niveaux : debug, info, error.
- Instruments : profilage avec journaux (Time Profiler, Leaks).
Points clés
- .ips pour les échecs instantanés (CrashReport, Jetsam).
- log collect pour les tendances à long terme (jusqu'à 10 jours, CLI).
- Console pour le débogage en direct de l'E/S sur le thread principal.
- UDID requis pour cibler précisément l'appareil.
- Combiner les méthodes : sysdiagnose + log show pour une analyse complète.
— Editorial Team
Aucun commentaire pour le moment.