Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check NSURL for UTI / file type

I'm building an app that allows users to drop videos onto it. Given a list of dropped NSURL*s how do I make sure each one conforms to the public.movie UTI type?

If I had an NSOpenPanel, I would just use openPanel.allowedFileTypes = @[@"public.movie"]; and Cocoa would take care of it for me.

Thanks in advance!

like image 992
simon.d Avatar asked Sep 19 '12 21:09

simon.d


2 Answers

This should work:

NSWorkspace *workspace = [NSWorkspace sharedWorkspace];

for (NSURL *url in urls) {
    NSString *type;
    NSError *error;
    if ([url getResourceValue:&type forKey:NSURLTypeIdentifierKey error:&error]) {
        if ([workspace type:type conformsToType:@"public.movie"]) {
            // the URL points to a movie; do stuff here
        }
    } else {
        // handle error
    }
}

(You can also use UTTypeConformsTo() instead of the NSWorkspace method.)

like image 70
Wevah Avatar answered Oct 08 '22 01:10

Wevah


Swift version:

do {
    var value: AnyObject?
    try url.getResourceValue(&value, forKey:NSURLTypeIdentifierKey)
    if let type = value as? String {
        if UTTypeConformsTo(type, kUTTypeMovie) {
        ...
        }
    }
}
catch {
}
like image 24
david72 Avatar answered Oct 08 '22 01:10

david72