Prior to iOS 4.0, CoreLocation was reporting altitude correctly, now it always reports as 0 ft.
CoreLocation
-(void)locationManager:(CLLocationManager *)mana
Core Location does not always report altitude immediately. I usually check for a zero altitude in my "success" delegate method. If the altitude is still 0, I keep checking, otherwise, I turn of CoreLocation.