Support for tvOS?

Hi Lob,

Thanks for reaching out.

Sure, I’m very happy to share the code. However, I’m guessing the Juce developers are just too busy to reach out.

I tend to update Juce only very rarely, as historically there are a lot of things that need fixing, and they can be quite onerous to work through. So, for example, we stuck on Juce 5.3.0 for a very long time; and I only made the move to Juce 6 a week or so ago. It has taken me that week or so to work through most of the issues.

The general things I’ve had to patch in Juce 6 are:

  • iPad split-screen / multi-tasking support; this is the one which was most fiddly to fix. I’ve already reached-out to the Juce devs offering them my code for this (iOS Multitasking - #7 by peteatjuce)
  • tvOS support - this wasn’t actually that hard to do, and probably only took me 2-3 hours or so to do yesterday. Mainly, it was about stripping-out low-level MIDI support, tweaking related to orientation handling etc… The trickiest thing was to work-out exactly how to use createNewPeer in Wotja, in combination with a hosting custom UIView… the docs weren’t great in this area! But, I got lucky and the Juce side of the UI “just worked”, which was a great feeling! Our next update will feature a completely new animation mode for Wotja tvOS, which I think looks really nice. Thanks to the Juce team for making this possible to do!
  • changes to allow adding “X” buttons to the TabBarButton buttons for desktop (surprisingly fiddly - you can look at the free Wotja for macOS/Windows to see these)
  • default font detection in macOS, which doesn’t work properly
  • some fixes to focus handling, to allow the apps to work properly on Android TV
  • I’d had to make extensive changes to 5.3.0 for viewport scrolling to work properly in list views, but I’m happy to report that is fixed in Juce 6 :slight_smile:
  • PopUp button alignment, to make sure that pop-up menus appear on screen, especially on small Android devices - quite fiddly to fix
  • some small tweaks for WatchKit extension support
  • some fairly extensive changes to get soft keyboard appear/disappear logic working properly on both iOS and Android, and to be able to pop-up a native editor activity on iOS and/or Android when required

Other things I’ve had to work hard on outside of the Juce layer are:

  • native menu handling for iOS (phone / pad), as the Juce menus are nowhere near as nice as the native ones)
  • native alert handling for iOS and macOS (as above - but this is relatively easy)
  • creation of a cross-platform navigation framework that looks quite similar to the UINavigationController stuff in iOS. If you were to download the free version of Wotja, you could see how this looks. This has been a very significant amount of work over the past few years; without it, it wouldn’t have been feasible for us to use Juce as the cross-platform layer for Wotja (before this, the Wotja UI was native Swift / Objective-C for both iOS and macOS). I chose Juce over Qt because Juce has hugely better support for Indie developers, and of course a far superior audio interfacing layer.
  • our own Android audio device adaptor, as we had a lot of problems historically with the Juce implementation wrt breaking-up etc. I don’t actually know how well the one in Juce 6 works, and will certainly investigate Oboe at some point.

Don’t get me wrong - Juce is fabulous, and has allowed us to no longer rely on our own cross-platform rendering layer. But to allow our range of apps (iOS, Android, macOS, Windows, tvOS) to work well on all platforms, has required very significant work over the years. Anyhow, we’re able to build on all that work now, and focus much more on App features rather than the lower-level stuff.

With best wishes,

Pete

1 Like