A Microsoft open-source framework for building native device applications spanning mobile, tablet, and desktop.
Hello @Vignesh Palthurai , and thank you for reaching out. I was able to narrow this down to a known .NET 10 iOS Release-build issue involving Firebase Crashlytics.
For your questions, here are the answers:
- Why do the _ExportSymbolsExplicitly and _ReferencesLinkerFlags settings cause a startup crash specifically in the IPA/Release build?
The startup crash is a known .NET 10 iOS issue with _ExportSymbolsExplicitly=false in Release builds.
It's tracked in .NET for iOS issue #25427, and issue #25491 so please refer to them if you want the detailed technical investigation.
The underlying issue has since been fixed in PR #25494 but not available yet in .NET 10.
- Why does the application run successfully in Debug mode with these settings but crash when the IPA is created and executed through BrowserStack?
The Debug/Release difference is expected for this issue.
The failure occurs in the Release/native iOS build path, while Debug does not reproduce the same startup failure. BrowserStack is running the generated IPA, so it surfaces the Release-only behavior.
- Are these linker settings still required for .NET 10 / MAUI 10 with Plugin.Firebase 4.0.0?
No, these linker settings are not documented as required configuration for Plugin.Firebase 4.0.0 on .NET 10.
The _ExportSymbolsExplicitly=false setting was used as a workaround for the Crashlytics __mh_execute_header symbol issue, but it is affected by the .NET 10 Release-build issue described above. Plugin.Firebase 4.0.0's Crashlytics documentation does not list these linker settings as part of its standard iOS setup.
- Is there an alternative configuration for iOS that allows Firebase Crashlytics to work without adding these linker settings?
There is now a confirmed fix for the Release startup crash, but it is not yet available in .NET 10. PR #25494 fixes the underlying strip issue.
Your reported iOS workload is 26.5.10315, while the latest .NET 10 iOS servicing release is 26.5.10318. PR #25494 is not listed in the .NET 10 iOS release notes, so the fix does not appear to be available in .NET 10 yet.
The available options you may want to try are:
- Export
__mh_execute_headerdirectly throughReferenceNativeSymbolwhile leaving_ExportSymbolsExplicitlyat its default value.
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
<ReferenceNativeSymbol Include="_mh_execute_header" SymbolType="Function" />
</ItemGroup>
- Use the older toolchain combination documented in issue #25491: Xcode 26.3, workload set
10.0.300, and iOS workload26.2.10233, with_ExportSymbolsExplicitly=false. - Move to the .NET 11 preview line, where the fix from PR #25494 is available.
-
Update the .NET 10 iOS workload to 26.5.10318 and retest.(note: this approach is tried and didn't work)
- Could this be related to changes in the .NET 10 / MAUI 10 iOS linker/trimmer/AOT build process?
Yes, the issue appears to be in the .NET 10 iOS linker/build pipeline.
In particular, issue #25491 reproduces the Release startup failure with a clean MAUI app and shows different results across .NET/iOS workload and Xcode combinations.
- Since the IPA crashes during startup before I can capture an application-level exception, could you please advise how I can obtain the native iOS crash log or linker/AOT diagnostic information needed to identify the root cause?
Although there may be no need to collect the crash log now - if you still need to obtain the native iOS crash report from a BrowserStack App Live session, you can do as follows:
- Open the
BrowserStack App Livedashboard and upload or install the affected IPA. - Start a session using the affected IPA on a real iOS device.
- Reproduce the startup crash during that session.
- On the App Live vertical toolbar, select
iOS Settings. - Under
Crash Logs, selectFetch logs. - BrowserStack will download the crash logs as a ZIP file. The ZIP contains the native
.ipscrash report.
Please do note the logs checked under Console -> Logs are not the native crash report, but rather from iOS Settings -> Crash Logs -> Fetch logs instead. The .ips report contains the Exception Type, Termination Reason, and crashed thread.
In summary, this is a known .NET iOS issue that has already been fixed, but the fix is not yet confirmed to be available in .NET 10. On affected versions, the _ExportSymbolsExplicitly=false workaround can cause the Release build to crash at startup. Until the fix becomes available in .NET 10, you can use the older working configuration mentioned above or try the alternative workaround.
If you found my response helpful or informative, I would greatly appreciate it if you could follow this guide for your confirmation.
Thank you.