Pretty well. Performance isn’t an issue anymore, although it’s still faster on iOS. My biggest issue with it is the lack of fine-grained control over input elements. Safari is the culprit here. For example, you can’t really make an input element that allows entering a time in this format "23:30" AND only show a specific keyboard with decimals and the colon.
Textarea elements are also sometimes behaving weird when selecting text, just like your regular iOS Safari.
And of course, all input elements and animations don’t respect your OS accessibility settings. Neglectable in some apps, not in others.
I probably wouldn’t write a diary app or an app for writers in Ionic, but for most other things it’s good enough.
Keep in mind that all development comes with trade offs. Native iOS development gives you maximal control over the platform, but your code isn’t really re-usable. As a solo developer, having a single code base is gold and customers don’t really care.
As a solo developer, I tried maintaining two native code bases for an app. It was first iOS native only. The Android version came later, and never reached feature parity. It was just too much work.
If you were to start over, would you still choose Ionic and Cordova, or go with something else like Xamarin or React Native?
I'd still use Ionic + Cordova. Or to be a bit more specific: The Ionic team released Stencil a few months ago, which is a compiler for Web Components. They also released Capacitor, which is a replacement for Cordova.
I'm considering switching to these, because it gives me a bit more control over all of the code (and I'm not really a fan of Angular). But I'd use JS for apps again whenever I can. It's just so much more convenient and especially since I can release a PWA or web version without much effort.
You weren't asking me, but if you don't have loads of content to display onscreen and your design is relatively straightforward, it might be best to go with React Native, since it gives you proper native controls.
You make a ton of concessions (imo) by locking yourself in a webview.