The reason for the phone being flat is perhaps a limitation in iOS or perhaps a limitation of mine — I don’t know which! Basically you can access deviceHeading which is a projection of the north vector onto the long axis of the device. When the phone is orthogonal to north, that becomes unreliable, so the floating arrow breaks. What I really need is the north vector, real-time updated, relative to the device itself, no projection. But it seems like that isn’t available.