.NET MAUI Case Study: How we delivered a small Food Ordering app within 2 weeks with zero MAUI experience

Our project was delivered in just two weeks by leveraging .NET MAUI along with ABP.io and MauiKit. Below is an overview of the key aspects and technical decisions made throughout the development process.

Authentication

We implemented token-based authentication, where tokens are securely stored in device memory. Each API request includes the token to ensure proper authentication. This approach was integrated with ABP.io’s authentication framework for a robust security setup.

Choosing a Navigation Approach

Issue: The default shell-based navigation was not suitable for our requirements.
Solution: We implemented a navigation-based approach that offered better control over app flow and dependency injection, improving maintainability and flexibility.

Dependency Injection

.NET and ABP.io naturally support dependency injection (DI), which greatly simplifies managing dependencies. However, MauiKit does not fully leverage DI—especially when the flyout navigation expects a pre-instantiated detail page. We resolved this challenge by integrating DI wherever possible, ensuring our navigational components and services could still be managed efficiently.

Learning Curve with .NET MAUI

Issue: MAUI was a new technology for our team, requiring a rapid learning phase.

Solution: We dedicated focused learning sessions, collaborated effectively, and utilized official documentation and community resources to quickly get up to speed.

Publish and Build APK

Platform-specific configurations are critical when building APKs:

  • Manifest Permissions: We had to be very cautious about which resources and permissions were declared in the manifest for each operating system.
  • Dependency Impacts: Initially, unnecessary permissions caused build delays due to dependency conflicts.

Through iterative testing and refinement, we streamlined the permission declarations, ensuring a smooth build process and optimal APK generation.

Device Compatibility

Achieving device compatibility required careful consideration of control configurations:

  • Design Framework Benefits: MauiKit proved to be a solid design framework, helping us ensure that UI components and layouts function correctly across different devices.
  • Testing Across Devices: We conducted thorough testing to verify that the chosen controls met compatibility requirements on all target platforms.

Permission Management

Using ABP.io’s authentication library and client proxy framework, we simplified permission management:

  • Modular Configuration: ABP.io’s module dependency features allowed us to configure settings such as localizations, services, and permissions easily.
  • Developer Efficiency: This streamlined approach made it more comfortable for MAUI developers to access and manage various objects via dependency injection.

XAML Forms

.NET MAUI offers a rich set of default controls alongside a community toolkit that supports enhanced functionality:

  • Controls and Toolkits: With around 32 default controls, plus community extensions, we efficiently handled device-specific capabilities such as camera, touch, tap, and location services.
  • Custom Components: We developed custom converters and ContentViews (similar to partial views or custom controls) and implemented observable patterns for messaging.
  • Data Binding: Leveraging two-way binding in the ViewModel (enhanced by RelayCommand implementations) enabled dynamic and responsive UI interactions.

Conclusion

Despite starting with no prior MAUI experience, our strategic integration of .NET MAUI, ABP.io, and MauiKit allowed us to deliver a robust and scalable food ordering app rapidly. Each aspect—from authentication and navigation to dependency injection, device compatibility, and XAML design—played a critical role in our success.

This case study highlights the importance of adaptability and leveraging modern frameworks to overcome initial challenges and deliver a high-quality product within a tight timeline.