SuperConnector

Posted by Codepope's Development Hell on Sunday, March 26, 2023
Last Modified on Saturday, August 31, 2024

The SuperConnect Disconnect

I have this Revo SuperConnect radio and it’s a lovely beast, all wood exterior and really feels like some quality sound from ye olde worlde DAB. It does Internet and Bluetooth but I never touch those. That Internet support does mean it lives on Wi-Fi and there’s a two physical remote controls (a tiny fiddly one and an enormous chunky one with still manages to be fiddly). And then there’s the un-intuitively named Undok, which can control the SuperConnect. But it’s also fiddly and built for multiple radios and it’s no good for just quickly tweaking the channel or flipping the radio off when the Archer’s theme comes on.

The SuperConnector Solution

So, as part of my “Learn Swift by Doing Things” thing, I set about writing an app which would do the bare minimum to control it. It’s called SuperConnector. It’s built using SwiftUI which is both brilliant and mindbendingly odd at the same time. The UI has a big on/off button with a Sanfran Symbol as the icon, a simple volume slider and buttons for at least the first few channel presets. Say hello to the chunky minimalism….

SuperConnector Screenshot

And it worked.

The Multicast Mumble

Well it worked until DHCP decided it was time to change the IP address of the radio and then the hardcoded address didn’t work. How did Undok discover the radio? Through a thing called SSDP. I was lucky to find a library implementing SSDP for Swift, which was very lucky as SSDP is clunky and old and horrid. And I brought the app back up on MacOS and it worked. Radio found, radio controlled.

So I built SuperConnector for the phone and loaded it up and… it didn’t work. Dammit. What was wrong? Why did it work on the desktop? Turns out that Apple require you to get permissions to go multi-casting out to a local network and show that you need that permission. So off to mailing a developer page to request the permission, wait a week to get acknowledged and enabled, update the App profile on Apple’s developer site so it knew that the app should get that permission and modify the app itself to enable the permission and rebuild, reinstall, repeat until you figure out the permission and build system, and…

What next?

And it works again, though I’m guessing other folks won’t be able to build the app to full functionality. If there is anyone interested, I could set up a Testflight for you to try out. Ping me if you are. Niches are a hard corner to be in at times…