Can anyone speak to how useful Juce is for developing a cross-platform core for a mobile app, currently iOS/Android but potentially other platforms in the future (desktops not likely, but maybe). Along the lines of http://www.infoq.com/news/2014/05/dropbox-cpp-crossplatform-mobile
One thing that concerns me is this aspect mentioned in that article:
One hard decision when designing a C++ cross-platform layer is when to reimplement from scratch some functionality that either OS offers natively, and when to write a wrapper around it. You cannot reimplement the whole platform in C++, says Poletto. So, basic functionality like network access or SSL certificate validation is simply called back into the platform from the C++ layer. Ole Begemann offers a few more examples where reimplementing from scratch is simply not an option, e.g., background downloads through NSURLSession, app backgrounding behaviour, and iCloud access.
I see that Juce's networking currently goes down to the sockets level and I'd have to write my own high level wrappers for NSURLSession and whatever the equivalent is on Android. Because of issues like this where Juce isn't appropriate right out of the box, and seeing that I'd be avoid its UI abstractions annyway, would it be better to just roll my own solution? Would instead there be a huge win anyway in using Juce's Core classes and, what, its setup for cross-platform builds maybe?
I've been working on an iOS/Android cross platfrom project (also as a VST soon).
What I've learned from this is that, for the smoothest and least painful UI experience, its best to build the main UI structure e.g. navigation, scrollable lists etc using the platform native tools. Sounds like you may be doing this anyway.
If you're working with audio, JUCE is a great choice. If you're doing some custom graphics / animation, JUCE is also a great choice. I can't speak about networking and sockets. It might just be a matter of trial and error to decide where to implement things on the native platform or with JUCE/C++.
I also had a look at the Dropbox project last year with great interest. I think JUCE can be used in a similar way - e.g. on iOS NSDictionary objects can be sent as JSON to a JUCE class that parses it into a ValueTree object. Its an area I am actively working on at the moment.
In general, it is run the Introjucer, pick a target, and go.
In practice, it depends on the app. I've done a number of utilities which only had minor tweaking between mobile platforms. Though with most, more polished, applications, I end up adding xxx_Native.cpp (or .m, etc.) for each platform.
I think you are a bit mistaken. Yes, there is are Socket classes in JUCE, but web browsing, etc. is generally abstraction wrappers. Jules would be best source of insight on the underlying thinking, but it certainly has always seemed to me that Juce is:
A CPP abstraction layer for common services + Really useful classes and functions that the supported OS's left out
That what we did with "8th"
We use JUCE for the GUI and some other capabilities, but built the rest of our functionality independently. We now have a quite capable cross-platform development tool.