Via .NET, which has been cross platform since 2016 or so (before that Mono was the preferred framework).
For the UI bit, I'd recommend Avalonia UI (which is what Ryujinx uses as well). It's cross platform, has been out forever (2013 - from their FAQ page) and even runs on embedded devices.
Rider (by JetBrains) has excellent Avalonia support via a plugin and is much better for other .NET stuff over Visual Studio for Mac.
Relevant aside: while the Ryujinx Avalonia UI has more features and is generally nicer, due to a small number of outstanding issues, Ryujinx uses an older GTK+ UI in its default builds.
Avalonia builds are, however, readily available with each release, and auto-update just like standard GTK+ builds.
For the UI bit, I'd recommend Avalonia UI (which is what Ryujinx uses as well). It's cross platform, has been out forever (2013 - from their FAQ page) and even runs on embedded devices.
Rider (by JetBrains) has excellent Avalonia support via a plugin and is much better for other .NET stuff over Visual Studio for Mac.