Preparing Graphics for Multiple Mobile Platforms

Wednesday, 8 December, 2010 Posted in:

If you are a graphic designer preparing graphics a multi-platform mobile app, there are a few things you should know before you start, to make things easier on yourself and the developer implementing your design. This article focuses on the iOS and Android platforms, beginning with a brief overview of the layout tools for each OS, then looking at how to deal with different screens, sizes and orientations.

Read the rest of this entry »

Four Things About PostgreSQL and Rails

Saturday, 6 November, 2010 Posted in:

I have a rails 2.3.5 app that I started with MySQL 5.0 as its database and that I later switched to PostgreSQL 8.3. There were a few bumps making the switch that I’d like to share.

Read the rest of this entry »

Strange iOS App Exit When Testing with the Debugger

Tuesday, 7 September, 2010 Posted in:

Today I was testing a new build of an iOS app and experienced what I think is a weird conflict with a previous version of the app. Here’s what happened:

I was testing a developer build of the app on an iPhone 3G running 3.1.2 and an iPhone 4 running 4.0.1. Before testing I installed an updated developer provisioning profile on each device. Everything worked perfectly on the 3G, but on the iPhone 4 the app would show the splash screen for a split second then close. It was as if the app was crashing on the iPhone 4 but there was no crash information showing up in the debugger. As far as the debugger was concerned there was nothing wrong to report.

I opened the Organizer window and checked the Device Logs tab for any crashes but there was nothing regarding the app I was testing. Next I checked the Console tab and saw the following:

Tue Sep 7 15:59:11 My-iPhone com.apple.launchd[1] (UIKitApplication:com.appname[0x2d1][6531]) : (UIKitApplication:com.appname[0x2d1]) posix_spawn(“/var/mobile/Applications/…/AppName.app/AppName”, …): Permission denied

Tue Sep 7 15:59:11 My-iPhone SpringBoard[28] : Unable to obtain a task name port right for pid 6531: (os/kern) failure

Tue Sep 7 15:59:11 My-iPhone com.apple.launchd[1] (UIKitApplication:com.appname[0x2d1][6531]) : (UIKitApplication:com.appname[0x2d1]) Exited with exit code: 1

Tue Sep 7 15:59:11 My-iPhone SpringBoard[28] : Unable to look up event port name for pid 6531: (os/kern) successful

Tue Sep 7 15:59:11 My-iPhone SpringBoard[28] : Unable to send activation event to com.appname animate activate: safe animationStart = 406459.5189769584 deactivate: : (ipc/send) invalid destination port

Tue Sep 7 15:59:11 My-iPhone SpringBoard[28] : Application ‘AppName’ exited abnormally with exit status 1

I Googled for explanations about the different warnings without success. Not knowing what else to do I decided to test the app one more time from a clean slate, so I deleted both the app and development profile from the iPhone 4. I tested again and to my surprise the app launched and worked flawlessly.

So what happened? An ad hoc build of a previous version of the app was already installed on the iPhone 4 and I did not delete it before testing a new developer build. Maybe Xcode 3.2.3 doesn’t completely remove a previous version of an application when testing a new version, and instead only updates relevant parts of the application’s bundle. If the bundle wasn’t updated correctly I suppose it could explain this weird behavior, though I really would have expected the app to be replaced completely or for an outright crash when i tried to run the app.

Anyway, if you are testing your app and you see similar behavior and an error message like the one above try deleting your app from the phone and then testing. Maybe it will work for you as well.

Gripes About Android’s WebView

Saturday, 21 August, 2010 Posted in:

I’ve been a little disappointed with my experience using Android WebViews. Perhaps naively, I expected WebViews by default to just work and behave the same way as the Webkit-based Browser app. I was wrong. Android WebViews seem to start out as very basic browser implementations and require you to manually enable or implement support for various behavior that you just expect from a browser.

Read the rest of this entry »

Developing for iOS and Android

Saturday, 7 August, 2010 Posted in:

