It shouldn't matter if they don't run on schedule because every bus/train has a GPS on it from which you can make predictions. iCommuteSF and Routesy (and i'm sure others) use this to give me results that are accurate the vast majority of the time.
There's no universally accepted API for the real-time data unlike the GTFS (General Transit Feed Specification) for theoretical schedules. You can approach some commonality with Nextbus API/scraping (http://www.nextbus.com/predictor/agencySelector.jsp) but not every agency offering real-time data uses it.
So iCommuteSF might very well be doable, but you can't use that everywhere like you can Google Maps with GTFS.
I didn't mean to imply you could do it everywhere. I was specifically replying to the part about "MUNI" in the parent comment. The geo data for current MUNI positions is public data. So if you are making an SFMUNI specific app, there's no excuse not to use it.
Also, I didn't realize that embark also does routing, which is more than iCommuteSF and Routesy do.
Yes, however Muni's own signs at the stops often make inaccurate predictions. As an occasional Muni rider, I've often waited for a bus or a train only to find that it's not in service. There are also frequent "ghost buses", where the minutes count down to zero but no bus shows up.
In other words, although I'm certain the transit apps could stand to improve, I don't think even Muni has accurate data.