No hay una mejor solución. Todos tienen pros y contras.
- Xamarin: escriba la lógica principal una vez, pero escriba la IU personalizada para cada plataforma. C #, que es bueno debido a las herramientas y la seguridad de los tipos, pero es molestamente detallado.
- Marco iónico: cree su lógica e interfaz de usuario una vez para múltiples plataformas. Cambiará el estilo entre iOS y Android para que coincida con los estándares de la plataforma. Lo malo es que si no tienes cuidado, puedes matar el rendimiento. Utiliza JavaScript, por lo que es fácil comenzar; es mejor usar TypeScript para la seguridad de tipos y herramientas.
- NativeScript: cree su lógica e interfaz de usuario una vez para múltiples plataformas. Buen rendimiento. Use JavaScript para llamar a las API de la plataforma. Utiliza Angular 2, para bien o para mal. Los mismos comentarios sobre JavaScript.
- React Native: crea tu lógica una vez para múltiples plataformas. Crea una interfaz de usuario personalizada para cada plataforma. Buen rendimiento. Utiliza React, para bien o para mal. Los mismos comentarios sobre JavaScript.