Apa itu dSYM dan bagaimana cara menggunakannya? (SDK iOS)

117

Terkadang kompilator menghasilkan file .dSYM. Saya kira ini adalah file terkait debugging, tapi saya tidak tahu apa itu, dan bagaimana menggunakannya.

Apa itu .dSYM? Bagaimana cara menggunakannya?

eonil
sumber

Jawaban:

160

File dSYM menyimpan simbol debug untuk aplikasi Anda

Layanan seperti crashlytics menggunakannya untuk mengganti simbol di log kerusakan dengan nama metode yang sesuai sehingga dapat dibaca dan masuk akal.

Manfaat menggunakan dSYM adalah Anda tidak perlu mengirimkan aplikasi Anda dengan simbolnya sehingga lebih sulit untuk merekayasa baliknya dan juga mengurangi ukuran biner Anda

Untuk digunakan sebagai simbol log kerusakan, Anda perlu menyeret log kerusakan ke log perangkat perangkat di penyelenggara mesin yang mengompilasi aplikasi biner (mesin yang menyimpan dSYM)

Jika Anda memiliki dSYM tetapi tidak memiliki mesin yang dikompilasi, biner aplikasi ikuti petunjuk di tautan ini untuk menginstal dSYM ke dalam mesin

Untuk informasi lebih lanjut silakan lihat catatan teknis apel TN2151

Tomer Even
sumber
1
Tidakkah menyertakan dSYM dengan biner toko aplikasi membuat Crashlytics tidak dapat mencatat error?
genaks
Jadi aman untuk menghapus centang pada kotak 'Sertakan simbol aplikasi ...'?
genaks
2
jika Anda ingin melihat crashlog di dalam apple connect, Anda dapat menyertakan simbol aplikasi saat Anda mengunggah aplikasi ke app store. jika Anda menggunakan crashlytics Anda tidak perlu melakukannya tetapi tidak ada salahnya untuk menyertakan simbol aplikasi (file dsym) dan mengirimkannya ke apple dengan memeriksa "sertakan simbol aplikasi ..." dalam unggahan ke App Store wizard
Tomer Even
1
Saya berpikir untuk menghemat beberapa MB bagi pengguna jika hal itu dapat dilakukan
genaks
Dari pengembang Crashlytics - twittercommunity.com/t/…
genaks
1

dSYMsingkatan dari Xcode Debugging Symbols, ini adalah sejenis file pemetaan yang dapat, misalnya, mendekode pelacakan tumpukan ke dalam format yang dapat dibaca. Ini adalah Bundledengan struktur berikut:

Misalnya, log kerusakan terlihat seperti:

//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 sedang beraksi

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

Secara default dSYMdibuat secara default untuk versi rilis . Anda dapat memeriksanya:

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

Lokasi hasil dapat Anda temukan di Productsfolder

Untuk menghasilkan dSYMfile secara manual dari .appmenggunakandsymutil

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

Untuk melambangkan crash menggunakan 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

Untuk membuka dSYMsecara manual menggunakandwarfdump

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

hasilnya terlihat seperti:

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

[Kosa kata]

yoAlex5
sumber