iPhone 2.0 firmware – the good, the bad and the WTF?!
Following on from my iPhone repair joy, I upgraded the rental iPhone I have to 2.0 as soon as it came out. I installed apps etc.
All seems pretty good, feels like the dawn of a new era – although something in me dislikes all these extra cluttering apps I now have, instead of just the basics. The coherent design feel is lost with differing icon design approaches etc.
Anyway, for my sins I used to be a Java mobile games developer (J2ME). As a result I have quite a lot of experience with mobile development APIs and approaches. With this in mind, I have some iPhone 2.0 / SDK observations:
- App Store is genius. App developers on mobile have never had it so good. This is sweet, trivial to use, works great OTA installation in a way that no Java phone I’ve seen ever could (i.e. proper install progress, keep on using the phone during dowload/install etc). No "where the f**k is my app" syndrome. However what’s with the long delays when Installing… is at 100%, even for trivial apps? The CPU slow at unzips / dmg extraction?!
- Quite a lot of apps crash – much more than iPhone 1.x where safari and maps did occasionally crash for me,
- Shock horror, running an app occasionally causes instant phone reboot! WTF?! I worked with a LOT of really bad Java mobile phones (aaahhhh anybody fancy a Sharp GX10 or an O2 X1?), and even then I never saw a phone spontaneously reboot when running an app. Having viewed some of the SDK videos, I think I have a clue – it could be memory leakage somewhere as… and this is also quite horrifying … iPhone OS X will spontaneously reboot if it runs out of RAM! "What?!" I hear you say. Yes, its true. I can see that without true garbage collection and a VM to run the apps in, memory leakage is a very real problem and the only solution may be to reboot rather than lock up. However I would have thought with unix under the shell it would be possible to kill just the application process and free its resources, not "shutdown -r now" !
- The push stuff is good BUT… why the hell no preview popup message for pushed mail, like the SMS popup? Come to think of it, why can’t you see more SMS/push mail previews than 1 at a time when the phone is locked? Why aren’t we seeing the photo of the sender next to the message?
- The push stuff uses sockets. This makes sense for iPod Touch and when you have wifi, but it drains the batteries bad. For iPhone they should really be using custom SMS data ports like J2ME’s Push Registry API. The phone is already waiting for SMS packets all the time so this would mean ZERO extra battery usage, instead of keeping this stupid data socket open all the time. A custom data SMS comes in from Apple’s data center, and bingo, it fires up the correct application / does the badge thing etc. Keeping this keepalive connection going is insane on iPhone.
- The push stuff, as discussed at WWDC but not documented yet, is unable to launch your application as far as I can tell. This is bad. You need to be able to automatically invoke the target application (with user consent) to provide a nice user experience
- Again, unlike in J2ME, there is apparently no way to set a timer on iPhone from your custom application, such that the iphone will start your application again – this precludes a whole range of apps and is particularly painful in light of the inability to run background applications (which is understandable as this raises the spectre of high cpu load and multitasking task manager stuff as well as the battery drain)
- Apple should have stolen the sweet idea from Palm OS where your app is automatically "frozen in time" when deactivated. There was no multitasking on Palm OS when I wrote stuff on it, it just seemed like it because all apps ran directly from Flash RAM and when switching to another it just move the execution pointer to another part of RAM. Simple but very effective. Not quite so workable on this basis with unix underlying, but I would have thought "hibernating" apps would give a better impression of multitasking without actually running multiple apps at once, without the developer having to detect application de-activation, preserving state etc. At least offer some kind of declarative "serialize this" indication on objects/state data that allows the app to restart with prevous data with no developer effort.
Anyway, that’s it for now. I imagine they may add some event hook mechanisms to further simulate background applications in future, with strict design guidelines / enforcement of maximum execution time when the hook is called. Eg hook into system location changes, and get called back a max of once per minute, and have 500ms to do something with the data or die.
No related posts.