You can disable the compass easily on OSX 10.9 / iOS 9 and later with the showsCompass
property.
Objective-C:
mapView.showsCompass = NO;
Swift:
mapView.showsCompass = false
Hiding the compass this way will not prevent a custom MKCompassButton from acting and appearing as normal.
On iOS 8 or earlier, your choices are:
Suck it up and live with it.
Use a hack, like:
position the map to hide the compass offscreen (credit goes to Alex Wien), or
walk the view hierarchy of the map to find the view representing the compass and remove it (credit goes to David Topolansky).
If you're not rotating the map programatically and it hasn't already been rotated, disable rotation entirely, using
mapView.rotateEnabled = NO;
The compass only shows up when the map is rotated, so by doing this you ensure that the compass is never triggered.
It's not clear to me why Apple waited so long to allow hiding the compass on iOS, and none of the options above are ideal. Pick whichever you think is the least bad in your case.