Skip to content

fix(client): enforce dSYM generation for all targets#2716

Merged
fortuna merged 1 commit intomasterfrom
fix/apple-dsym-generation
Feb 24, 2026
Merged

fix(client): enforce dSYM generation for all targets#2716
fortuna merged 1 commit intomasterfrom
fix/apple-dsym-generation

Conversation

@fortuna
Copy link
Collaborator

@fortuna fortuna commented Feb 24, 2026

This reduces the warnings about debug symbols not loading from 3 to 1. It's unclear what the remaining component is.
I'm hoping this will give us better error logs, so we can find issues with iOS/macOS. Let's make sure we include this in the next release.

Before:
image

After:
image

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request enforces dSYM (debug symbol) file generation for all Apple/Xcode targets to improve debugging capabilities and reduce warnings about missing debug symbols. The PR modifies build settings in Xcode project configuration files to ensure consistent dSYM generation across all targets, which reduces debug symbol warnings from 3 to 1 according to the PR description.

Changes:

  • Consolidated DEBUG_INFORMATION_FORMAT settings to project level in Outline.xcodeproj to ensure all targets use "dwarf-with-dsym"
  • Updated OutlineLib.xcodeproj Debug configuration to use "dwarf-with-dsym" instead of "dwarf"

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
client/src/cordova/apple/xcode/Outline.xcodeproj/project.pbxproj Removed target-specific DEBUG_INFORMATION_FORMAT settings and added project-level "dwarf-with-dsym" configuration for both Debug and Release builds
client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj Changed Debug configuration from "dwarf" to "dwarf-with-dsym" to match Release configuration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@fortuna fortuna changed the title fix(apple): enforce dSYM generation for all targets fix(client): enforce dSYM generation for all targets Feb 24, 2026
@fortuna
Copy link
Collaborator Author

fortuna commented Feb 24, 2026

It seems the missing symbols are for Sentry, so I think we are ok with that. Below is the explanation from Gemini.


The problem isn't with your main Outline app, the VpnExtension, or even Tun2socks.

The warning from App Store Connect is complaining about missing dSYMs for the UUIDs D38AF77B... and 7148B99C....

Based on my investigation into the derived data and the Sentry Swift Package, the missing dSYMs are for the pre-compiled Sentry framework
(Sentry-Dynamic.xcframework).

Here is what's happening:

  1. When you include Sentry via Swift Package Manager, Xcode downloads a pre-compiled .xcframework that already contains its own embedded dSYM files.
  2. In older versions of Xcode, Xcode would automatically extract those dSYMs from the Swift Package and bundle them into your final app archive.
  3. However, there is a known Xcode 15+ bug where Xcode fails to copy the dSYMs from dynamic .xcframework Swift Packages into the final .xcarchive
    folder, causing App Store Connect to complain that it's missing symbols for that specific framework.

How to Fix This

Because this is an Xcode bug related to Swift Package Manager and dynamic frameworks, the standard workaround is to add a small Run Script phase to your
Xcode build process that manually copies the dSYMs from the Swift Package into your archive directory.

Since you've already opened the Xcode project, here is how you can implement this fix:

  1. Open Outline.xcodeproj in Xcode.
  2. Select the Outline target in the left sidebar.
  3. Go to the Build Phases tab.
  4. Click the + button at the top left of the Build Phases list and select New Run Script Phase.
  5. Name it something like "Copy Sentry dSYMs".
  6. Drag this new phase so it runs after "Embed Frameworks" but before the signing phases.
  7. Paste the following script into the script box:
# This script works around an Xcode 15 bug where dSYMs from dynamic XCFrameworks
# included via Swift Package Manager are not copied into the final archive.
# Without this, App Store Connect warns about missing symbols.

if [ "$CONFIGURATION" = "Release" ]; then
    echo "Copying Sentry dSYMs to archive..."

    # Path to where Swift Package Manager downloaded the Sentry artifacts

SENTRY_DSYM_PATH="${BUILD_DIR}/../../SourcePackages/artifacts/sentry-cocoa/Sentry-Dynamic/Sentry-Dynamic.xcframework/macos-arm64_x86_64/dSYMs/Sentry.fram
ork.dSYM"

    # Destination path inside the archive
    DEST_DIR="${DWARF_DSYM_FOLDER_PATH}"

    if [ -d "$SENTRY_DSYM_PATH" ]; then
        mkdir -p "$DEST_DIR"
        cp -R "$SENTRY_DSYM_PATH" "$DEST_DIR/"
        echo "Successfully copied Sentry dSYM."
    else
        echo "warning: Sentry dSYM not found at expected path: $SENTRY_DSYM_PATH"
    fi
fi

Alternative: Sentry's Fastlane/CLI

Alternatively, if you use sentry-cli to upload your dSYMs as part of a CI/CD pipeline, sentry-cli usually finds these derived data folders
automatically and uploads them directly to Sentry, meaning you can safely ignore the Apple warning (since Apple doesn't strictly need them, Sentry does).
But if you want a clean App Store Connect upload, the script above is the most reliable way to force Xcode to bundle it!

Copy link
Contributor

@ohnorobo ohnorobo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for hunting this down!

@ohnorobo ohnorobo force-pushed the fix/apple-dsym-generation branch from 19a586e to 8e60a0d Compare February 24, 2026 11:15
@fortuna fortuna merged commit 093fe61 into master Feb 24, 2026
23 checks passed
@fortuna fortuna deleted the fix/apple-dsym-generation branch February 24, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants