iOS Privacy Manifests in .NET MAUI 10: PrivacyInfo.xcprivacy and Required Reason APIs
Practical PrivacyInfo.xcprivacy setup for .NET MAUI 10: Required Reason APIs, tracking domains, SDK signature checks, and ITMS-91065/91053 fixes.
Mobile Tech Lead is written by .NET engineers who ship MAUI apps to the App Store and Google Play every sprint. We publish field notes from real codebases after the deadline lands, so the patterns here have survived TestFlight, Play Console review, and a few angry crash reports. No screenshots of the File → New Project dialog.
Every November the team faces the same question: do we jump to the new .NET MAUI release the week it ships, or wait for the first servicing patch? Our answer has gotten more nuanced since the .NET 8 cycle. We track the dotnet/maui release notes, the Mono runtime changes that land in the iOS workload, and the AndroidX dependency bumps that quietly break binding libraries. Then we map each known issue to a workaround before touching the global.json.
Our upgrade write-ups cover the unglamorous parts: regenerating Resizetizer assets without losing crisp app icons, migrating away from deprecated Handlers, and dealing with the Hot Reload regressions that always sneak into a .0 release. We also benchmark cold start before and after the move, because a faster runtime is wasted if your Shell flyout adds 300ms back.
Most MAUI performance advice on the open web stops at "use CollectionView instead of ListView." That is the easy 10%. The other 90% is profiling a real app with dotnet-trace, reading Instruments time profiles on a physical iPhone, and understanding why your XAML inflation cost doubled after adding a single ControlTemplate. We dig into layout passes, the cost of Bindings versus compiled bindings, and how AOT settings on iOS interact with trimming warnings you have been ignoring.
We also publish concrete numbers. When we recommend switching from a Grid-of-Grids to a custom ILayoutManager, we show the frame timing before and after on a mid-tier Pixel and a four-year-old iPhone, not just a flagship device that hides every sin.
Memory leaks are the silent killer of long-session mobile apps, and MAUI inherits a lot of the historical Xamarin.Forms patterns that leak by default. Event handlers on static services, Page subscriptions that outlive navigation, and platform Handlers that hold strong references back to managed objects are the usual suspects. We walk through reproducing each one with dotnet-gcdump, opening the snapshot in dotMemory or PerfView, and reading the GC roots to find the real culprit.
Our memory series also covers the diagnostics built into recent MAUI releases, including the HandlerDisconnectTracker patterns the team has been pushing, and how to write tests that fail when a page is not collected after navigation. Leaks should be regressions you catch in CI, not Sentry tickets you triage on a Sunday.
Browse the latest articles below for new write-ups every week, or jump into the upgrade and performance archives when you need them. If you would rather read in another language, we publish each article in ten, picked using the same BCP 47 tags your CultureInfo already speaks.
Practical PrivacyInfo.xcprivacy setup for .NET MAUI 10: Required Reason APIs, tracking domains, SDK signature checks, and ITMS-91065/91053 fixes.
A walkthrough of why .NET MAUI apps show black bars on iOS 18 and 26 edge-to-edge devices, what changed in Apple's safe-area defaults, and the exact SafeAreaEdges fix I shipped to production.
A step-by-step walkthrough of the duplicate class androidx error that surfaces after upgrading MAUI from .NET 9 to .NET 10, with diagnosis commands, real fixes, and the version pins that actually held up in production.
If you upgraded a .NET MAUI app to .NET 10 and then ran it on a device or emulator with Android 16 (API 36), you may have noticed something ugly: the status bar now sits on top of your Shell header.
A practical guide to scanning barcodes and QR codes in .NET MAUI 10. Covers ZXing.Net.Maui setup, native Apple Vision and Google ML Kit handlers, camera permissions, and continuous-scan UX with copy-paste code.
Build GPS tracking and geofencing in .NET MAUI 10 with battery-friendly background services on Android and iOS. Working code, permissions, and tips.
A practical 2026 guide to adding maps to .NET MAUI 10 apps. Compare Microsoft.Maui.Controls.Maps, custom Google Maps and MapKit handlers, Mapbox SDK v11, and OpenStreetMap via Mapsui — with working code, platform setup, and clustering.
App Center retired March 31, 2025. Compare Sentry, Firebase Crashlytics, and Raygun for .NET MAUI 10 with working integration code, dSYM/ProGuard upload, and a vendor-agnostic migration plan.
Complete 2026 guide to Bluetooth Low Energy in .NET MAUI 10 with Plugin.BLE — manifest setup, Android 12+ runtime permissions, scanning, connecting, reading and writing characteristics, and notifications that actually work.
A practical 2026 guide to adding in-app purchases and subscriptions to your .NET MAUI 10 app: the new Microsoft BillingService pattern, Google Play Billing, StoreKit, Microsoft Store, and the server-side receipt validation the official sample leaves out.
Learn how to set up deep linking in .NET MAUI 10 with Android App Links and iOS Universal Links. Covers server-side verification, Shell navigation routing, parameter handling with IQueryAttributable, testing strategies, and common gotchas.
Learn how to capture photos, pick files, and handle media in .NET MAUI 10. Covers MediaPicker with multi-select and compression, FilePicker for documents, and CameraView for custom camera experiences — with full code examples.
Choose your preferred language to explore our content