Cos'è il dSYM e come usarlo? (iOS SDK)


117

A volte il compilatore produce file .dSYM. Immagino che questo sia un file correlato al debug, ma non so cosa sia e come usarlo.

Cos'è un .dSYM? Come lo uso?

Risposte:


160

I file dSYM memorizzano i simboli di debug per la tua app

Servizi come crashlytics lo usano per sostituire i simboli nei log di arresto anomalo con i nomi dei metodi appropriati, in modo che sia leggibile e abbia senso.

Il vantaggio dell'utilizzo del dSYM è che non è necessario spedire la tua app con i suoi simboli, rendendo più difficile il reverse engineering e anche ridurre la dimensione binaria

Per poterlo utilizzare per simboleggiare il registro degli arresti anomali è necessario trascinare il registro degli arresti anomali nei registri del dispositivo del dispositivo nell'organizer della macchina che ha compilato il binario dell'app (una macchina che memorizza il dSYM)

Se hai il dSYM ma non hai la macchina compila il binario dell'app segui le istruzioni in questo link per installare il dSYM nella macchina

Per ulteriori informazioni, consultare la nota tecnica Apple TN2151


1
L'inclusione di dSYM con un binario dell'app store non renderà Crashlytics in grado di registrare gli arresti anomali?
genaks

Quindi è sicuro deselezionare la casella "Includi simboli app ..."?
genaks

2
se vuoi essere in grado di vedere i crashlog all'interno di apple connect puoi includere i simboli delle app quando carichi l'app nell'app store. se stai usando crashlytics non devi farlo ma non fa male includere i simboli delle app (il file dsym) e inviarlo ad Apple controllando "includi simboli app ..." nel caricamento su App Store wizard
Tomer Even

1
Stavo pensando di salvare all'utente un paio di MB se può essere fatto
genaks

Dagli sviluppatori di Crashlytics - twittercommunity.com/t/…
genaks

1

dSYMsta per Xcode Debugging Symbols, è un tipo di file di mappatura che può, ad esempio, decodificare una traccia dello stack in un formato leggibile. È una Bundlecon la seguente struttura:

Ad esempio, un registro di arresto anomalo ha il seguente aspetto:

//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 azione

//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)

Per impostazione predefinita dSYMviene generato per impostazione predefinita per una versione di rilascio . Puoi verificarlo:

Build Settings -> Generate Debug Symbols -> Yes
Build Settings -> Debug Information Format -> DWARF with dSYM File

La posizione del risultato che puoi trovare nella Productscartella

Per generare dSYMmanualmente il file .apputilizzandodsymutil

dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM

Per simboleggiare crash usando 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

Per aprire dSYMmanualmente utilizzandodwarfdump

dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM

il risultato è simile a:

0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"

[Vocabolario]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.