If you've ever had to do more with a disk than NSFileManager provides, you've felt the pain. DiskArbitration is C-based, requires C-style callbacks, and makes you look up what options to pass every single time. VolumeManager exists to save you that trouble. It is a pure Objective-C interface and implements the standard delegate/protocol model to allow you to keep cruisin' without dropping in a few hundred extra lines of C.
If you're looking for a list of all of the volumes currently mounted, it's easy:
NSArray* volumes = [[[VolumeManager alloc] init] mountedVolumes];
To eject a volume:
[[[VolumeManager alloc] init] unmountAndEjectVolumeAt:[NSURL fileURLWithPath:@"/path/to/mountpoint"]];
You get the idea.
Because we're so nice, VolumeManager can inform your delegate of:
- Pending mount, unmount, and eject events
- Mount, unmount, and eject events as soon as they take place
Your delegate can also arbitrate mount, unmount, and eject requests, allowing you to choose if and when a volume is mounted, unmounted, or ejected.
This is the brainchild of Tom Metge (@tommetge), used in his unDock app, open sourced to the world because nobody else should have to suffer again.