Antworten:
In dSYM-Dateien werden die Debug-Symbole für Ihre App gespeichert
Dienste wie Crashlytics verwenden es, um die Symbole in den Crash-Protokollen durch die entsprechenden Methodennamen zu ersetzen, damit es lesbar und sinnvoll ist.
Der Vorteil der Verwendung von dSYM besteht darin, dass Sie Ihre App nicht mit Symbolen ausliefern müssen, was das Reverse Engineering erschwert und auch die Binärgröße verringert
Um das Absturzprotokoll zu symbolisieren, müssen Sie das Absturzprotokoll in die Geräteprotokolle des Geräts im Organizer des Computers ziehen, der die App-Binärdatei kompiliert hat (ein Computer, auf dem das dSYM gespeichert ist).
Wenn Sie den dSYM haben, aber den Computer nicht haben, der die App-Binärdatei kompiliert hat, befolgen Sie die Anweisungen in diesem Link, um den dSYM auf dem Computer zu installieren
Weitere Informationen finden Sie im technischen Hinweis zu Apple TN2151
dSYM
steht für Xcode Debugging Symbols und ist eine Art Mapping-Datei, die beispielsweise einen Stack-Trace in ein lesbares Format dekodieren kann. Es ist eine Bundle
mit der nächsten Struktur:
Ein Absturzprotokoll sieht beispielsweise folgendermaßen aus:
//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
in Aktion
//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)
Standardmäßig dSYM
wird standardmäßig für eine Release- Version generiert . Du kannst es überprüfen:
Build Settings -> Generate Debug Symbols -> Yes
Build Settings -> Debug Information Format -> DWARF with dSYM File
Den Ergebnisort finden Sie in Products
Ordner
So generieren dSYM
Datei manuell aus .app
mitdsymutil
dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM
Um den Absturz mit zu symbolisieren 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
Manuelles Öffnen dSYM
mitdwarfdump
dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM
Ergebnis sieht aus wie:
0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"