์•ฑ์Šคํ† ์–ด์—์„œ ํฌ๋ž˜์‹œ๊ฐ€ ๋‚˜์„œ Reject์„ ๋‹นํ•˜๋ฉด Crash Report๋ฅผ ํ•จ๊ป˜ ์ค€๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์ด์ƒํ•œ ์ˆซ์ž๋“ค๋งŒ ๊ฐ€๋“ํ•˜๋‹ค.

dSYM

debug symbol file

App์„ Releaseํ•œ ๋’ค์— Crash๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํŒŒ์ผ์ด๋‹ค. Release ๋’ค์— Crash๊ฐ€ ์–ด๋””์„œ ๋‚ฌ๋Š”์ง€ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด binary๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์‹œ source code line์ด ์–ด๋””์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์€ ๊ทธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•ฑ์„ ๋นŒ๋“œํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ binary file์ด ๋‚˜์˜จ๋‹ค. App Executable, frameworks, app extension ๋“ฑ ๋ชจ๋‘ binary๋กœ output์ด ๋‚˜์˜จ๋‹ค. ์ด๋ ‡๊ฒŒ binary๋กœ ๋‚˜์˜ค๋Š” ์นœ๊ตฌ๋“ค์€ ๋ชจ๋‘ dSYM file์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ฆ‰, binary์™€ dSYM์€ ๊ฐ™์€ Build UUID๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋‹ˆ๋Š” ์นœ๊ตฌ๋“ค์ด๋‹ค.

๋งŒ์•ฝ์— ๊ฐ™์€ source์—์„œ ๋‘๊ฐœ์˜ binary๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ Xcode ๋ฒ„์ „์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜, Build setting์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ, Build UUID๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด dSYM๋„ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋นŒ๋“œ์— ๋”ฐ๋ผ dSYM์ด ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๊ฐ€ ๋นŒ๋“œํ•œ product์˜ dSYM์„ ์ž˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

์ƒ์„ฑ ๋ฐฉ๋ฒ•

Xcode โ†’ Project โ†’ Build Settings โ†’ Build Options >โ€˜DEBUG_INFORMATION_FORMATโ€™ โ†’ โ€˜DWARF with dSYM Fileโ€™

ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ์œผ๋กœ ๋งŒ๋“ค๋ฉด ์œ„์™€ ๊ฐ™์ด ์ด๋ฏธ Release์˜ ๊ฒฝ์šฐ dSYM file์„ ๋งŒ๋“ค๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

ํ™•์ธ ๋ฐฉ๋ฒ•

Xcode > Preferences > Location > Archives
Xcode > Window > Organizer
~/Library/Developer/Xcode/Archives

๊ฒฐ๊ตญ Archive ํด๋”์— ๊ฐ€์„œ, xcarchive ํŒŒ์ผ์„ ํŒจํ‚ค์ง€ ๋‚ด์šฉ ๋ณด๊ธฐ๋กœ ์—ด๋ฉด ๋œ๋‹ค. ํ•ด๋‹น ํด๋” ์•ˆ์— dSYMs ๋ผ๋Š” ํด๋”๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

BitCode์™€ dSYM

๊ธฐ์กด์—๋Š” ์™„์ „ํžˆ ์ปดํŒŒ์ผ๋œ ์‹คํ–‰ํŒŒ์ผ๊ณผ dSYM ํŒŒ์ผ ๋ชจ๋‘๋ฅผ AppStore์— ์˜ฌ๋ ธ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋‹ˆ ํŒŒ์ผ์ด ๋‘๊ฐœ๋ผ ์•„๋ฌด๋ž˜๋„ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์› ๋‹ค. ์ด์ „ ๊ธ€์—์„œ BitCode์— ๋Œ€ํ•ด์„œ ๋ฐฐ์› ๋Š”๋ฐ, ์ด BitCode๋Š” Intermediate Representation(IR), ์ฆ‰ ์ค‘๊ฐ„์–ธ์–ด๋กœ์„œ ๋‹ค์–‘ํ•œ Architecture์— ๋งž๋Š” ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค๊ณ  ๋งํ–ˆ์—ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์ผ ๋‹ค๋ฉด, ๊ทธ๋Ÿผ dSYM ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ์ฑ…์ž„์€ AppStore์—์„œ ํ•ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

๊ทธ๊ฒŒ ๋งž๋‹ค. ์‹ค์ œ๋กœ Organizer์˜ Archive์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด, dSYMs๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ Download๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์ตœ์ข… Product์—์„œ ํ•„์š”ํ•œ dSYM์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ์›ํ•˜๋Š” ๋™์ž‘์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„์—์„œ .xcarchive๋‚ด๋ถ€์—์„œ dSYM์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค ํ–ˆ๋Š”๋ฐ, ์ด dSYM๊ณผ AppStore dSYM์€ ๋‹ค๋ฅธ ํŒŒ์ผ์ด๋‹ค.

์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. BitCode๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •๋„ Compile์˜ ์ผ์ข…์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด์— ๋Œ€์‘๋˜๋Š” dSYM์ด ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  BitCode๋ฅผ binary๋กœ ๋งŒ๋“ค ๋•Œ๋„ ์ปดํŒŒ์ผ์ด๋‹ˆ ์ƒ์„ฑ๋œ๋‹ค. ๊ฐ€์žฅ ์œ„์—์„œ binaryํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •, ์ฆ‰ ์ปดํŒŒ์ผ๊ณผ์ •์—์„œ dSYM์ด Pair๋กœ ๊ฐ™์ด ์ƒ์„ฑ๋œ๋‹ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, bitcode๋ฅผ ๋งŒ๋“ค๋•Œ ๋ฐœ์ƒํ•˜๋Š” dSYM๊ณผ AppStore์—์„œ binary๋ฅผ ๋งŒ๋“ค๋•Œ ๋ฐœ์ƒํ•˜๋Š” dSYM์€ ๋‹ค๋ฅธ ํŒŒ์ผ์ด๋‹ค. ์ด์ ์„ ๊ธฐ์–ตํ•ด ๋‘์ž.

Framework์™€ dSYM

Library, Framework๊ธ€์„ ์ฝ๊ณ  ์™”๋‹ค๋ฉด, static library์™€ dynamic library์˜ ์ฐจ์ด๋Š” ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.

static library์˜ ๊ฒฝ์šฐ app executable์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น library์˜ dSYM์€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋Œ€๋กœ dynamic library๋Š” ์ƒ์„ฑ๋œ๋‹ค. dynamic library, ์ฆ‰ framework๋Š” binary framework๋กœ์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น framework์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ product์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— dSYM์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•˜๋‹ค.

Crash Organizer

Crash Organizer๋Š” ์ถฉ๋Œ ๊ด€๋ จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ž์„ธํ•œ ๊ฑด Reference์˜ WWDC2021 ์˜์ƒ์„ ๋ณด๋„๋ก ํ•˜์ž.

๋งˆ๋ฌด๋ฆฌ

์ด์ œ dSYM ๋‹จ์–ด๊ฐ€ ๋‚˜์™€๋„ ํฌ๊ฒŒ ์ซ„์ง€ ์•Š๊ณ  ๋ฌธ์„œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋!

Reference