Hey Ian,
For media.save(), it definitely does not return any status as to whether it was successful or not. Whether that was a design decision or a bug I’m not sure of.
At the beginning of 2016, we implemented some extensions to existing Lua APIs to handle runtime permissions, but these APIs only work on Android at the moment. See the Introducing New Android 6 Features for more info on that.
In the specific case of checking whether an iOS user has granted access to photos, you should be able to use media.hasSource( media.PhotoLibrary ). The return values for this should be analogous to those for media.hasSource( media.Camera ).
It does look like our docs need updating on that, assuming it works for you.