Cuál es la mejor forma de desarrollar apps para iOS y Android?

Xamarin es una opción bastante buena. Está compilado en AOT en iOS y se ejecuta en el tiempo de ejecución Mono en Android, por lo que no debería ser notablemente más lento, y utiliza APIs nativas, por lo que no debería haber ningún problema de apariencia; Los únicos problemas tendrían que ver con las bibliotecas de terceros y con conseguir el apoyo de otros programadores. No recomendaría otros frameworks, aunque no tengo ninguna experiencia con ellos; tienden a compartir la misma UI en cada plataforma, lo que lleva a una mala UX porque cada una de las plataformas tiene una experiencia única. Podrías mirar React Native, que aparentemente utiliza widgets nativos, pero creo que es mucho más limitado que Xamarin y javascript no es lo mejor para el rendimiento, que es muy importante en el móvil.

Ahora, vale la pena señalar que todavía tendrás que crear UIs separadas para cada plataforma, a menos que utilices algo como Xamarin.Forms (que causaría el problema de la "misma UI"), por lo que el principal beneficio es que puedes compartir la sección under-the-hood de la aplicación, como la lógica de negocio y el acceso a la API. Como tal, Xamarin es más útil cuando estás haciendo algo complejo, o al menos verboso, en esa sección. Xamarin sería una obviedad si la aplicación estuviera controlando cohetes, donde hay una gran cantidad de comunicación bidireccional compleja a través de la red que debe ocurrir lo más rápidamente posible, pero sería algo inútil si la aplicación fuera una forma elegante de ver tu catálogo de fotos, donde esencialmente no se podría compartir nada.