Xamarin is a C# cross platform framework for creating mobile apps. Xamarin does not implement a GUI layer meaning a native implementation is required for every targetted platform. The packages used to interact with the native GUIs are platform specific meaning that all cross platform code needs to be stored in a separate project and imported into platform specific projects. This makes the use of a pattern like MVC or MVVM a must. Personally I feel Xamarin creates more work that it alleviates.