Кросплатформна розробка мобільного застосунку на Xamarin
Xamarin.iOS та Xamarin.Android забезпечують прямі біндинги до нативних SDK — без мосту, без проміжного рантайму крім Mono. Це відрізняє їх від React Native або Cordova: ви працюєте з тими ж UIViewController, UITableView, RecyclerView, ConstraintLayout, що й при нативній розробці, просто на C# замість Swift/Kotlin. Xamarin.Forms додає спільний UI-шар зверху, але ціною втрати прямого контролю над кожним нативним віджетом.
Microsoft завершила активну підтримку Xamarin у травні 2024 року — нові проекти на чистому Xamarin не починаємо. Наша робота в цьому напрямку: підтримка існуючих Xamarin-застосунків та їх міграція на .NET MAUI.
Підтримка існуючих Xamarin-проектів
Супроводження Xamarin-застосунку в 2024–2025 — це специфічне завдання. Основні проблеми:
Застарілі NuGet-пакети. Деякі пакети більше не оновлюються під Xamarin.iOS 16+ та Android API 33+. Типовий приклад — Xamarin.Forms.GoogleMaps: останній стабільний реліз був у 2022, та на Android 13 виникають runtime crashes через зміни в дозволах геолокації. Доводиться форкати, патчити або замінювати альтернативами.
iOS 16/17 breaking changes. Apple продовжує ускладнювати вимоги privacy manifests починаючи з iOS 17 — будь-який застосунок, що використовує NSUserDefaults, FileTimestamp, SystemBootTime та ряд інших API без PrivacyInfo.xcprivacy, отримує попередження при завантаженні в App Store Connect, а з 2024 — відхилення. У Xamarin.iOS PrivacyInfo.xcprivacy додається вручну як BundleResource.
Mono рантайм та ARM64. Xamarin.iOS компілює в нативний ARM64 через AOT — тут все добре. Xamarin.Android використовує Mono runtime з JIT на ARM, що означає більший розмір застосунку та повільний cold start порівняно з .NET MAUI на .NET 8 AOT.
Що робимо при підтримці
Для діючих Xamarin-застосунків: оновлюємо цільові SDK (TargetFramework, minSdkVersion/targetSdkVersion), патчимо залежності, додаємо privacy manifest для iOS, виправляємо deprecated API (наприклад, UIWebView → WKWebView — Apple давно вимагає заміну). Проводимо аудит дозволів під Android 13/14 з новою моделлю READ_MEDIA_IMAGES, POST_NOTIFICATIONS.
CI для Xamarin — msbuild / xcodebuild через Azure DevOps або GitHub Actions з Fastlane для підпису. Xamarin.iOS збирання вимагає macOS-агента з потрібною версією Xcode — керуємо через Xcode.app selector або xcodes.
Міграція на .NET MAUI
Для проектів, які планують активний розвиток, рекомендуємо міграцію. Microsoft надала dotnet-upgrade-assistant з командою upgrade-assistant upgrade --non-interactive — він переписує csproj, оновлює namespace з Xamarin.* на Microsoft.Maui.*, але вимагає ручної правки в 30–50% випадків.
Найбільш трудомісткі частини міграції: заміна Renderer на Handler, перевід Xamarin.Essentials на MAUI Essentials (API сумісні, але простори імен змінилися), та робота з залежним від платформи кодом у DependencyService — у MAUI це заміняється partial class або нативними хуками MauiProgram.cs.
Терміни міграції — від 4 тижнів (невелике застосунку без кастомних рендереров) до 3–4 місяців (великий продукт з глибокою нативною інтеграцією).
Вартість розраховується індивідуально після аудиту існуючого коду та оцінки обсягу змін.







