When Xcode compiles your source code into machine code, it generates a list of symbols1 in your app — class names, global variables, and method and function names. These symbols correspond to the file and line numbers where they’re defined; this association creates a debug symbol, so you can use the debugger in Xcode, or refer to2 line numbers reported by a crash report. Debug builds of an app place the debug symbols inside the compiled binary file by default, while release builds of an app place the debug symbols in a companion debug symbol (dSYM) file to reduce the size of the distributed app.
Each binary file in an app — the main app executable, frameworks, and app extensions — has its own dSYM file. The compiled binary and its companion dSYM file (配套dSYM文件) are tied together by a build UUID that’s recorded by both the built binary and dSYM file. If you build two binaries from the same source code but with different Xcode versions or build settings, the build UUIDs for the two binaries won’t match. A binary and a dSYM file are only compatible with each other when they have identical (完全相同的) build UUIDs. Keep the dSYM files for the specific builds you distribute, and use them when diagnosing issues from crash reports.