Réponses:
Les fichiers dSYM stockent les symboles de débogage pour votre application
Des services comme crashlytics l'utilisent pour remplacer les symboles dans les journaux de crash par les noms de méthodes appropriés afin qu'il soit lisible et ait un sens.
L'avantage d'utiliser le dSYM est que vous n'avez pas besoin d'expédier votre application avec des symboles, ce qui rend plus difficile son ingénierie inverse et réduit également votre taille binaire.
Pour symboliser le journal des plantages, vous devez faire glisser le journal des plantages dans les journaux des périphériques de l'appareil dans l'organisateur de la machine qui a compilé le binaire de l'application (une machine qui stocke le dSYM)
Si vous avez le dSYM mais que vous n'avez pas la machine compilée, le binaire de l'application, suivez les instructions de ce lien afin d'installer le dSYM dans la machine
Pour plus d'informations, veuillez consulter la note technique d'Apple TN2151
dSYM
signifie Xcode Debugging Symbols, c'est une sorte de fichier de mappage qui peut, par exemple, décoder une trace de pile dans un format lisible. C'est un Bundle
avec la structure suivante:
Par exemple, un journal des plantages ressemble à:
//before
0 libswiftCore.dylib 0x000000018f3c9380 0x18f394000 + 217984
1 libswiftCore.dylib 0x000000018f3c9380 0x18f394000 + 217984
2 libswiftCore.dylib 0x000000018f3c8844 0x18f394000 + 215108
3 libswiftCore.dylib 0x000000018f3a74e0 0x18f394000 + 79072
4 libswiftCore.dylib 0x000000018f3ab0d8 0x18f394000 + 94424
5 F49088168M 0x00000001045ac750 0x104590000 + 116560
6 F49088168M 0x00000001045b7904 0x104590000 + 162052
7 F49088168M 0x00000001045b897c 0x104590000 + 166268
8 F49088168M 0x000000010459d914 0x104590000 + 55572
9 F49088168M 0x00000001045a0e70 0x104590000 + 69232
10 F49088168M 0x00000001045a0f4c 0x104590000 + 69452
dSYM
en action
//after Symbolicating(dSYM is used)
0 libswiftCore.dylib 0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
1 libswiftCore.dylib 0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
2 libswiftCore.dylib 0x000000018f3c8844 _assertionFailure+ 215108 (_:_:file:line:flags:) + 468
3 libswiftCore.dylib 0x000000018f3a74e0 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 79072 (_:wasNativeTypeChecked:) + 208
4 libswiftCore.dylib 0x000000018f3ab0d8 Array.subscript.getter + 84
5 F49088168M 0x00000001045ac750 static ELM327ResponseManager.getResponse(responseStr:obd2Protocol:) + 116560 (ELM327ResponseManager.swift:27)
6 F49088168M 0x00000001045b7904 ELM327Client.dataInput(_:characteristicUuidStr:) + 162052 (ELM327Client.swift:56)
7 F49088168M 0x00000001045b897c protocol witness for BLEClientInputPort.dataInput(_:characteristicUuidStr:) in conformance ELM327Client + 166268 (<compiler-generated>:0)
8 F49088168M 0x000000010459d914 BLEConnection.peripheralDataReceived(data:characteristicUuidStr:) + 55572 (BLEConnection.swift:124)
9 F49088168M 0x00000001045a0e70 BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69232 (BLEConnection.swift:293)
10 F49088168M 0x00000001045a0f4c @objc BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69452 (<compiler-generated>:0)
Par défaut, dSYM
est généré par défaut pour une version commerciale . Tu peux le vérifier:
Build Settings -> Generate Debug Symbols -> Yes
Build Settings -> Debug Information Format -> DWARF with dSYM File
L'emplacement du résultat que vous pouvez trouver dans le Products
dossier
Pour générer un dSYM
fichier manuellement à l' .app
aide dedsymutil
dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM
Pour symboliser un crash en utilisant symbolicatecrash
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/Current/Resources/symbolicatecrash "<path>/F49088168M-2020-06-04-212904.crash" "<path>/F49088168M.app.dSYM" > symbolicated.crash
Pour ouvrir dSYM
manuellement en utilisantdwarfdump
dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM
le résultat ressemble à:
0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"