I’ve had the opportunity to develop on both the iOS and Android platforms, something that, statistically speaking, makes me part of a minority of developers. My experience has been that the iOS platform offers better tools for developers, but that the Android platform offers more freedom in what a developer can do with a device. I thought I’d share some of my observations on the differences between the two platforms for anyone who is curious what its like developing for the other device.

Read the rest of this entry »

Apple, what were you thinking?

Tuesday, 6 July, 2010 Posted in:

At the end of June Apple sent a notification out to members of its developer program advising them that all new iPhone apps and updates would have to be built with the iPhone SDK 4. The important bit of the email read thus:

Make sure that your applications are compatible with iOS 4. All new applications and updates to existing applications must be built with iPhone SDK 4. In addition, the App Store will no longer support applications that target iOS 2.x.

This seems reasonable and, by itself, is not a problem as apps can still target previous versions of iOS even though they are built with iPhone SDK 4. The problem arises when you realize that any third party libraries your app uses will also have to be recompiled.

Several months ago Apple purchased QuattroWireless as their ad solution and recently relauched it as iAds. Most third party library publisher will be very quick to provide an updated version of their compiled library (if they don’t just provide the source code), and this is where I think Apple dropped the ball. This is not the case with QuattroWireless, at least at the time of this writing. The existing QuattroWireless library can not be used in apps built with SDK 4 without generating compile errors. The library needs to be republished for the updated SDK, however an email exchange with QuattroWireless reveals they have no plans to do this

As you may know, QuattroWireless was bought by Apple. As a result we are moving forward with our iOS 4.0 support in the new iAd platform. There will be no immediate update to the QuattroWireless SDK to support 4.0. We hope you join the iAd Network for 4.0 ads. Please let us know if you have any further questions

So why not just go with iAds? Including iAds in your app means you limit your audience to just people who have upgraded to iOS 4. Including iAds in your app means your app will not run on the iPad (the iPad has no iOS 4 support at this time). Basically implementing iAds means limiting your potential audience, at least for the time being.

I guess this means all the apps that currently use QuattroWireless and who are unwilling to lose audience by updating to SDK 4 will be looking to another ad solution such as AdMob.

Apple, what were you thinking?

Using ResponseCache in an Android App

Tuesday, 29 June, 2010 Posted in:

I’m currently working on an Android app and I’ve decided to use the java.net package for making HTTP requests. While the java.net package includes support for caching requests it does not include a default caching implementation like some other libraries — apparently Android developers are left to roll their own. I looked into it, and it seemed pretty straightforward to implement the ResponseCache, CacheRequest and CacheResponse classes, but there was a surprise waiting for when I tested my work. It was annoying so I thought I’d share. What follows is a simple example of how to implement ResponseCache, the surprise I found, and how I dealt with it.

Read the rest of this entry »

Dynamicly Loading Fonts in Flash

Saturday, 26 June, 2010 Posted in:

I guess the topic of dynamically loading fonts in Flash swfs is fairly old by now, and has been covered by several other people. But this was always something I meant to write up so … better late than never? I should say that while the way I did it back in the day works, Flex offers a few short cuts over a Flash IDE only approach. Anyway this is my take on the subject and is what I used when I was building the Flash albums for Zoto.

Read the rest of this entry »

Lessons Learned: Keep Your Data Simple

Sunday, 2 November, 2008 Posted in:

Even after years of application development experience there are still those times where you realize you’ve done something monumenally noobish and the only recourse your left is to face-palm, admit the mistake, and refactor.  I’ll share this story in the hopes that it will help someone avoid a similar snafu.

Read the rest of this entry »

An ActionScript Proxy Event Dispatcher

Sunday, 14 September, 2008 Posted in:

There are times when I need to listen to an object’s event for just a single dispatch and then be done with the listener.  When I’m faced with this situation I tend to want to define the event handler as a closure or an anonymous function as opposed to adding yet another class method to handle the dispatch.  A complication with this approach comes from the fact that I also want to explicitly remove my event listeners for the sake of good garbage collection.  So, to have my cake and eat it to I created a proxy class that takes care of listening to the event and cleaning up after itself once the event has been handled.

Read the rest of this entry »