Repository navigation
Add .NET MAUI sample app - #367
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5346aed430
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Adds a new .NET MAUI sample application (samples/Exceptionless.SampleMaui) demonstrating how to use the core Exceptionless client from a MAUI app via DI, including local file-based queue storage and file logging.
Changes:
- Introduces a MAUI sample app with a simple UI for sending handled exceptions, warning logs, feature usage, and flushing the queue.
- Adds platform-specific bootstrap files/manifests (Android/iOS/Mac Catalyst/Windows) plus app icon and splash resources.
- Registers the new sample project in
Exceptionless.Net.slnxunder the Samples folder.
Reviewed changes
Copilot reviewed 20 out of 23 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| samples/Exceptionless.SampleMaui/Resources/Splash/splash.svg | Adds MAUI splash screen vector asset. |
| samples/Exceptionless.SampleMaui/Resources/AppIcon/appiconfg.svg | Adds MAUI app icon foreground vector. |
| samples/Exceptionless.SampleMaui/Resources/AppIcon/appicon.svg | Adds MAUI app icon background/vector. |
| samples/Exceptionless.SampleMaui/README.md | Documents configuration and how to run/build the MAUI sample. |
| samples/Exceptionless.SampleMaui/Platforms/Windows/Package.appxmanifest | Adds Windows packaging manifest for the MAUI sample. |
| samples/Exceptionless.SampleMaui/Platforms/Windows/App.xaml.cs | Adds WinUI app bootstrap for MAUI. |
| samples/Exceptionless.SampleMaui/Platforms/Windows/App.xaml | Adds WinUI XAML application definition. |
| samples/Exceptionless.SampleMaui/Platforms/Windows/app.manifest | Adds Windows runtime manifest settings (DPI/long paths). |
| samples/Exceptionless.SampleMaui/Platforms/MacCatalyst/Program.cs | Adds Mac Catalyst entry point. |
| samples/Exceptionless.SampleMaui/Platforms/MacCatalyst/Info.plist | Adds Mac Catalyst app metadata. |
| samples/Exceptionless.SampleMaui/Platforms/MacCatalyst/Entitlements.plist | Adds Mac Catalyst entitlements (sandbox + network). |
| samples/Exceptionless.SampleMaui/Platforms/MacCatalyst/AppDelegate.cs | Adds Mac Catalyst app delegate for MAUI. |
| samples/Exceptionless.SampleMaui/Platforms/iOS/Program.cs | Adds iOS entry point. |
| samples/Exceptionless.SampleMaui/Platforms/iOS/Info.plist | Adds iOS app metadata. |
| samples/Exceptionless.SampleMaui/Platforms/iOS/AppDelegate.cs | Adds iOS app delegate for MAUI. |
| samples/Exceptionless.SampleMaui/Platforms/Android/MainApplication.cs | Adds Android application bootstrap for MAUI. |
| samples/Exceptionless.SampleMaui/Platforms/Android/MainActivity.cs | Adds Android main activity bootstrap for MAUI. |
| samples/Exceptionless.SampleMaui/Platforms/Android/AndroidManifest.xml | Adds Android manifest (internet/network permissions). |
| samples/Exceptionless.SampleMaui/MauiProgram.cs | Configures ExceptionlessClient (DI, storage, file logging, default tags/data). |
| samples/Exceptionless.SampleMaui/MainPage.cs | Implements the sample UI and event submission actions. |
| samples/Exceptionless.SampleMaui/Exceptionless.SampleMaui.csproj | Adds the MAUI project file with multi-targeting and project reference to core client. |
| samples/Exceptionless.SampleMaui/App.cs | Adds MAUI Application with queue processing on sleep. |
| Exceptionless.Net.slnx | Registers the new MAUI sample in the main solution. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b43a40dbe1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c285036943
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
c285036 to
27eeb15
Compare
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
70dcb28 to
f5133b8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f5133b8d05
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
f5133b8 to
643a626
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 643a626f06
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9b6df2d003
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
00e5a21 to
35625ad
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 52c3b11d3d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9e61fd7c77
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| await WriteResultAsync(resultPath, | ||
| "status=completed", |
There was a problem hiding this comment.
Verify delivery before reporting autorun completion
When the API key is syntactically valid but unauthorized, or the server returns another submission error, DefaultEventQueue.ProcessAsync logs the failed response and returns normally—sometimes after deleting the batch—so the preceding flush does not indicate successful delivery. This then writes status=completed and event reference IDs even though no event reached Exceptionless, giving dogfood automation a false-positive result; report successful completion only after observing a successful submission response, or label the result as an attempted queue processing instead.
Useful? React with 👍 / 👎.
Adds a MAUI sample using
ExceptionlessClient.Defaultthrough DI, with persistent queuing, private information collection disabled, configuration refresh, and three event actions. Rebased ontomain, updated the MAUI dependency, fixed Apple scene startup and iOS local HTTP, and replaced the placeholder artwork with Exceptionless green branding.Fixes #366.
Validation: Release build (zero warnings), 310 tests passed / 18 existing skips; Final Mac Catalyst UI and configuration/event delivery passed. All six existing Linux/macOS/Windows checks and
license/clapassed on final revision9e61fd7.Local Apple validation required an Xcode-version override (pack expects 26.6; installed 27.0). Dogfood used a loopback test collector at
localhost:18181; ingestion by a real Exceptionless server remains unverified. Android/Windows native runtime remains untested. Merging is blocked by required maintainer approval.Verification and implementation details
main(2054b80) without changing their patches.main; the sample needs only the core client.Exceptionless__ApiKey,Exceptionless__ServerUrl, andExceptionless__EnabledduringStartup(), without a custom environment-variable adapter. Invalid configuration or a disabled client disables page actions and writesstatus=failedduring autorun. Event service methods use SDK APIs directly, without repeated validation exceptions.File.WriteAllLinesAsyncwhile retaining best-effort handling of sandbox file errors.Contents/Resources, with zero warnings/errors in the final Mac build.NSAllowsLocalNetworking. The scene delegates retain the sample's single-window behavior.SampleMaui.ConfigValue=dogfood-ok; error, log, and usage events contained the expected platform/sample tags and unique reference IDs. Repeated log/usage events arrived after the client's normal duplicate-check delay, now explained in the README.http://localhost:18181refreshed configuration and delivered error, log, and usage events with IDs matching the result file.Resources/AppIcon/appiconfg.png.Image generation prompt (the repository's
build/exceptionless-icon.pngwas the identity reference):Reproduce the local Apple build on a supported toolchain:
dotnet workload install maui --version 10.0.401 dotnet build samples/Exceptionless.SampleMaui/Exceptionless.SampleMaui.csproj -c Release -f net10.0-maccatalyst -r maccatalyst-arm64 dotnet build Exceptionless.Net.NonWindows.slnx -c Release dotnet test Exceptionless.Net.NonWindows.slnx -c Release --no-buildUse
net10.0-iosandiossimulator-arm64for iOS. Autorun requiresEXCEPTIONLESS_SAMPLE_AUTORUN=true, a reachableExceptionless__ServerUrl, andExceptionless__ApiKeyset to a test project key; setEXCEPTIONLESS_SAMPLE_AUTORUN_RESULT_PATHto a writable path. Verify collector receipts independently of the runner'sstatus=completed, because client network failures are logged internally.