Documentation

Go to Portal Website

Strip Debug Symbols

PlanPlatformsMASVS
TeamiOSMASVS-RESILIENCE-3

Overview

StripDebugSymbols removes debug symbols, function names, variable names, and DWARF debug information from compiled iOS binaries during the build pipeline. This control operates at build time to eliminate identifying metadata from the shipped binary, making reverse engineering significantly more difficult while maintaining full runtime functionality.

The control applies the strip command to all Mach-O binaries in the application bundle (main executable, frameworks, dynamic libraries, and app extensions) after compilation but before packaging. Debug symbols are never used at runtime, so their removal has zero performance or functional impact.

How It Works

StripDebugSymbols is a build-time control that runs during AppTego protected build processing after the application has been compiled but before it is packaged into an IPA. The control scans the extracted .app bundle and identifies all Mach-O binaries:

For each binary, the control invokes the macOS strip command with the following strategy:

  1. Primary Method (strip -x):
  1. Fallback Method (strip -S):

The stripped binaries are written back to the .app bundle, replacing the originals. No debug symbols or dSYM files are included in the final IPA delivered to the App Store or distributed to end users.

Build Pipeline Integration

The control runs alongside other iOS obfuscation and metadata-reduction controls before signing and packaging. MobileDefender production frameworks are also shipped without debug symbols.

Threats Mitigated

Caveats

Crash Symbolication Requires dSYM Upload

Crash logs from stripped binaries contain only memory addresses, not human-readable function names or file/line numbers. To symbolicate these crashes, you must:

  1. Retain dSYM files generated during the Xcode archive process
  2. Upload dSYM files to your crash reporting service (Firebase Crashlytics, Sentry, Bugsnag, etc.)
  3. Match dSYM UUIDs to crash reports—each build produces a unique UUID embedded in both the binary and the dSYM

Important: The MobileDefender build pipeline does not include dSYM files in the final IPA. You must upload them separately to your crash reporting backend immediately after each build.

Objective-C and Swift Runtime Metadata Preserved

The control does not remove:

Attackers can still use tools like class-dump or swift-demangle to extract high-level class structures from stripped binaries. For deeper obfuscation of class names, consider enabling ObfuscateClassNames (automatically included when StripDebugSymbols is enabled).

Build-Time Only

This control operates during the build pipeline and cannot be toggled at runtime. Once an IPA is built with debug symbols stripped, they cannot be restored. Enabling or disabling the control requires rebuilding the application.

Simulator Builds Unaffected

Debug symbols remain intact in simulator-focused development builds to preserve development workflow. Production protected builds are stripped when this control is enabled.

Support Matrix

PlatformMinimum VersionNotes
iOSiOS 12.0+Supported. Applied during protected build processing.
AndroidNot supported. Android apps use ProGuard/R8 for bytecode shrinking and obfuscation.

How to Enable the Control

Navigate to Code Obfuscation from the AppTego portal, and expand the Metadata Reduction section. Under this section you will find the Strip Debug Symbols control. Click Enable to apply it to the next protected build.

API Configuration Example

{
  "StripDebugSymbols": {
    "protection": true
  }
}

Configuration Keys

See Also