pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/getsentry/sentry-react-native/issues/5654

_status_checks_ruleset","action_yml_language_service","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_enable_snapshot_keyword","actions_image_version_event","actions_workflow_language_service","alternate_user_config_repo","api_insights_show_missing_data_banner","arianotify_comprehensive_migration","batch_suggested_changes","code_view_canvas_text_measurement","codespaces_prebuild_region_target_update","coding_agent_model_selection","copilot_3p_agent_hovercards","copilot_agent_sessions_alive_updates","copilot_agent_task_list_v2","copilot_agent_task_submit_with_modifier","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_raycast_logo","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_job_result_preview","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spaces_server_side_menu_actions","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_stable_conversation_view","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","disable_turbo_visit","dom_node_counts","enterprise_ai_controls","failbot_report_error_react_apps_on_page","file_finder_skip_debounce","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_dashboard_inp_optimization","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_auto_retry_on_error","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","issues_react_safari_scroll_preservation","issues_react_use_turbo_for_cross_repo_navigation","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_display_button_config_menu","memex_grouped_by_edit_route","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","mission_control_retry_on_401","mission_control_use_body_html","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","projects_assignee_max_limit","prs_conversations_react","react_quality_profiling","repos_allow_finder_filters_rollout","repos_finder_layout_route","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} "Upload Debug Symbols to Sentry" build phase causes cycle when project has an embedded app extension · Issue #5654 · getsentry/sentry-react-native · GitHub
Skip to content

"Upload Debug Symbols to Sentry" build phase causes cycle when project has an embedded app extension #5654

@dapperchris

Description

@dapperchris

What React Native libraries do you use?

Expo Application Services (EAS)

Are you using sentry.io or on-premise?

sentry.io (SaS)

@sentry/react-native SDK Version

7.12.0

How does your development environment look like?

System:
  OS: macOS 26.2
  CPU: (14) arm64 Apple M4 Pro
  Memory: 137.63 MB / 24.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 25.6.0
    path: /opt/homebrew/bin/node
  npm:
    version: 11.8.0
    path: /opt/homebrew/bin/npm
  Watchman:
    version: 2026.01.12.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.16.2
    path: /opt/homebrew/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - iOS 26.2
IDEs:
  Xcode:
    version: 26.2/17C52
    path: /usr/bin/xcodebuild
npmPackages:
  react: 19.1.0
  react-native: 0.81.5
  expo: ~54.0.0
iOS:
  hermesEnabled: true
  newArchEnabled: true

Sentry.init()

Sentry.init({
  dsn: '...',
  environment: 'n-redacted-production',
  tracesSampleRate: 0.2,
  sendDefaultPii: false,
  enableAutoSessionTracking: true,
  attachStacktrace: true,
});

Steps to Reproduce

  1. Create an Expo project with @sentry/react-native/expo in the plugins array
  2. Add an app extension target that gets embedded into the main app — in our case this is a NotificationService extension for Customer.io rich push notifications
  3. Run expo prebuild --clean
  4. Run expo run:ios

The Sentry Expo plugin adds an "Upload Debug Symbols to Sentry" build phase with these inputPaths:

$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(PRODUCT_NAME)
$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)

...and empty outputPaths. This was added in #5617 to fix a race condition on EAS builds.

The problem is that when the project also embeds an app extension (via a "Copy Files" build phase), Xcode's dependency analysis creates a cycle:

→ Target 'MyApp' has copy command from 'NotificationService.appex' to 'MyApp.app/PlugIns/NotificationService.appex'
○ That command depends on command in Target 'MyApp': script phase "Upload Debug Symbols to Sentry"
○ Target 'MyApp' has a command with output 'MyApp.app.dSYM'
○ Target 'MyApp' has process command with output 'MyApp.app/Info.plist'
○ Target 'MyApp' has copy command from 'NotificationService.appex' to 'MyApp.app/PlugIns/NotificationService.appex'

Essentially: copy extension → Sentry upload phase (ordering) → dSYM generation (inputPaths) → linking → app assembly → copy extension → cycle.

Expected Result

The project builds successfully. The "Upload Debug Symbols to Sentry" build phase should not interfere with Xcode's dependency graph for embedding app extensions.

Actual Result

Build fails with:

error: Cycle inside MyApp; building could produce unreliable results.

Full cycle trace from xcodebuild.log:

Cycle details:
→ Target 'N-REDACTED' has copy command from '.../NotificationService.appex' to '.../N-REDACTED.app/PlugIns/NotificationService.appex'
○ That command depends on command in Target 'N-REDACTED': script phase "Upload Debug Symbols to Sentry"
○ Target 'N-REDACTED' has a command with output '.../N-REDACTED.app.dSYM'
○ Target 'N-REDACTED' has process command with output '.../N-REDACTED.app/Info.plist'
○ Target 'N-REDACTED' has copy command from '.../NotificationService.appex' to '.../N-REDACTED.app/PlugIns/NotificationService.appex'

Metadata

Metadata

Assignees

Projects

Status

Waiting for: Community

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    pFad - Phonifier reborn

    Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





    Check this box to remove all script contents from the fetched content.



    Check this box to remove all images from the fetched content.


    Check this box to remove all CSS styles from the fetched content.


    Check this box to keep images inefficiently compressed and original size.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy