If you combine j2objc and GWT together, you can share code between Web, native Android, and native iOS, while writing the UI in JS, Objective-C with InterfaceBuilder/Xcode, or native Android Views.
If you want to share non-UI code across all three platforms you have these kinds of choices:
* js everywhere (WebView wrapper or embedded JS interpreter on iOS) * C everywhere (emscripten/NaCl on WEB) * Java everywhere (GWT->js for Web, j2objc for iOS)
I can only speak from experience, but option three worked fantastically.
I agree that it's a noble goal, but I'm curious about places where that sort of logic is actually common enough to justify the overhead of maintaining a cross-platform library.
Most of the applications on my phone are ultimately native UI skins over web services. There might be some logic in there to handle other features, but in most cases it's tied into OS-native features anyway.
I can see cross-platform libraries being useful for games using GL, maybe for media applications that require formats not supported by the OS, and for applications that do heavy image or audio processing – in short, the sort of thing where the value-add is specifically high-performance processing. Maybe that's enough to justify the existence of these tools, though I'd imagine it's almost always a better option to write your library in C in the first place.
Looking though a random sample of non-game apps on my iPad, I'd guess that about half would have a significant chunk of code which is not OS-specific, including: Gmail, Spotify, Anki, Google Maps, Facebook, Twitter, Penultimate.
I also don't think that the choice between C and Java as the common language is so clear cut. C would get you some speed benefit but Java has GWT for porting Java to Javascript, and and a huge range of other tools and libraries. In the end I think it would come down to how comfortable your development team was in each language.
(Disclaimer: I'm a Java developer)
You can compile C to JavaScript with emscripten[0].
See https://groups.google.com/forum/#!topic/j2objc-discuss/5lMZN...
The UI in JS is simple to develop, but you have a lack of performance also
Yeah you just need to know C, possibly C++, and smalltalk and be comfortable using the syntaxes for all three simultaneously. For the record though I'm a big fan of C and C++, and I don't really care for Java. I can just see why people who already know Java well would want to use Obj-C as little as possible.
* Message passing between objects. * A nil object that can accept messages without failing. * Duck typing. * A really shitty call syntax.
What more needs to be known?
Just for one reason, there are many iOS developers in the world, and at the same time C++ and C developers are few today.
In a web/js/Ruby/mobile echochamber that may be true. But in the real world C/C++ is very far from being a minority skillset. Take a look at [1][2][3]. C, C++, and Java are the main languages in use today.
[1] http://www.tiobe.com/index.php/content/paperinfo/tpci/index....
[3] http://lifehacker.com/the-top-programming-languages-ranked-b...
[1] http://redmonk.com/dberkholz/2014/05/02/github-language-tren...
[2]http://sogrady-media.redmonk.com/sogrady/files/2014/02/repos...
Looking at public repos for stats is like counting the number of tables on planet earth by looking at satellite photos. You never see inside the buildings, just whats outside in parks etc.
It powers your OS, your VM instance running your flashy new CRUD app, your network protocols, your game engines, your browser, the interpreter or compiler you use to run your high level languages, and much, much more.
Programs such as these need high performance, low level access to hardware, or the ability to manage resources in a custom way. Languages like C, and C++ are very well suited for this. Sure, I wouldn't write a web-app in C++, but then again, I wouldn't write a javascript jit-compiler in javascript (okay maybe in asm.js for kicks).
Personally, when I see the growth of higher-level languages like these, I don't attribute it to the fall of low-level languages, but instead to the availability of new languages good for certain tasks.
In 2014, we have the luxury of being able to write applications at higher levels of abstraction, and this is a good thing. But tools like C, and C++ are still, and will be widely used by anybody who needs to develop something with requirements such as those I have mentioned. Layers of abstraction need to be built on top of something, and that something needs to work efficiently and quickly.
It could be useful if you need to execute Java code in Objective-c runtime, but not if you want develop iPhone/iPad app.
Obj-C is simple, the problems are the iOS frameworks that you need to learn to delivery an iOS App. If you are Java skilled, anyway you need to learn these frameworks, and you will spend your time to traslate the examples(stackoverflow) from obj-c to java
I'm not a xcode fans, but it is a great tool when you use the StoryBoard and all features to test, performance, memory .. etc.
Another point is that with the introduction of the Swift language this traslator loses other value