How to detect if a NSURL can be accessed on a Sandboxed app?
-
21-06-2021 - |
Question
I'm writing an OS X application that has an open panel with a preview accessory view.
The problem is that when I select a file that is not on a folder with sandbox permissions I cannot preview it.
Is there any way to tell if a file can would be restricted by the sandbox permissions before trying to open it?
I already tried - (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
of the NSURL
class but it returns true even when the file is protected.
La solution
The recommended method is to obtain the path from the URL, convert to a C string, and then call access
(documented in section 2 of man) to check for the permission you require. E.g., in outline to check for read access:
#include <unistd.h>
if (access([[url path] UTF8String], R_OK) == 0)
{
// have access rights to read
}
Autres conseils
For those who like to have as less as possible Plain-Old-C Lines in the Code:
NSURLIsReadableKey in NSURL - (BOOL)getResourceValue:(out id *)value forKey:(NSString *)key
alternatively
NSFileManager - (BOOL)isReadableFileAtPath:(NSString *)path
The sandbox will cause these to return NO if it restricts your access and are merely Cocoa-Wrappers around access(). The sandbox will cause these to return NO if it restricts your access.