At my last job we did the C++ cross platform layer, and it was very painful. C++ is slow to compile and can create bloated binaries. There can be something said for the freedom of having separate platform teams with just a server api.
And we're doing the separate platform teams thing, and have to find, train, pay twice the number of developers that would be needed for a cross-platform solution. There is by no means a clear answer on which way is better...
We looked at doing cross-platform, but we would have to retrain a lot of iOS-only or Java-only developers so no luck.
I wouldn't say 'double' the engineers. In my last company's case, you still need to write the iOS and Android "UI" part, and waiting for the C++ engineers to finally make this relatively simple thing could take longer than it should. Sometimes it was just faster for the two UI engineers to implement it in the UI than it was for the two C++ engineers to make it themselves.
Then the UI engineers often had to create wrappers for the C++ objects (in the iOS Objective-C++ case at least), because ObjC objects only take NSString, while the C++ types only give C++ strings and other such glue things.
Then lazy engineers / deadlines would move business logic into the UI layer wrappers, because development speed wise it was much easier to work with there than to put inside the C++ layer.
Cross platform makes it's own work. But this was with a 'homegrown' C++ solution, so maybe something made by a third party like xamarin might be a very different experience.
I play with Android and Windows Phone in my free time, but I also have experience with cross platform development.
One additional issue is that an abstraction layer also adds up in development time. Someone needs to write the platform specific glue, create abstractions that work across all platforms lifecycles, debug if errors happen in the middleware or device firmware...
So it is not always a clear win to not have focused device teams.
Each OS is very complex and no developer can know all of it.
"Twice" seems exaggerated; cross-platform applications come with their own set of challenges (often about device-specific issues), and you'll still need expertise on all your supported platforms. Saying developing for X native platforms is X times as hard/expensive is naive.
RoboVM has been working pretty hard recently to cut the compile times down. I haven't used it in a year, but I read a blog post where Nick said he cut the compile times down by a ton. Plus he added incremental compiling recently as well, which should resolve your issue. :D
This was from me playing with it a week ago in the new robovm studio. It's still 30s with no code changes after you have built once, most of it being the robovm build part.
Long compile times and bloated binaries do come with the platform for C++, but (with experience) you get pretty good at minimizing both of those with little effort. This also tends to lead to a fairly clean dialect of C++ (closer to C), and has higher performance code as well. It basically boils down to not really using templates.
That means no stl or boost, but (and this is not a popular opinion at all) this tends to lead to cleaner code, and more productive programmers.
My experience is that templates do allow for more code reuse than you can typically get in other languages, however they do so at a high complexity and maintenance cost -- not to mention binary bloat and long compile times.
I've learned long ago that you can't rely on 'good engineers' to keep up good practices over a large amount of people. Eventually the bad practices happen unless it's set as policy by the heads of the C++ platform, and enforced by scripts and management. It comes down to an education thing, since most C++ devs you hire will use boost & STL.
And de-templating, removing stl & boost from 300k+ line projects and debugging it all is something most orgs wont swallow.
I was tempted with robovm, but found the 30s minimum build & run cycle for trivial code changes too slow for me.
And the performance is pretty good for these guys, they're all as fast as objective-c:
https://medium.com/@harrycheung/mobile-app-performance-redux...
At my last job we did the C++ cross platform layer, and it was very painful. C++ is slow to compile and can create bloated binaries. There can be something said for the freedom of having separate platform teams with just a server api.