Xamarin is heavily advertised as a tool to make development fast and inexpensive. Those are for sure catchphrases that make companies consider using it for development. Sadly, there are always downsides. There are a lot of potential problems, that will reduce our potential gains.
Let's focus exclusively on things that will have an impact on how useful Xamarin can be.
The best value gained from using Xamarin is when most of our code is shared.
If our application has a custom, advanced design, we are bound to make an extra code for Android and iOS separately - this decreases speed and increases the time of development - especially, when our user interface needs to be "pixel perfect".
Sometimes we cannot even make complicated UI, because many native libraries are not accessible, and porting them to Xamarin takes time and can easily generate problems.
Additionally, if a library needs a lot of time to convert into usable Xamarin component - it will need some amount of time whenever we want to update it.
A big thing about mobile development with Xamarin was - one code, three platforms. But as Windows Phone is not relevant anymore, one third of development is not needed anyway, so there is much less gain from using cross-platform framework.
Xamarin support for Windows Phone is deprecated.
This announcement did not hurt Xamarin developers as applications written with it are native-like. But two weeks later there was a huge rumor, that Xamarin applications will be banned from App Store as of 2019.
Rumor turned out to be fake. Apple's policy is very firm, though - not everyone believed it, but no one thought it cannot happen.
Developing native applications has amazing support. In smaller communities, it is much more likely to have a problem that no one else had before. It can take time to search for an answer, wait for it on a forum, or possibly create workarounds (not a good idea, if our application is meant to last long).
Xamarin runs on .NET Framework. Mobile devices do not have it out of the box. Instead, it is downloaded with an app. Without proper optimization (that has its own limits), Xamarin application can even weigh multiple times the size of a native app. User browsing store could potentially cancel the download of 30 MB app, to simply download the next one on the list with a size of 5 MB.
Xamarin designer tools are problematic - creating user interface is hard when what you see in a designer window will differ from reality (or sometimes it does not render at all).
Native tools are much better for this task, but they are tedious to use or configure. We are better writing everything by hand - which increases the time spent on development.
Visual Studio for Mac differs from Windows version very much. It is not a mature IDE yet and it lacks basic extensions like ReSharper - a must-have productivity plugin, speeding up the development.
Plugin authors - JetBrains - made their own paid IDE (Rider) with ReSharper embedded. Yet, Rider does not have any designer tools for Mac. Xamarin developers just cannot have everything, and productivity has to suffer for that.
It's tempting to use Xamarin because of many catchphrases. It promises fast development, reduced cost and the ability to write once - but run on many platforms.
This can be true - just hardly ever goes so well.