Assigning UTI to file type
I'm trying to add UTI for a pair of file types, matching by extension. I think I've got it setup properly - at the very least, the file extension -> UTI mapping is recognized (I declared it as an imported type in info.plist). However, when I try to get the UTI off of my test file, I get back a dynamic UTI. Here's the sample code I'm using to test these two cases:

	NSString *previewTypeUTI = nil;
	NSURL *previewFileURL = [NSURL fileURLWithPath:@"/Users/eblair/Desktop/EWF/thetestfile.myext1"];

	[previewFileURL getResourceValue:&previewTypeUTI forKey:NSURLTypeIdentifierKey error:nil];
	NSLog(@"%@", previewTypeUTI);    // #1
	NSString *testUTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[previewFileURL pathExtension], NULL);
	NSLog(@"%@", testUTI);           // #2
	[testUTI release];


NSLog #1 prints out "dyn.########" and NSLog #2 prints out "com.mycompany.filetype1". I would've expected them to print the same thing. Is there some extra step to get the file->UTI mapping working or is it a case of Launch Services needing to catch up?

Just using the extension->UTI mapping isn't an option because I want to use some APIs that take advantage of UTIs and those APIs seem to be using the file->UTI mapping.

For the sake of completeness, here's the plist entry for the imported types:


	<key>UTImportedTypeDeclarations</key>
	<array>
		<dict>
			<key>UTTypeConformsTo</key>
			<array>
				<string>public.disk-image</string>
			</array>
			<key>UTTypeDescription</key>
			<string>File Type 1</string>
			<key>UTTypeIdentifier</key>
			<string>com.mycompany.filetype1</string>
			<key>UTTypeTagSpecification</key>
			<dict>
				<key>public.filename-extension</key>
				<array>
					<string>myext1</string>
				</array>
			</dict>
		</dict>
		<dict>
			<key>UTTypeConformsTo</key>
			<array>
				<string>public.disk-image</string>
			</array>
			<key>UTTypeDescription</key>
			<string>File Type 2</string>
			<key>UTTypeIdentifier</key>
			<string>com.mycompany.filetype2</string>
			<key>UTTypeTagSpecification</key>
			<dict>
				<key>public.filename-extension</key>
				<array>
					<string>myext2</string>
				</array>
			</dict>
		</dict>
	</array>

Assigning UTI to file type
===

I'm trying to add UTI for a pair of file types, matching by extension. I think I've got it setup properly - at the very least, the file extension -> UTI mapping is recognized (I declared it as an imported type in info.plist). However, when I try to get the UTI off of my test file, I get back a dynamic UTI. Here's the sample code I'm using to test these two cases:

	NSString *previewTypeUTI = nil;
	NSURL *previewFileURL = [NSURL fileURLWithPath:@"/Users/eblair/Desktop/EWF/thetestfile.myext1"];

	[previewFileURL getResourceValue:&previewTypeUTI forKey:NSURLTypeIdentifierKey error:nil];
	NSLog(@"%@", previewTypeUTI);    // #1
	NSString *testUTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[previewFileURL pathExtension], NULL);
	NSLog(@"%@", testUTI);           // #2
	[testUTI release];


NSLog #1 prints out "dyn.########" and NSLog #2 prints out "com.mycompany.filetype1". I would've expected them to print the same thing. Is there some extra step to get the file->UTI mapping working or is it a case of Launch Services needing to catch up?

Just using the extension->UTI mapping isn't an option because I want to use some APIs that take advantage of UTIs and those APIs seem to be using the file->UTI mapping.

For the sake of completeness, here's the plist entry for the imported types:


	<key>UTImportedTypeDeclarations</key>
	<array>
		<dict>
			<key>UTTypeConformsTo</key>
			<array>
				<string>public.disk-image</string>
			</array>
			<key>UTTypeDescription</key>
			<string>File Type 1</string>
			<key>UTTypeIdentifier</key>
			<string>com.mycompany.filetype1</string>
			<key>UTTypeTagSpecification</key>
			<dict>
				<key>public.filename-extension</key>
				<array>
					<string>myext1</string>
				</array>
			</dict>
		</dict>
		<dict>
			<key>UTTypeConformsTo</key>
			<array>
				<string>public.disk-image</string>
			</array>
			<key>UTTypeDescription</key>
			<string>File Type 2</string>
			<key>UTTypeIdentifier</key>
			<string>com.mycompany.filetype2</string>
			<key>UTTypeTagSpecification</key>
			<dict>
				<key>public.filename-extension</key>
				<array>
					<string>myext2</string>
				</array>
			</dict>
		</dict>
	</array>
