I’ve been testing an application called SipPhone for the Iphone (http://www.vnet-corp.com/iSip.htm)
It works over WiFi only (obviously, as the mobile providers don’t want you using VOIP rather than paying for their minutes!) and it works pretty well. It was easy to get it registered as an extension on my Asterisk server and start making calls as you would with any other SIP or softphone.
The quality was very good although it will obviously depend on how good your Wifi connection is. I had some trouble getting it to stay registered with my Asterisk server although that will be to do with my setup. My Asterisk server is on a public IP address and my Iphone was on my home WiFi connection, which is behind a NAT router.
I probably could have got it to stay registered by playing around with port forwarding on the router but is wasn’t really worth it due to a bigger problem. Apple do not currently allow 3rd party apps to run in the background on the Iphone. That means as soon as you come out of the SipPhone application it’s no longer running, so you’re no longer connected anyway.
So while it’s great for firing up and making outgoing calls it’s probably not practical for incoming calls. This may change in the future if Apple allow applications to run in the background.