안녕하세요 피터입니다 😃
"DWARF with dSYM File"이 무엇일지 궁금해서 한번 알아보았습니다 ~!
DWARF는 오류 추적 및 프로파일링 도구와 같은 디버깅 도구를 지원하기 위해 개발된 디버그 데이터 형식입니다. 이 이름은 특별한 줄임말이 아니며, 그저 이름 자체입니다. DWARF는 디버깅을 위한 정보를 표현하기 위한 표준화된 방식으로, 컴파일 타임에 소스 코드와 바이너리 간의 관계를 설명합니다. 이를 통해 디버거는 실행 시간에 프로그램이 어떻게 동작하는지 이해하고 문제점을 진단할 수 있습니다.
소스 코드와 바이너리 간의 관계
소스 코드는 개발자가 작성하는 원시 코드입니다. 이것은 컴파일러에 의해 바이너리(기계어)로 변환되며, 실제로 컴퓨터나 모바일 장치에서 실행됩니다. 바이너리는 기계가 이해하고 실행할 수 있는 저수준 언어로의 번역된 코드입니다. DWARF는 이러한 소스 코드와 바이너리 간의 관계를 매핑하여, 디버거가 실행 중인 프로그램의 어느 부분이 원래 소스 코드의 어느 부분에 해당하는지 알 수 있게 해줍니다.
dSYM 파일은 "Debug Symbol" 파일을 의미하며, 앱이 크래시했을 때 해당 크래시 로그를 해석하는 데 필요한 디버그 심볼을 포함합니다. 실제로 앱을 배포할 때는 이러한 디버그 정보를 앱 바이너리에 포함시키지 않습니다. 왜냐하면 디버그 정보는 추가적인 공간을 차지하기 때문입니다. 대신 디버그 정보는 별도의 dSYM 파일에 저장되며, 필요할 때 해당 파일을 사용하여 크래시 로그를 심볼리케이션(symbolication)하여 원인을 찾을 수 있게 됩니다.
디버그 심볼(Debug Symbol)
이것은 바이너리 코드 내의 특정 위치를 인식하게 해주는 식별자 또는 참조입니다. 예를 들면, 함수 이름, 변수 이름 등이 이에 해당합니다. 디버그 심볼을 사용하면 크래시 로그나 스택 트레이스에서 익명의 메모리 주소 대신 인간이 읽을 수 있는 심볼릭 이름을 보게 됩니다.
dSYM 파일에 저장하는 의미
앱을 개발하고 테스트하는 동안 디버그 정보는 굉장히 유용합니다. 그러나 실제 사용자에게 앱을 배포할 때 이러한 정보는 보안과 성능 문제를 야기할 수 있습니다. 따라서 dSYM 파일은 앱의 바이너리에서 디버그 정보를 분리하여 별도로 저장하는 방식입니다. 이렇게 함으로써 앱의 바이너리 크기는 최소화되고, 디버그 정보는 필요할 때만 참조할 수 있게 됩니다.
Xcode의 "DWARF with dSYM File" 설정은 앱의 바이너리에는 DWARF 형식의 디버그 정보를 포함시키고, 추가적인 디버그 심볼을 dSYM 파일에 저장하는 것을 의미합니다. 이 설정을 사용하면 앱의 실행 파일 크기를 줄이면서도, 필요한 경우 외부 dSYM 파일을 통해 디버깅을 할 수 있는 유연성을 얻을 수 있습니다.
요약하면, "DWARF with dSYM File"는 앱의 크기와 성능을 최적화하면서도 필요한 디버깅 정보를 유지하기 위한 Xcode 설정입니다.