study record

[iOS] dSYM이란? 본문

iOS

[iOS] dSYM이란?

asong 2025. 7. 27. 23:41

debug dSYM 은 iOS 앱 빌드와 Crashlytics, 디버깅 과정에서 아주 중요한 개념이다.

Firebase Crashlytics 추가하는 작업을 하면서 어떤 개념인지 알고 가면 좋을 것 같아 작성해본다.

 

dSYM (Debug Symbol File) = 컴파일 시 생성되는 디버깅 정보 파일

  • .dSYM은 앱을 빌드할 때 생성되는 디버그 심볼(symbol) 정보가 담긴 파일입니다.
  • 기계어 바이너리와 연결된 사람이 읽을 수 있는 함수 이름, 파일명, 라인 정보 등을 저장합니다.

쉽게 말하면:
앱이 crash 나서 0x1043abddc 같은 주소로 죽었을 때,
TeamNewsView.swift:42 같은 정확한 소스코드 위치로 해석해주는 역할을 dSYM이 합니다.

 

dSYM 파일은 말 그대로 "소스코드와 빌드된 바이너리 간의 연결 고리" 역할을 하며, 그 안에는 다음과 같은 정보들이 압축/구조화된 형태로 저장되어 있습니다.

dSYM은 컴파일 시 생성되는 디버깅 정보 파일입니다.

이 파일 안에는:

  • 기계어 주소 (메모리 주소) 
  • 소스코드의 함수, 파일 경로, 줄 번호 등
    👉 1:1로 맵핑되어 저장됩니다.
  • 앱을 빌드할 때 (DEBUG_INFORMATION_FORMAT = dwarf-with-dsym일 경우) 생성된다.

 

 

Debug dSYM이란?

"Debug dSYM"은 일반적으로 디버그 모드(Debug configuration)로 빌드할 때 생성되는 dSYM 파일을 말합니다.

즉:

  • Debug 빌드: 개발용. dSYM이 항상 생성됨, 디버깅 편의성 우선
  • Release 빌드: 릴리즈용. dSYM은 옵션, 최적화를 위해 일부 기호가 제거되거나 생략됨

 

Xcode 설정에서 확인하는 곳

Build Settings > Debug Information Format


DWARF 빠른 빌드, 디버깅 가능 (단, dSYM 파일은 생성 안 됨)
DWARF with dSYM File  dSYM 파일 생성됨, Crashlytics 사용 시 필수
None 디버깅 정보 없이 빌드 (크래시 해석 불가)
 

 DWARF with dSYM File을 사용하면 Crashlytics에 필요한 dSYM이 생성됩니다.

 

안 만들거나 잃어버리면?

  • Crashlytics나 Xcode는 기계어 주소만 보여줌 → "이게 도대체 어디서 났는지" 알 수 없음
  • 크래시 리포트 분석이 불가능하거나 매우 제한됨

 

 

+)

 

  • Crashlytics가 제대로 작동하려면 dSYM이 반드시 필요
  • dSYM을 수동 업로드하거나, 자동 업로드 스크립트/기능을 활성화해야 합니다.

 

++)

Tuist 환경에서 Firebase Crashlytics 세팅 위해서는

 

Firebase 공식 설명

이거 대로 하면 빌드 에러남.

 아래 처럼 경로 바꿔야 함.

{project_dir}/Tuist/.build/checkouts/firebase-ios-sdk/Crashlytics/run​

 

            scripts: [
                .post(
                    script: """
        $PROJECT_DIR/Tuist/.build/checkouts/firebase-ios-sdk/Crashlytics/run
        """,
                    name: "Crashlytics dSYM Upload",
                    inputPaths: [
                        "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}",
                        "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}",
                        "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist",
                        "$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist",
                        "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)"
                    ]
                )
            ],

 

'iOS' 카테고리의 다른 글

[iOS] Liquid Glass in SwiftUI & UIKit  (0) 2025.11.09
[iOS] 번들이란? (.app, .bundle, Copy Bundle Resources)  (4) 2025.07.21