Cross-Platform Mobile App Development with Xamarin
Xamarin.iOS and Xamarin.Android provide direct bindings to native SDKs — no bridge, no intermediate runtime except Mono. This distinguishes them from React Native or Cordova: you work with the same UIViewController, UITableView, RecyclerView, ConstraintLayout as in native development, just in C# instead of Swift/Kotlin. Xamarin.Forms adds a common UI layer on top, but at the cost of losing direct control over each native widget.
Microsoft ended active Xamarin support in May 2024 — we don't start new projects on pure Xamarin. Our work in this direction: supporting existing Xamarin applications and migrating them to .NET MAUI.
Supporting existing Xamarin projects
Maintaining a Xamarin application in 2024–2025 is a specific task. Main problems:
Outdated NuGet packages. Many packages are no longer updated for Xamarin.iOS 16+ and Android API 33+. Typical example — Xamarin.Forms.GoogleMaps: last stable release was in 2022, and on Android 13 runtime crashes occur due to geolocation permission changes. We end up forking, patching, or replacing with alternatives.
iOS 16/17 breaking changes. Apple continues tightening privacy manifest requirements starting with iOS 17 — any application using NSUserDefaults, FileTimestamp, SystemBootTime and several other APIs without PrivacyInfo.xcprivacy gets warnings when uploading to App Store Connect, and from 2024 — rejection. In Xamarin.iOS PrivacyInfo.xcprivacy is added manually as BundleResource.
Mono runtime and ARM64. Xamarin.iOS compiles to native ARM64 via AOT — all is well here. Xamarin.Android uses Mono runtime with JIT on ARM, which means larger app size and slower cold start compared to .NET MAUI on .NET 8 AOT.
What we do during support
For active Xamarin applications: update target SDKs (TargetFramework, minSdkVersion/targetSdkVersion), patch dependencies, add privacy manifest for iOS, fix deprecated API (e.g., UIWebView → WKWebView — Apple long requires replacement). Conduct audit of permissions under Android 13/14 with new READ_MEDIA_IMAGES, POST_NOTIFICATIONS model.
CI for Xamarin — msbuild / xcodebuild via Azure DevOps or GitHub Actions with Fastlane for signing. Xamarin.iOS build requires macOS agent with needed Xcode version — managed via Xcode.app selector or xcodes.
Migration to .NET MAUI
For projects planning active development, we recommend migration. Microsoft provided dotnet-upgrade-assistant with upgrade-assistant upgrade --non-interactive command — it rewrites csproj, updates namespace from Xamarin.* to Microsoft.Maui.*, but requires manual fixing in 30–50% of cases.
Most labor-intensive migration parts: replacing Renderer with Handler, transitioning Xamarin.Essentials to MAUI Essentials (APIs compatible, but namespaces changed), and working with platform-specific code in DependencyService — in MAUI replaced by partial class or native MauiProgram.cs hooks.
Migration timelines — from 4 weeks (small app without custom renderers) to 3–4 months (large product with deep native integration).
Cost calculated individually after auditing existing code and estimating change volume.







