기본적으로 Firebase Crashlytics는 디버그 기호(dSYM) 파일을 자동 처리해 사람이 읽을 수 있는 가독화된 비정상 종료 보고서를 제공합니다. 일반적으로 앱에서 Crashlytics 초기 설정 시, 특히 앱 빌드 단계에서 dSYM 파일을 자동으로 업로드하는 실행 스크립트를 추가하여 이 동작을 구성합니다.
자동 dSYM 파일 업로드에 실패하는 몇 가지 경우가 있습니다. 이 가이드에서는 Crashlytics가 앱의 dSYM 파일을 찾을 수 없을 때 문제를 해결할 수 있는 몇 가지 방법을 제공합니다.
Xcode가 dSYM을 자동으로 처리하고 파일을 업로드할 수 있는지 확인
앱에 Crashlytics를 설정할 때 dSYM을 자동으로 처리하고 파일을 업로드하도록 실행 스크립트를 구성했습니다.
Crashlytics 실행 스크립트의 구성이 Xcode 15부터 시작된 새 요구사항을 준수하는 최신 상태인지 확인합니다. 구성이 최신 상태가 아니면 다음 오류가 발생할 수 있습니다. error: Info.plist Error Unable to process Info.plist at path ...
특히 Xcode 15 이상에서는 더 완전한 파일 위치 집합을 제공해야 합니다. Crashlytics 실행 스크립트(firebase-ios-sdk/Crashlytics/run)의 경우 다음과 같이 설정되어 있는지 확인합니다.
Build Phases(빌드 단계) 탭을 클릭한 다음 Run Script(실행 스크립트) 섹션을 펼칩니다.
Xcode는 지정된 위치에서 이러한 입력 파일을 찾아 실행 스크립트에 빌드 파일을 사용할 수 있는지 확인합니다. 또한 사용자 스크립트 샌드박스를 사용 설정하면 Xcode는 실행 스크립트가 입력 파일에 지정된 파일에 액세스하는 것만 허용합니다.
프로젝트의 dSYM 파일 위치를 제공하면 Crashlytics에서 dSYM을 처리할 수 있습니다.
앱의 빌드된 GoogleService-Info.plist 파일 위치를 제공하면 Crashlytics에서 dSYM을 Firebase 앱과 연결할 수 있습니다.
앱의 실행 파일 위치를 제공하면 실행 스크립트가 동일한 dSYM의 중복 업로드를 방지할 수 있습니다. 앱 바이너리는 업로드되지 않습니다.
Xcode의 dSYM 생성 확인
일반적으로 dSYM 파일이 누락되는 이유는 Xcode가 dSYM 파일을 생성하지 않기 때문입니다. 업로드에 실패하면 Crashlytics에서 'dSYM 누락' 알림을 Firebase Console에 표시합니다. 이 알림을 받을 경우 먼저 Xcode로 각 빌드에 올바른 dSYM 파일이 생성되는지 확인합니다.
Xcode에서 프로젝트를 열고 Xcode 탐색기에서 해당 프로젝트 파일을 선택합니다.
기본 빌드 대상을 선택합니다.
대상의 Build Settings(빌드 설정) 탭을 열고 All(전체)을 클릭합니다.
debug information format을 검색합니다.
모든 빌드 유형의 Debug Information Format(디버그 정보 형식)을 DWARF with dSYM File(dSYM 파일로 DWARF)로 설정합니다.
다음 명령어를 실행하여 머신에 모든 dSYM의 UUID를 표시하고 누락된 dSYM을 검색합니다.
mdfind -name .dSYM | while read -r line; do dwarfdump -u "$line"; done
dSYM을 찾으면 Crashlytics에 수동으로 업로드합니다.
mdfind 명령어가 결과를 반환하지 않으면 .app이 있는 Products 디렉터리에서 결과를 볼 수 있습니다. 기본적으로 Products 디렉터리는 Derived Data에 있습니다. 앱이 프로덕션으로 출시된 경우 디스크의 .xcarchive 디렉터리에서 해당 dSYM을 찾을 수도 있습니다.
Xcode에서 Organizer(구성자) 창을 열고 목록에서 앱을 선택합니다. Xcode에 프로젝트의 보관 파일 목록이 표시됩니다.
보관 파일을 Control-클릭하여 Finder에서 확인합니다. 다시 Control-클릭하고 Show Package Contents(패키지 콘텐츠 표시)를 클릭합니다.
.xcarchive 내에는 Xcode의 보관 프로세스 도중에 생성된 dSYM이 포함된 dSYM 디렉터리가 있습니다.
dSYM 업로드
Crashlytics는 dSYM 파일을 자동 또는 수동으로 업로드하는 여러 방법을 지원합니다.
(권장) dSYM을 자동으로 처리하고 파일 업로드
처음 Crashlytics를 설정할 때 앱에 이러한 자동 업로드 동작을 구성했을 가능성이 높습니다. 하지만 자동 업로드가 실패하면 구성이 올바른지 확인하세요.
수동으로 dSYM 파일 업로드
자동 업로드에 실패하면 다음 옵션 중 하나를 사용하여 dSYM 파일을 수동으로 업로드할 수 있습니다.
옵션 1: 콘솔 기반 '드래그 앤 드롭' 옵션을 사용하여 dSYM 파일이 포함된 ZIP 파일을 업로드합니다(Firebase Console > Crashlytics > dSYMs 탭으로 이동).
옵션 2: 빌드 프로세스 중 언제든 호출해 dSYM 파일을 수동으로 업로드할 수 있는 upload-symbols 스크립트를 사용합니다. upload-symbols 스크립트를 실행하려면 다음 옵션 중 하나를 사용합니다.
[null,null,["최종 업데이트: 2025-08-19(UTC)"],[],[],null,["# Get readable crash reports in the Crashlytics dashboard\n\n\u003cbr /\u003e\n\niOS+ Android Flutter Unity \n\n\u003cbr /\u003e\n\nBy default, Firebase Crashlytics automatically processes your debug symbol\n(dSYM) files to give you deobfuscated and human-readable crash reports. You\nusually configure this behavior during the initial setup of Crashlytics in\nyour app, specifically by\n[adding a run script](/docs/crashlytics/get-started?platform=ios#set-up-dsym-uploading)\nthat automatically uploads dSYM files during your app's build phase.\n\nUnfortunately, there are a few cases that could cause your automatic dSYM files\nupload to fail. This guide provides some ways to troubleshoot when\nCrashlytics can't locate your app's dSYM files.\n\nMake sure Xcode can automatically process dSYMs and upload the files\n--------------------------------------------------------------------\n\nWhen setting up Crashlytics in your app, you\n[configured a run script](/docs/crashlytics/get-started?platform=ios#set-up-dsym-uploading)\nto automatically process dSYMs and upload the files.\n\nMake sure that your configuration for the Crashlytics run script is\nup-to-date with the new requirements which started with Xcode 15. If your\nconfiguration isn't up-to-date, you might be getting the following error: \n\n`error: Info.plist Error Unable to process Info.plist at path ...`.\n\nSpecifically, Xcode 15 and later requires that you provide a more complete set\nof file locations. For your Crashlytics run script\n(`firebase-ios-sdk/Crashlytics/run`), make sure that you have the following\nsetup:\n\n1. Click the **Build Phases** tab, and then expand the *Run Script* section.\n\n2. In the *Input Files* section, make sure you have the paths for the locations\n of the following files:\n\n ```\n ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}\n ``` \n\n ```\n ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}\n ``` \n\n ```\n ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\n ``` \n\n ```\n $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist\n ``` \n\n ```\n $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)\n ```\n If you have `ENABLE_USER_SCRIPT_SANDBOXING=YES` and `ENABLE_DEBUG_DYLIB=YES` in your project build settings, then include the following: \n\n ```\n ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}.debug.dylib\n ```\n **Understand why the locations of these files are\n needed**\n\n Xcode looks in the specified locations for these input files to ensure\n that the build files are available for the run script. Also, if\n *User Script Sandboxing* is enabled, Xcode only allows the run\n script to access files specified in the *Input Files*.\n - Providing the location of your project's dSYM files enables Crashlytics to process dSYMs.\n - Providing the location of your app's built `GoogleService-Info.plist` file enables Crashlytics to associate the dSYMs with your Firebase app.\n - Providing the location of your app's executable allows the run script to prevent duplicate uploads of the same dSYM. Note that app binaries are *not uploaded*.\n\nCheck if Xcode is producing dSYMs\n---------------------------------\n\nMore often than not, dSYM files go missing because Xcode simply isn't producing\nthem. When an upload fails, Crashlytics displays a \"Missing dSYM\" alert in\nthe Firebase console. If you get this alert, first check that Xcode is\nproducing the correct dSYM for every build:\n\n1. Open your project in Xcode, and then select the project file in the Xcode\n Navigator.\n\n2. Select your main build target.\n\n3. Open the target's **Build Settings** tab, and then click **All**.\n\n4. Search for `debug information format`.\n\n5. Set **Debug Information Format** to **DWARF with dSYM File** for all\n your build types.\n\n6. Rebuild your app.\n\nYour crash reports should now appear in the\n[Crashlytics dashboard](https://console.firebase.google.com/project/_/crashlytics). If the problem persists or you\nencounter other errors, try [locating your dSYMs](#locate) and\n[uploading them to Crashlytics manually](#upload-dsyms).\n\nLocate your dSYMs on a local machine\n------------------------------------\n\nRun the following command to display all your dSYMs' UUIDs on your machine and\nsearch for the missing dSYM: \n\n```text\nmdfind -name .dSYM | while read -r line; do dwarfdump -u \"$line\"; done\n```\n\nOnce you find the dSYM, [manually upload it to Crashlytics](#upload-dsyms).\nIf the `mdfind` command doesn't return any results, you can look in the\n`Products` directory where your `.app` lives (by default, the `Products`\ndirectory is located in `Derived Data`). If your app is released to production,\nyou can also look for its dSYM in the `.xcarchive` directory on disk:\n\n1. In Xcode, open the **Organizer** window, and then select your app from the\n list. Xcode displays a list of archives for your project.\n\n2. Control-click an archive to view it in Finder. Control-click it again, and\n then click **Show Package Contents**.\n\n3. Within `.xcarchive` is a dSYMs directory that contains dSYMs generated as\n part of Xcode's archiving process.\n\nUpload your dSYMs\n-----------------\n\nCrashlytics supports multiple ways to upload your dSYMs files, either\n[automatically](#auto-upload-dsyms) or [manually](#manually-upload-dsyms).\n\n### *(Recommended)* Automatically process your dSYMs and upload the files\n\nWhen you initially set up Crashlytics, you most likely configured this\nautomatic upload behavior for your app. However, if automatic uploads are\nfailing, [check that your configuration is correct](#check-input-files-setup).\n\n### Manually upload your dSYM files\n\nIf automatic uploads are failing, you can manually upload your dSYM files using\neither of the following options.\n\n- **Option 1** : Use the console-based \"Drag and Drop\" option to upload a zip\n file containing your dSYM files (go to the\n Firebase console \\\u003e\n [Crashlytics](https://console.firebase.google.com/project/_/crashlytics) \\\u003e\n *dSYMs* tab).\n\n- **Option 2** : Use the `upload-symbols` script that you can call from\n anywhere in your build process to manually upload your dSYM files. To run the\n `upload-symbols` script, use either of the following options:\n\n - **Option A**: Include the following line in your build process:\n\n ```gdscript\n find dSYM_DIRECTORY -name \"*.dSYM\" | xargs -I \\{\\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p PLATFORM \\{\\}\n ```\n - **Option B**: Run the script directly from your terminal:\n\n ```\n /PATH/TO/PODS/DIRECTORY/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p ios /PATH/TO/dSYMs\n ```\n\n For usage notes and additional instructions about this script, run\n `upload-symbols` with the `--help` parameter."]]