maui-accessibility
Guide for making .NET MAUI apps accessible — screen reader support via SemanticProperties, heading levels, AutomationProperties…
Guide for implementing deep linking in .NET MAUI apps. Covers Android App Links with intent filters, Digital Asset Links, and AutoVerify; iOS Universal Links with Associated Domains entitlements and Apple App Site Association files; custom URI schemes; and domain verification
$ npx -y skills add davidortinau/maui-skills --skill maui-deep-linking --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/maui-deep-linkingContext preview
The summary Claude sees to decide when to auto-load this skill.
Guide for implementing deep linking in .NET MAUI apps. Covers Android App Links with intent filters, Digital Asset Links, and AutoVerify; iOS Universal Links with Associated Domains entitlements and Apple App Site Association files; custom URI schemes; and domain verification
name: maui-deep-linking description: > Guide for implementing deep linking in .NET MAUI apps. Covers Android App Links with intent filters, Digital Asset Links, and AutoVerify; iOS Universal Links with Associated Domains entitlements and Apple App Site Association files; custom URI schemes; and domain verification for both platforms. USE FOR: "deep linking", "app links", "universal links", "custom URI scheme", "intent filter", "Associated Domains", "Digital Asset Links", "open app from URL", "handle incoming URL", "domain verification". DO NOT USE FOR: in-app Shell navigation (use maui-shell-navigation), push notification handling (use maui-push-notifications), or web content embedding (use maui-hybridwebview).
just deep links). Without it, Android shows a disambiguation dialog instead of opening your app directly.
`OnCreate` fires for cold starts; `OnNewIntent` fires when the app is already running. Missing either means links silently fail in one scenario.
// ❌ Only handles cold-start links
protected override void OnCreate(Bundle? savedInstanceState)
{
base.OnCreate(savedInstanceState);
HandleDeepLink(Intent);
}
// ✅ Handles both cold-start and warm-start links
protected override void OnCreate(Bundle? savedInstanceState)
{
base.OnCreate(savedInstanceState);
HandleDeepLink(Intent);
}
protected override void OnNewIntent(Intent? intent)
{
base.OnNewIntent(intent);
HandleDeepLink(intent);
}testing. Debug and release builds use different keys — update `assetlinks.json` accordingly or verification silently fails.
adb shell pm get-app-links com.example.myapp
Look for `verified` status, not just `ask`.
physical device.
(iOS 14+). During development, use the `?mode=developer` query param or Apple's CDN diagnostics: `swcutil dl -d example.com`.
and `SceneWillConnect`. Missing any one causes links to fail for specific app states (cold start, background resume, or scene-based launch).
Writing just `example.com` instead of `applinks:example.com` silently fails.
---
Deep link callbacks can fire on background threads. Shell navigation must run on the main thread.
// ❌ May crash — GoToAsync called off the main thread
static void HandleUniversalLink(string? url)
{
if (string.IsNullOrEmpty(url)) return;
Shell.Current.GoToAsync(MapToRoute(url));
}
// ✅ Dispatch to main thread
static void HandleUniversalLink(string? url)
{
if (string.IsNullOrEmpty(url)) return;
MainThread.BeginInvokeOnMainThread(async () =>
await Shell.Current.GoToAsync(MapToRoute(url)));
}Register Shell routes in `AppShell` constructor **before** any deep link can fire. If the route doesn't exist, `GoToAsync` throws silently or navigates to root.
| Approach | Verified | Fallback to browser | Recommended | |---|---|---|---| | Custom URI scheme (`myapp://`) | No | No | Only for app-to-app communication | | Android App Links (`https://`) | Yes | Yes | ✅ Production web links | | iOS Universal Links (`https://`) | Yes | Yes | ✅ Production web links |
> ⚠️ Custom URI schemes are **not verified** — any app can register the same > scheme. Use `https://` App Links / Universal Links for user-facing URLs.
---
A collection of 41 skills for .NET MAUI development, UI/UX design reasoning, and Xamarin migration, designed for use with GitHub Copilot CLI and Claude Code.
Guide for making .NET MAUI apps accessible — screen reader support via SemanticProperties, heading levels, AutomationProperties…
.NET MAUI view animations, custom animations, easing functions, rotation, scale, translation, and fade effects. USE FOR: "animate…
.NET MAUI app icon configuration, splash screen setup, SVG to PNG conversion at build time, composed/adaptive icons, and…
.NET MAUI app lifecycle guidance covering the four app states (not running, running, deactivated, stopped), cross-platform Window…
Guide for .NET MAUI apps consuming .NET Aspire-hosted backend services. Covers AppHost configuration, service discovery for…
Add authentication to .NET MAUI apps. Covers WebAuthenticator for generic OAuth 2.0 / social login, and MSAL.NET for Microsoft…