Have the Windows version check for updates in background — on every startup and every hour after that (don't save any timestamps, just set an hourly timer on startup).
When an update is available, download and install it in the background without further confirmations or notifications.
Show a ‘restart to update to vX.Y.Z’ banner in the title bar that includes the new version number (do not consult with me on the formatting, I will adjust it to my taste later); show version number as X.Y.Z or X.Y.Z.U depending on whether U is zero.
Clicking the banner restarts the app without further confirmations.
Make sure the new version is picked up upon restart.
Provide a debug option (in the service menu; on/off toggle) to override update checking to run every minute instead (for debugging).
Provide a debug option (in the service menu; on/off toggle) to simulate a failed update on the next check; do it by overriding update URL to a one that points to a release that's always newer (like v99.0.0), but is missing some of the files.
Make sure that failed updates are handled properly (i.e. completely ignored without additional messages).