The Headaches of Cross-Platform Mobile Development
snydeq writes "Increased emphasis on distinctive smartphone UIs means even more headaches for cross-platform mobile developers, writes Fatal Exception's Neil McAllister, especially as users continue to favor native over Web-based apps on mobile devices. 'Google and Microsoft are both placing renewed emphasis on their platforms' user experience. That means not just increased competition among smartphone and tablet platforms, but also new challenges for mobile application developers. ... The more the leading smartphone platform UIs differ from one another, the more effort is required to write apps that function comparably across all of them. Dialog boxes, screen transitions, and gestures that are appropriate for one platform might be all wrong for another. Coding the same app for three or four different sets of user interface guidelines adds yet another layer of cost and complexity to cross-platform app development."
I'd personally call them migraines.
If you're gonna do cross platform app development, at least make the effort to follow the platform's UI guidelines. As an Android user, nothing irks me more than having an app with the iOS icons and navigation buttons simply copied over. I'm sure the same is true for users of other platforms.
It isn't hard to learn another UI API. They're all fundamentally the same.
The one thing that irks me a bit about this whole situation is them complaining that they just can't write the code once and have it work across the different platforms, yet I'm still required to buy the same software separately on each platform. In my mind, you justify the cost to make it work for that platform by selling it on the specific platform. My opinion would probably be different though if I was able to buy the app once and not have to pay on each separate platform.
Keep it simple, Stupid
I'm developing an app which can be run cross-platform and/or mobile. Turned out to be a giant nightmare when looking at user experience on a tablet or smartphone. So .. I bailed on anything whizzy and went back to finding the basic html and javascript to get things done -- look and work consistently on multiple platforms and also be visible in sunlight (something a lot of apps fail miserably at.)
A feeling of having made the same mistake before: Deja Foobar
The splintering of the smartphone market seems to be almost identical to the splintering of the Unixes in times gone by. I wonder what it will take to "unite" them - perhaps the rise of another Microsoft? Perhaps some flavor (or flavors) of Linux will rise to the occasion. Or, perhaps right now there is a young Finnish college student writing a new OS even as I type...
In the meantime, cross-platform, easy-to-develop HTML5 app frameworks are showing astonishing growth. In the least week alone we've seen three new Javascript + HTML5 frameworks released. And while it take consumers some time for consumers to get wise to the AOL-like 'we are the only (mobile) web' branding that Apple has established - the marketing advantages of one app that works across all touch phone and tablets and is actually affordable is pretty undeniable today - especially as web-app technology continues to mature.
At Weever Apps (disclaimer, I'm the lead designer) that's the goal: disrupt the expensive, case by case, walled garden model and produce useful apps that actually meet the end-goals of most organizations. We started as a couple of not-for-profit oriented programmers that just couldn't stand how bad the current mobile/web/app situation was out there - our clients couldn't afford a proper mobile experience for their constituents, and that pissed us all off...
Today, we've grown. We've hooked into amazing, established open-source web technologies like Wordpress, Joomla! and Drupal, created an open API and new RSS spec (RSS3 for semantic/web relationships, find it on github) and basically proven that web innovation can outpace mega-companies - we know this, because we're doing it and winning over former native-app clients. And are *web* apps are still affordable, useful and *accessible* to the at least 3/4 of companies that haven't 'gone mobile' today because of a combination of cost, utility and just sheer confusion with all the per-platform options out there.
Check out "Why I make web apps" by our lead programmer Rob Porter:
http://webweaving.tumblr.com/post/15651092883/why-do-i-make-web-apps
Or just get a free app at http://weeverapps.com if you're interested. We're new and still adding lots of features - but I can confidently say that we're proving that there are better ways than the status quo to add value to the web and mobile - and we're not the only ones doing it. :)
This is most horrible! Interfaces are competing for usability and user experience and you target one platform at a time and pay attention to detail and nuance at that!
Check out LiveCode Runtime Revolution and you'll quickly dismiss this complaint, it has support for almost all desktops, tablets and mobile phone platforms. Write it once and it compiles for the platform in native code.
We use the hell out of it for the reason discussed above, not to mention that it allows you to build attractive cross platform products.
When the only tool you have is a hammer, every problem looks like a nail
...Google and Apple merge already and get it over with.
Shirley, we can just get together to agree on an abstracted standard api to sit on top of each platform or the compiler or ide or writing bindings for a few languages or something?
When we have the standard, the community will help write any code needed, mostly starting with the most popular urgently needed stuff.
Everyone wins. All the consumers get more apps. The businessés get work done for free and the developers can work more efficiently.
The beautiful open source world of computing is really enabling exiting new technologigal advances for all of humanity at an impressive rate!
Oh, wait...
Success requires effort. Nothing new here.
Coder's Stone: The programming language quick ref for iPad
I like Sencha Touch because it's a true "application" and has a full robust architecture. JQuery Mobile is not as robust, but it too is a good alternative. I've already written two mobile apps using Sencha Touch, and didn't have to pay these OUTRAGEOUS 30% fees to these greedy walled garden monopolies. Mobile Web Touch Application Javascript HTML5 frameworks are the way to go for applications that can feasibly be written using them. For games, you are SOL. For LOB apps, it's a no-brainer to use Sencha Touch.e
So platform diversity is great until you have to code for it? I'm not seeing a problem.
bah.
Numbnut UI designers get paid good money to put together some interfaces, and then complain that "it's too hard"?
Have some cheese with that whine. Or, even better, quit your job: start living an honest life and stop taking your bosses' money, you lazy boob.
Sounds like a lot of Generation Y whining.
I built a rather extensive commercial App on iOS. By abstracting the data/business layers well, when going to android it was as simple as writing a lexer to convert almost all the code. What took me 1000 hours of development took 8 hours to port over.
The only thing that was really required was writing the UI, which was targeted for Android.
Think "crossplatform-moblile-development" is the first to deal with competing businesses? Never developed actual HTML for the web then?
It's a pain in the but to write code for two different operating systems that have their own look and feel. Duh! And I suppose the guy who wrote TFA thinks he's a boy genius for figuring this one out. And what is this fucking Einstein going to hit us with tomorrow? Newsflash: The Sky Is Blue! Must be a slow news day. Oh, and send the boy genius back to journalism school till he figures out what 'news' is.
-- I ignore anonymous replies to my comments and postings.
I've been doing mobile development for 11 years starting with Palm and it's always been this way. Although there are some third parties who say they have development platforms that work across multiple devices, the truth is if you want a real native app that looks right for the mobile platform you have to code the UI from scratch for every platform. You can try to do something more generic like a generic web interface, but it just isn't going to have the pizzaz an avid user of the platform expects. This is simply the way it is.
All these people speaking different languages. I mean, like, the French have a different word for everything! It means I have to have hire somebody who speaks some stupid language if I want to sell my software to them. Why can't we just have one language--English, obviously, since that's what I know? It would make my life a whole lot easier and I wouldn't have to spend money translating my software and adjusting dialog boxes for those damn foreigners!
And don't even get me started on Unicode!
In case you're missing it, the above is sarcasm. But it leads into an interesting point. How many times have you heard someone complain about having to deal with someone on the other end of a support line for whom English is not their native language? About having to dive through some weird accent in order to understand what they're saying? It makes customers not want to call their support line, right?
Similar thing here. I want an application that speaks the language that the OS developers have defined and that I have learned by using countless other apps. While, ultimately, it's about what your app does, if I have to choose between an app that has a native interface and one that does not, I will choose the native interface. Just like if I have choice between speaking to Ken in Minnesota or Pruthvij in Delhi, I'd probably choose Ken (at least until I discover that Ken doesn't know his ass from his elbow).
Want a write-once run anywhere app? Make it a web app. I use plenty of those on my iPhone.
As an iOS developer, I heartily thank you for continuing to use cross platform development solutions that leave such a wide gap for someone to come along and write a better native app.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
We've been doing cross browser development for years. This is pretty much the same thing. Only without the ability to copy and paste things in the ui itself. I'm still waiting for these mobile platforms to catch up to where webtv was a year after microsoft purchased them.
This signature has Super Cow Powers
Adobe is trying to do this with Flashbuilder 4.5+. Write once, compile native for all platforms. They'll even take care of trying to make basic art assets (buttons, etc.) look appropriate. Does it work yet? Eh...sorta. But it's a good idea in the current mobile environment, and a potentially lucrative niche to be in.
Cross-platform desktop development is no picnic either. I once had to write a simple computer hardware check script - figure out what's in the machine, check against a list of programs, then spit out some XML. Came out to ~200 lines of Perl code for the Mac version, and ~150 lines of C for the Windows one. Not a single line of code was the same. Did I complain?
Well, yeah, I did complain, but more about how retarded Microsoft's APIs are than about having to rewrite stuff.
I'm also working on a video game in my free time. Currently runs on Windows and Linux, may add Mac to it soon. Had to do quite a bit of tweaking to make stuff work, even though I was using cross-platform libraries. Didn't really mind - making it run on Linux actually forced me to fix several potential problems (Arch's GCC seems to default to more warnings and errors than Cygwin's GCC).
Slashdot's designation - "from the hard-stuff-is-hard dept" - and some of the comments here suggest that it's trivial, whiny, or both to complain that writing good code for multiple mobile UIs is difficult. Perhaps that's so, but that's hardly the whole story.
Some programmers may see the UI as the necessary-but-uninspiring gloss over the more interesting, more important core functions of a program, and resent having to apply the gloss more than once. But even if a well-designed UI is an integral part of your vision, having to solve the same set of UI problems in multiple incompatible ways may not be as interesting as solving a conceptually fresh problem. Since UI libraries include some of the more fiddly and arbitrary portions of a platform's API, it's not surprising that programmers would dislike having to code more than one. It's not the difficulty that frustrates, but the multiplication of idiosyncratic difficulties which admit only of incompatible solutions.
This should have been: The Headaches of Cross-Platform Development. It's not just a mobile thing. Today, if you're developing any kind of client-facing software then it's not just Android vs. iOS vs. WinPhone vs. BlackBerry. It's also PC vs. Mac vs. Linux. with IE vs. Chrome vs. Firefox vs. Opera. And of course, all of these on different devices with difference capabilities, most notably different screen sizes and input methods, and deployment options. So much wasted time and effort.
We were on the right path with webapps for a while, but then suddenly native apps became all the rage. The worst "feature" by far of native apps is they have to be installed - the deployment issue is practically gone with webapps, but contained apps let you charge people for installation, so we went back to that.
I pray HTML5 manages to become a capable and dominant platform for the sake of both users and developers.
Seriously, how hard is it to just offer cross-platform APIs?
OpenGL ES is a shining example.
And those J2ME APIs for location, sound, input, etc. (Somebody should keep the API but make them native.
That’s the trick: Don't try to develop your application cross-platform. Abstract that into proper platform-independent APIs .
(That doesn't mean minimalism. It means feature detection, and offer the choice to not run the thing if the hardcare can't do it, or emulate the missing parts if it still can. Like: If it doesn't have a compass, you can't use it. But if it doesn't have EAX but the CPU/GPU is strong enough you could just emulate it.)
This seems to work pretty well across platforms. Fast native compilation to binary same as C++ (NO JIT) via LLVM on both Android and iOS. Full access to the native API's. A pretty nice generational partially copying gc. XNA and OpenGL across all platforms. Full source debugging and profiling on all devices and simulators.
Only problem is that full binary compilation breaks some standard libs that depend on using the JIT, some occasional bugs, and I'd personally prefer to see the device API wrapping fully open sourced along with the rest of the base platform. Overall not bad though.
If you work for a company that sells apps to non-small businesses (say 20 + employees/seats), you want to have a mobile feature so that the boss can keep an eye on things (sales, cash, purchasing, etc) from his phone. Only you gotta allow that there are lots of different phones and you can't tell all those people what kind of phone to buy. So you want to do them all, but your programmers are mostly old COBOL guys or such who are just discovering that there is anything beyond run-of-the-mill business app UIs.
1. Create cross-platform mobile gui development tools
2. Profit!
The heart of the issue is that our current software landscape on smart phones, tablets, PCs and pretty much everything is incredibly fragmented. Having to cater your programming to each platform is wasteful and while it might employ a lot of young people looking for programming work today is an unacceptable long term solution.
There are some things Apple does right and one of them is enforcing a uniform standard across their platforms. However, their method of locking down this standard is not acceptable.
We need the uniformity of the cathedral with the heart of the bazaar. In practice I think this means constantly creating OPEN STANDARDS (as opposed to Apple's closed standards) and refining standards not just for things like HTML but for interfaces of phones, software applications, operating systems. POSIX is a good example but was never taken into the modern age. You might say that there is a great resistance by companies about this and I would agree. It wont happen overnight be we need to start talking about it and talking about why our current situation is shitty instead telling someone that they're a noob for using an inefficient cross-platform solution (I'm looking at you 0xdeadbeef)
I work at a mobile technology company. While our focus is more on WAP and shortcode stuff, we do a number of applications for iPhone, android, windows mobile, and blackberry. You know why it's not a headache? Because everyone involved knows to treat each version for each OS as a whole new piece of software. You rewrite the UI from scratch according to what works best with the phone, recycle the web services, and charge the customer for each app on each platform.
No, you want a nightmare? Imagine you had to write one app that compiled and worked on an Android, iPhone, windows phone, and blackberry. Then you're dealing with the headaches of a web developer.
As a computer science student, I think this is good news. More platforms, more jobs.
It's been my experience that you have a lot more control if it's a phonegap wrapped native app, than a browser app.
My experience differs from yours.
In my experience, phonegap provides JavaScript extension based access to information local to the phone without any controls on its use by a third party, by subclassing UIView and then going to a web page. This includes but is not limited to location information, any history files you have, your contacts, and anything else available to a sandboxed application.
If the software isn't intentionally malicious in the first place, the app developers tend to suck off all your information into their database with no malice, but with about as much thought to security as you would expect from someone who was unable to limit themselves to uploading only the information relevant to the running of the application. That is to say, very little.
Given the lax security already apparent, the sites that show up in the UIView are typically changed by malicious third parties in order to trigger redirection to a site that does then pull the information off for malicious reasons. Whether that's because the originating site's phonegap App web page was attacked through one of any number of security holes which the app developer already proved themselves incompetent to protect against through their use of phonegap in the first place, or it's done via DNS cache poisoning, links in forums in the applications, or a dozen other ways isn't important. What's important is that everything that phonegap exposes to JavaScript is now exposed to the malicious third party.
I understand the reasoning behind phonegap. It unfortunately doesn't apply in an unsafe world.
I hope that people who would perhaps want to use phonegap understand the security implications, and the fact that if you're caught using it, you get kicked off the Apple App store for exposing those APIs to third parties whose URLs happen to get displayed in the UIView on your web site, for whatever reason.
-- Terry
Difference means evolution. Developer should understand that any sandard means halt for development. We need living market which means there are many different platfroms. We need standards too but not monopoly like MS. If we need a standard platfrom, it should be open because that allows some market economy. Now MS is using its closed Windows monopoly to kill competition from mobile too.
[...], especially as users continue to favor native over Web-based apps on mobile devices.
http://xkcd.com/285/
At the moment the best alternative is the write the application in OpenGL ES or HTML5. The choice depends on the type of application. Both will need a small wrapper on each platform. PhoneGap is a good choice if you go with HTML5.
I'm not sure how viable the OpenGL ES option is for Windows Phone, but then I personally loathe that platform anyway.
As for look and feel consistency, look at Angry Birds to see that that is not needed at all.
DNA is the ultimate spaghetti code.
cross-platform development is not hard.
the issue is when a developer focuses on one platform; utilizes special functionality and then says "oh.. i need to support that platform to". this is purely a design problem; not an industry problem. if you know, you need to support multiple platforms - one key word.. ABSTRACTION. separate platform code from business logic. that way; when you need to add a new platform, you have a small layer of abstraction to implement appropriately.. games are easier, as UI isn't an issue - but you can do the same with business applications (hint: standards, HTML5 et al).
i've been doing cross platform development for years, always laugh at comments on how difficult it is. if developers were not so trigger happy to get coding; they could simply design/architect their solutions better and there wouldn't be a problem at all. the great thing about my games/apps - i can add a new platform without modifying a single line of the application code itself. implement abstraction layer - select target.. compile.
dealing with complexities of distribution models on different platforms (ios, mac, windows, linux, webos, playbook, windows phone 7).. thats a PITA.
HTML5 is good for Desktop PC, Standard note PC or 10 inch Tablet Computer. It's enough free web browsing. But, I more small computer (7 inch table, also any phones) require integrated user interface. HTML5 is NOT good for smart-phone, 7-inch tablet. that need big resource and big resolution. Small computer need more tight consistency for user experience.
Only amateurs whine about the situation. A pro does the job, no matter the situation. That's why they are hired, because they are pros. If it were easy, ANYBODY could do it.
Sure, so do you prefer a Javascript, C#, Java or Objective-C cross-platform library?
I'm not particularly interested in native development, maybe I should be, but I've looked at a number of technologies, initially Flex with deploy via Air, then Phonegap and finally settling on Appcelerator.
Particularly for slower Android phones, Phonegap HTML5 apps really suck with many reviews having the classic "really like the app, but it was just too slow to be use-able". This is a killer and this issue will go away in the first world, but will never go away in the developing markets, just look at Aakash.
So at the moment, if you are careful with your component solution, Appcelerator offers (IMHO) the 'best' cross-platform native compile solution (it even has a webKit plugin so you can deliver HTML5 apps) for iOS/Android. Blackberry is in beta and I have no idea when WP7 will be supported.
One downside....you need to buy a Mac.
Seems that the biggest headache here is the cross-platform UI development that is what the user sees, even though the application is much more than just the UI. That can be solved by using some cross-platform UI-kit but creating the UI separately for each platform and keeping the base application same for each platform. Simple, really: http://www.codinghorror.com/blog/2007/02/non-native-ui-sucks.html
I've done a few ports from iOS to Android, and the problem most certainly has been that my customers did not use Android phones.
The navigation bar for one is a thing Android does not need. The tabs in the bottom, well let's just say it took some hacking to make it work.
Someone should make an overview of the platforms for business managers etc.
The ports would be easy if the ui was redesigned to fit Android better, but then again, it's just business as usual. As a startup we have a hard time complaining that much to our only customer.
For lesser headaches, they shouldn't reinvent new things, only COTS of existing public domain technologies.
JCPM
Web apps will never become the best platform as long as they are built on javascript.
What a piece of shit language. I have used it and I truly hate it.
I'm not the only programmer who feels this way either. Google is trying a few things to reduce or even eliminate programmer usage of JS. Have a look at their Dart language or their Native Client initiative.
If a web browser could be properly sandboxed (like native apps are right now) and the webview widget could run native code instead of JS in the sandbox, then I would love to make webapps (especially with WebGL being developed).
So.. We need a way to design one car that works everywhere and follows the guidelines of the country, state, region while still feels natural.
1) Since the car will be driven in both American and European areas, the steering wheel must work whether you drive on the left or the right side of the road, and automatically know whether to display miles or kilometers.
2) Not every road is the same size, so we need to compensate for when you go down long, narrow roads, or if the road is wide so you can see more, what I call, "land-scape".
3) Cars need to react quickly, so even when we reconfigure the break pedal placement for each country, there can't be a lot of overhead or extra framework in between the driver's action and the car's reaction.
4) Since we have a brand to uphold, the design must be recognizable as ours. By the same token, every area has a certain look and feel to be accepted so it must be designed with that in mind too.
5) Certain states (I'm looking at you California) have emission standards, while other areas could care less. So we should design to the lowest common standard, then charge for Internal Natural After-market Permission Parts, or "In-App", so that no matter where you go, the car can actually work.
Simple, right?
Ah look. It's the Apple Zealot who refuses to acknowledge that it is entirely possible to have good software that is cross platform.
Look, it's the Apple Hater who knows squat about mobile programming.
In fact I would say for enterprise development, where there's basically no competition and the bar for standards is low, that makes a lot of sense and you can have a good app.
However in the general market given a cross-platform tool and ANY native toolset (Android or iOS) I can always build an application that will be better than yours.
Warren Buffet often talks about successful companies having a "moat" of sorts, some kind of barrier that prevents competition from easily reaching the position you hold. When you create an application to compete in the general market, you have drained your moat. It does not mean you cannot have success, it's just that if anyone notices you have let an opening for someone to take that success away from you.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I was just trying to keep my original method sort and pithy and trap the Apple Haters into a response (success! Not you of course).
You are right though that for enterprise use cross-platform tools can work - although I think enterprise developers should be looking at what the internal target market is using and build to that - i.e. sales forces are in fact just using iPads pretty much and it really makes sense to build a better tailored application that takes full advantage of the iPad.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Game developers have the same problem and they seem to deal with it just fine. It does cost them, but then they reach more customers and sell more units. The same should be true in mobile: more platforms means more paying customers. The real problem, as I see it, is how to monetize all the platforms to justify the expense. From what I've read, the iOS platform makes developers money, and for the most part the other platforms don't. That's not to say there's no money there, but just nowhere near the dollars as the Apple AppStore generates.
Kony with LUA is a tool that does cross platform development while keeping the platforms UI.
Apple makes cross platform development easy. Their tools work for iPhone , iPod touch, and iPad ... What more do you want?
Not everything is about beauty
I don't care a whit about beauty. What I care about is USABILITY. That app (like so many other enterprise apps have worked with) was built by a bunch of people who didn't have to use the damn thing day to day. I didn't say anything about the widgets or color or anything. I just said it was not a very usable application and that could be improved.
I, like so many other enterprise developers, had to work with what people were trying to design but also listen to the complaints of the people on the front line really using the software. It's amazing how little THOSE two groups end up really talking, even when in theory there is someone in part of the development process representing their interests... but it's almost always a manager who again doesn't REALLY know where problems are or what would make things better.
You make me remember a Mac supremacist and how I embarrased him when he bragged about his new macbook G4 back then
You remind me of every wanker I ever worked with who didn't care about people who used the software we wrote. God I detested those people. Utter wastes of a chair.
BTW, If you brag about so heavily about your work
It's not bragging asshole. It's telling you what real life experience I have had with the issues at hand. I am passionate about this because in any context (mobile or not) the software industry COULD be doing a way better job designing software built to meet users needs but instead all to often is merely the bitch of business groups who have total say over how something comes out, and your video frankly brought out PTSD style flashbacks of some of the horrors that came out of that process.
You can defend it all you like but every single person on earth who has developed software for the enterprise more than a year knows I am correct.
You may have the last reply; I see no need to someone hell bent on pushing people into using unusable software even when better could be had.
As for examples that prove my case, simply look at any large data visualization or data entry app like Salesforce Viewer on the iPad... SInce all of my work is pretty much client work (I am an iOS consultant) I cannot point to it directly, either because it's not public or it's not polite to build and tell.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
This sounds like a rehash of the 'fragmentation` issue. There are only so many ways you can configure the look and feel of the platform itself. Besides the real money is not in the handsets but in the apps and online services.
.. .Net-managed code, it may even be possible to run the exact same apps on any Microsoft-powered device".
..
"Because Metro-style apps are written using
As I suspected this is a disguised advert for the Microsoft mobile platform.
"yet another way in which the mobile development market is becoming increasingly fragmented"
Yep, without even reading this far I could even see 'fragmented` coming
Check out Application Craft + Phonegap, may help some you guys - http://phonegap.com/case_study/phonegap-application-craft-pain-free-mobile-app-development/