I'm not sure, I'd think that generally you'd want to handle completion and cleanup in one place. The only exception to this I can think of is if someone is writing a retry handler - but at some point they'd still want to abort the retry and jump to common completion handling code. (And I'm not sure why anyone would ever want a retry handler for zipping)

What do you think of instead switching the (BOOL)success param to an (Enum)result? Something like:
```objective-c
typedef enum SSArchiveResult : NSInteger SSArchiveResult;
enum SSArchiveResult : NSInteger {
  SSArchiveResultSuccess,
  SSArchiveResultCanceled,
  SSArchiveResultFileNotFound,
  SSArchiveResultFailed,
};
```