It mostly depends on the app. In a lot of business cases, the most time efficient and least costly option is to go with a hybrid or cross-platform approach, example frameworks being React-Native, NativeScript, and Flutter. While these can achieve most of the native features you would like, the more libraries you add on, the more you tend to limit your access to native features (take Expo for React-Native as an example, it's a development and deployment tool, but it does limit some access to native development tools). Therefore, if your application and/or idea requires native mobile features heavily, taking the native approach, no matter how painstaking, will be the best approach. However, as I said before, one of the cross-platform or hybrid frameworks will most likely suit your case best.