Otukan protects .NET MAUI apps on their two mobile targets, Android and iOS, in Release configuration. It covers the layers a MAUI package actually contains: your managed assemblies, the .NET runtime that ships with them, native libraries and binding packages, and bundled resources. Because Android and iOS execute .NET code differently, Otukan plans protection per target and per build mode, whether you ship profiled AOT, full AOT, Native AOT or the interpreter, with any trimming level. Mac Catalyst and Windows targets are outside this page. Your exact .NET and workload versions are confirmed against Otukan’s build matrix before integration.
Build matrix
A MAUI project compiles once per target framework, and each target produces a different artefact. The protection plan starts from what really ships.
Runtime and target platform
On Android, a MAUI app runs on the Mono runtime. Release builds use profiled AOT by default: start-up paths are compiled to native code and the remaining intermediate language is compiled just in time on the device. That intermediate language travels inside the package, which is why an unprotected Android release decompiles to readable C#.
On iOS, Apple does not allow just-in-time compilation, so .NET code is compiled ahead of time into the app’s executable. With the Mono runtime, assembly metadata still ships in the bundle. With Native AOT, the app becomes a single native binary. An optional interpreter mode keeps some code as intermediate language on iOS as well.
Linking configuration
Trimming removes unused code from your assemblies and from the framework. It changes which types and members exist in the release, so Otukan protects the trimmed output, not your project as written.
| Setting | What it changes | How Otukan handles it |
|---|---|---|
| Profiled or full AOT (Android) | How much managed code ships as native code versus intermediate language | Hardens assemblies and native output, and checks both for integrity |
| Mono AOT or Native AOT (iOS) | Whether assembly metadata ships beside the executable | Protects metadata where it ships and hardens the native executable |
| Interpreter | Intermediate language kept for runtime interpretation | Treats interpreted assemblies as readable code and hardens them |
| Trimming level | Which types and members remain | Protects the trimmed release and preserves names your reflection needs |
When you describe your project, these are the properties we ask about: TrimMode, RunAOTCompilation, PublishAot, UseInterpreter and AndroidPackageFormat, together with your target framework monikers.
Integration
Protected components
Otukan hardens your own assemblies, including the intermediate language that XAML compilation produces, and protects string literals such as endpoints and feature flags. Integrity checks cover those assemblies, the bundled runtime libraries and the native libraries in the package. Raw resources and configuration files you bundle are included, and secrets placed there are protected. While the app runs, Otukan detects debuggers, emulators and instrumentation attached to the .NET runtime or native code, plus rooted Android devices and jailbroken iPhones, each with its own platform signals.
SDK interaction
Most MAUI apps rely on binding libraries: .NET wrappers around Java or Kotlin libraries on Android, and around frameworks on iOS. Payment, identity and analytics SDKs often arrive this way through NuGet. Otukan protects the binding code you own and tunes runtime checks so that third-party SDKs which inspect the process do not trip your policy. For SDK-level protection in more depth, see mobile SDK protection.
Signing does not move. Your Android upload key and your Apple certificates and provisioning profiles stay with your team, and dotnet publish remains the step your pipeline runs. How protection joins a pipeline is covered on mobile app security integration.
Validation
Supported versions
.NET ships a new major version each November, and MAUI workloads move with it, alongside new Android API levels and Xcode releases. Each of those can change the runtime, the trimmer or the packaging. Otukan revalidates protection against each new combination on physical Android and iOS devices before you move your release branch.
Upgrade checks
For every .NET or workload upgrade, keep a short, repeatable check:
- build a baseline and a protected release from the same commit, per target
- run install, update, sign-in and your most sensitive flow on physical devices
- force a crash in each protected build and confirm the report is readable, using the Otukan name mapping for managed frames and dSYMs or native symbols for native frames
- compare start-up time and package size with the previous protected release
Measurement guidance is on mobile app protection performance. Platform detail is on Android app security and iOS app security.
For how MAUI fits Otukan’s wider protection model, return to mobile app security. To see what your current MAUI store release reveals, request a free App Exposure Check.