Exported Symbols Metadata

In an iOS binary, exported symbols refer to identifiers, such as functions or variables, that are intended for external use. These symbols are typically included in frameworks to facilitate linking or dynamic usage by external components. However, within the app binary itself, these exported symbols serve no practical purpose, as no other app will link against or use them directly.

Example Exports Metadata in an app

Example Exports Metadata in an app

How to remove them

Since Xcode 16, the build process no longer includes the _main symbols into the app, this means that if you use our old suggested solution (-Wl, -exported_symbols_list,/dev/null), the app will crash on launch.

The recommended solution is:

  • Create a new text file in your project
  • Add:
  • _main
    
    • If you are using symbols dynamically (using dlsym() like Firebase Crashlytics does), you might need to keep some symbols in your app.
    • Add __mh_execute_header if you use Crashlytics.
  • Add add its path to Exported Symbols File setting in Xcode:
Example of Exported Symbols File

Example of Exported Symbols File