Software Engineer, Software Architect @ Wedy | Development Lead @ Tri-Valley Youth Expo | AI for Education 2019 Initiative Committee Member @ AI Time Journal | Founder + Speaker @ CyberEd
Personally, I love Adobe XD. It's very powerful, has all the features you want, and has asset libraries for the main mobile platforms (iOS & Android). Another good option would be proto.io, which is just as powerful (maybe a bit less), but is a web application, so no download is required. While Adobe XD is basically 100% free, proto.io is not, and does require a subscription for some features (which are usually not necessary).
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.