We have also been working on this on carmodder, by sniffing the single wire can for various signals.
We worked out the park assist sw can packets, so as to display the park assist outline, and distances on the factory screen.
We also worked out how to push text, and gps symbols to the cluster, chime speakers, and listen for various buttons to be pressed on the head unit.
The cool thing with sw stuff is anything is possible, the biggest downside to it all is the time requires to sniff packets.
I am a registered apple iOS developer, an android, as well as Linux and windows developer (to various extents) and the biggest problem that I can see with using iOS is getting the data to and from the device.
Correct me if I am wrong, but I think the method that people are using is wifi, with a sw can interface that is essentially a packet gateway between sw can, and an Ethernet port, either using an arduino, or some other device simple CPU device.
Basically that's a lot of links in the chain, and there could be reliability issues with this method.
I know rs232 Bluetooth is available with ios5, but as a developer there isn't a lot of sample code or documentation out there on using this data method.
I think using android devices could be very promising, as there are a lot of dev boards out there that support a huge amount of Gpio, GPRS, 3G comms, Sata / flash drives, etc that could be used as a fixed solution.
Then you could get better integration such as screen dimming when lights are on, auto sleep, wake up via can, etc....
Just my random ramblings (I do this a lot when thinking about complex stuff)