A smarter than Adobes approach to iPhone development

Six months ago I started following Adobe ‘s advancements in the creation of a cross-platform solutions for smart mobile devices. In general, it ‘s nice that finally Adobe realized that it ‘s time to do something about the close to zero penetration of Flash Player in mobile space (I ‘m talking about the real thing, not Flash Lite). When you think about the lack of Flash on smart mobile devices, all of a sudden the statistics that claims 99% penetration of Flash Player on desktops becomes irrelevant. Especially given the fact that search-engine optimization for Flash-based Internet applications is nothing more than an urban myth. If Amazon would redesign their Web site in Flash, they ‘d be out of business pretty soon – people wouldn ‘t be find them on Google (Ichabod, the headless Flash Player proved once again that headless and brainless are synonyms).

The news about automatic code generation from CS5 to iPhone as well as other droid-shmoid gadgets sounded exciting. But there was one thing that bothered me a little: Adobe was offering a cross-platform solution. Been there. Didn ‘t work for Sun Microsystems that presented Java as “write once run anywhere ” fifteen years ago. But hey, maybe this time it ‘s going to work? Maybe Adobe will implement RIA with Flash smarter than Sun did with Java Swing? Adobe ‘s CEO ‘s mantra is “author once and get it across multiple devices “, which is to me the same as write once, run anywhere.

Steve Jobs doesn ‘t let Flash Player on iPhone? No biggies. Smart folks at Adobe came up with a workaround to let ActionScript developers write programs AS USUAL, and then with a click of a button turn it into a native iPhone application that can be offered via Apple ‘s App Store. How this would be happening? A special tool would be extracting the ActionScript bytecode (ABC) from the compiled SWF file that would be then fed to LLVM compiler that would turn it into another compiled code for the iPhone ‘s ARM processor.

Read about details of this solution here, and note the following statement, “If you have any experience developing applications with Adobe Flash Lite or other mobile platforms, you can use many of the same tricks and techniques… “. But what if you don ‘t have such experience like the vast majority of today ‘s ActionScript programmers? Then you ‘ll be developing a Flash application AS USUAL, but now it also can run on iPhone.

I like Apple products, I respect Steve Jobs a lot – both as an amazing businessman and a very strong personality (don ‘t forget that recently he healed on the verge of death and went through a liver transplant surgery). But a lot of his recent statements sounded crazy to me. You can ‘t deploy a program on iPhone if it ‘s not written in C, C++, Objective-C, or JavaScript. How crazy it is? One person on the Net compared it with not accepting an MP3 file to iTunes store, if it was not created in GarageBand application. This sounded as a valid analogy, and being Adobe ‘s fanboy I wrote a couple of blogs making fun of Steve. The problem is that I ‘m also an Apple fanboy. I use MacBook Pro, iPhone, and iPad daily. I can appreciate the quality of these devices and extremely friendly and intuitive user interface. iPhone OS is probably the first operational system that any trucker from Alabama can figure out without going through any special training.

When I spent more time thinking about crazy Steve, some of his unreasonable requirements become reasonable. No, I don ‘t buy most of his accusations in the recent WSJ article on Flash. The very fact that he wrote this article tells me that he ‘s feeling pressure from AAPL stakeholders, and it only get worse next year when Android based devices will started competing with iPhone. Hopefully, Adobe will deliver an Android solution that will be well performing and feel native (no cross-platform, please). But I can hear that besides having business reasons to not letting Flash on iPhone, he does want to guarantee a ultimate user experience on his devices.

Is it even possible to generate code from ActionScript that will feel native on iPhone? Three months ago I learned about a product called Elipse Studio 3 by OpenPlug. These guys are also working on a cross-platform solution, but their approach is different, and IMO, better than Adobe ‘s CS5 code generators. The difference is that Elipse Studio 3 generates the C++ source code from a Flex application as opposed to extracting the code from SWF to be recompiled by LLVM as CS5 does. When the C++ code is generated, developers can MANUALLY change it and use the real native API offered by Apple to create components that not are native, not just feel like ones.

The OpenPlug folks don ‘t believe that infamous 3.3.1 amendment to the iPhone constitution will affect them as their applications will have C++ code at some point, and Flex developers will have a chance to use native API to create iPhone experience. But I don ‘t think that they sleep well at night – there ‘s no protection from Act of Steve.

I didn ‘t use Eipse Studio 3 and can ‘t endorse it yet, but it seems that they outsmarted Adobe at least in their approach. My only question to OpenPlug folks is this, “If you let me manually edit C++ code and use native API, you assume that I know C++, and if this is the case, why do I need to write code in Flex/ActionScript in the first place? ” Expected answer, “Developing in Flex is a lot more productive than in C++, and you don ‘t have to really know C++ that well, you just have to learn how to insert and manipulate objects from iPhone libraries “. And then I ‘d go, “If people don ‘t want to learn C++ well, they won ‘t be able to create the real iPhone user experience and Mr. Jobs will be angry again “. Maybe not. Nobody knows.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s