@Override public NSURL resolve(final Local file, final boolean interactive) throws AccessDeniedException { final NSData bookmark; if(null == file.getBookmark()) { log.warn(String.format("Missing security scoped bookmark for file %s", file)); if(interactive) { // Prompt user if no bookmark reference is available final String reference = this.choose(file); file.setBookmark(reference); bookmark = NSData.dataWithBase64EncodedString(reference); } else { throw new LocalAccessDeniedException(String.format("No security scoped bookmark for %s", file.getName())); } } else { bookmark = NSData.dataWithBase64EncodedString(file.getBookmark()); } final ObjCObjectByReference error = new ObjCObjectByReference(); final NSURL resolved = NSURL.URLByResolvingBookmarkData(bookmark, resolve, error); if(null == resolved) { log.warn(String.format("Error resolving bookmark for %s to URL", file)); final NSError f = error.getValueAs(NSError.class); if(null == f) { throw new LocalAccessDeniedException(file.getAbsolute()); } throw new LocalAccessDeniedException(String.format("%s", f.localizedDescription())); } return resolved; }