Creating my own file extension based on plist

て烟熏妆下的殇ゞ 提交于 2019-11-28 20:51:54

At least for a Cocoa (desktop) app, you'd want to add the following information to your application's Info.plist.

http://www.markdouma.com/developer/nacho.plist

Obviously, you should change the uniform type identifier to something appropriate. (I usually do com.markdouma.something, since that's my website).

Note that you only want to specify an entry for NSDocumentClass if you plan on using Cocoa's NSDocument architecture by creating an NSDocument subclass to handle loading the files. Otherwise, you could always just implement the following < NSApplicationDelegate > (read that as application delegate protocol) method:

- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames;

That will give you an NSArray of NSStrings representing the POSIX paths to the files the user double-clicked on in the Finder (or dragged to the app icon, etc.)

If you want to go the NSDocument route, you can override the following method of NSDocument

- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)outError;

and create your dictionary with [[NSDictionary dictionaryWithContentsOfFile:[url path]] retain];

Hope this helps...

Eventually I found this which could be used as a reference too: I found this on Google's cache and it shows how to add several extensions with different properties :)

<key>UTImportedTypeDeclarations</key>
 <array>
  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.audio</string>
   <key>UTTypeIdentifier</key>
   <string>public.mp3</string>
   <key>UTTypeDescription</key>
   <string>MP3 audio</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <array>
     <string>MPG3</string>
     <string>mpg3</string>
     <string>Mp3 </string>
     <string>MP3 </string>
     <string>mp3!</string>
     <string>MP3!</string>
    </array>
    <key>public.mime-type</key>
    <array>
     <string>audio/mpeg</string>
     <string>audio/mpeg3</string>
     <string>audio/mpg</string>
     <string>audio/mp3</string>
     <string>audio/x-mpeg</string>
     <string>audio/x-mpeg3</string>
     <string>audio/x-mpg</string>
     <string>audio/x-mp3</string>
    </array>
    <key>public.filename-extension</key>
    <string>mp3</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <array>
    <string>public.audio</string>
   </array>
   <key>UTTypeIdentifier</key>
   <string>public.mpeg-4-audio</string>
   <key>UTTypeDescription</key>
   <string>MPEG-4 audio</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <array>
     <string>M4A </string>
    </array>
    <key>public.mime-type</key>
    <array>
     <string>audio/mp4</string>
    </array>
    <key>public.filename-extension</key>
    <array>
     <string>m4a</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.movie</string>
   <key>UTTypeIdentifier</key>
   <string>public.mpeg-4</string>
   <key>UTTypeDescription</key>
   <string>MPEG-4 movie</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <array>
     <string>mpg4</string>
     <string>MP4 </string>
    </array>
    <key>public.mime-type</key>
    <array>
     <string>video/mp4</string>
     <string>video/mp4v-es</string>
    </array>
    <key>public.filename-extension</key>
    <array>
     <string>mp4</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.movie</string>
   <key>UTTypeIdentifier</key>
   <string>public.mpeg</string>
   <key>UTTypeDescription</key>
   <string>MPEG movie</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <array>
     <string>MPG </string>
     <string>MPEG</string>
    </array>
    <key>public.mime-type</key>
    <array>
     <string>video/mpeg</string>
     <string>video/mpg</string>
     <string>video/x-mpeg</string>
     <string>video/x-mpg</string>
    </array>
    <key>public.filename-extension</key>
    <array>
     <string>mpg</string>
     <string>mpeg</string>
     <string>mpe</string>
     <string>m75</string>
     <string>m15</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.audiovisual-content</string>
   <key>UTTypeIdentifier</key>
   <string>public.audio</string>
   <key>UTTypeDescription</key>
   <string>audio</string>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.movie</string>
   <key>UTTypeIdentifier</key>
   <string>public.video</string>
   <key>UTTypeDescription</key>
   <string>video</string>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.audiovisual-content</string>
   <key>UTTypeIdentifier</key>
   <string>public.movie</string>
   <key>UTTypeDescription</key>
   <string>movie</string>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.image</string>
   <key>UTTypeIdentifier</key>
   <string>com.microsoft.bmp</string>
   <key>UTTypeDescription</key>
   <string>Windows bitmap image</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <array>
     <string>BMP </string>
     <string>BMPf</string>
    </array>
    <key>public.mime-type</key>
    <string>image/bmp</string>
    <key>public.filename-extension</key>
    <string>bmp</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <array>
    <string>public.data</string>
    <string>public.content</string>
   </array>
   <key>UTTypeIdentifier</key>
   <string>public.audiovisual-content</string>
   <key>UTTypeDescription</key>
   <string>audiovisual content</string>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.image</string>
   <key>UTTypeIdentifier</key>
   <string>public.png</string>
   <key>UTTypeDescription</key>
   <string>Portable Network Graphics image</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>PNGf</string>
    <key>public.mime-type</key>
    <string>image/png</string>
    <key>public.filename-extension</key>
    <string>png</string>
    <key>com.apple.nspboard-type</key>
    <string>Apple PNG pasteboard type</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.image</string>
   <key>UTTypeIdentifier</key>
   <string>com.compuserve.gif</string>
   <key>UTTypeDescription</key>
   <string>Graphics Interchange Format (GIF)</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>GIFf</string>
    <key>public.mime-type</key>
    <string>image/gif</string>
    <key>public.filename-extension</key>
    <string>gif</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.image</string>
   <key>UTTypeIdentifier</key>
   <string>public.tiff</string>
   <key>UTTypeDescription</key>
   <string>TIFF image</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>TIFF</string>
    <key>public.mime-type</key>
    <string>image/tiff</string>
    <key>public.filename-extension</key>
    <array>
     <string>tiff</string>
     <string>tif</string>
    </array>
    <key>com.apple.nspboard-type</key>
    <array>
     <string>NeXT TIFF v4.0 pasteboard type</string>
     <string>NSTIFFPboardType</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.image</string>
   <key>UTTypeIdentifier</key>
   <string>public.jpeg-2000</string>
   <key>UTTypeDescription</key>
   <string>JPEG 2000 image</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>jp2 </string>
    <key>public.mime-type</key>
    <string>image/jp2</string>
    <key>public.filename-extension</key>
    <array>
     <string>jp2</string>
     <string>jpf</string>
     <string>jpx</string>
     <string>j2k</string>
     <string>j2c</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.image</string>
   <key>UTTypeIdentifier</key>
   <string>public.jpeg</string>
   <key>UTTypeDescription</key>
   <string>JPEG image</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>JPEG</string>
    <key>public.mime-type</key>
    <array>
     <string>image/jpeg</string>
     <string>image/jpg</string>
    </array>
    <key>public.filename-extension</key>
    <array>
     <string>jpeg</string>
     <string>jpg</string>
     <string>jpe</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <array>
    <string>public.data</string>
    <string>public.content</string>
   </array>
   <key>UTTypeIdentifier</key>
   <string>public.image</string>
   <key>UTTypeDescription</key>
   <string>image</string>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <array>
    <string>public.data</string>
    <string>public.composite-content</string>
   </array>
   <key>UTTypeIdentifier</key>
   <string>com.apple.webarchive</string>
   <key>UTTypeDescription</key>
   <string>web archive</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <array>
     <string>weba</string>
    </array>
    <key>public.mime-type</key>
    <array>
     <string>application/x-webarchive</string>
    </array>
    <key>public.filename-extension</key>
    <array>
     <string>webarchive</string>
    </array>
    <key>com.apple.nspboard-type</key>
    <array>
     <string>Apple Web Archive pasteboard type</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <array>
    <string>public.data</string>
    <string>public.composite-content</string>
   </array>
   <key>UTTypeIdentifier</key>
   <string>com.adobe.pdf</string>
   <key>UTTypeDescription</key>
   <string>Portable Document Format (PDF)</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>PDF </string>
    <key>public.mime-type</key>
    <string>application/pdf</string>
    <key>public.filename-extension</key>
    <string>pdf</string>
    <key>com.apple.nspboard-type</key>
    <string>Apple PDF pasteboard type</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.text</string>
   <key>UTTypeIdentifier</key>
   <string>public.html</string>
   <key>UTTypeDescription</key>
   <string>HTML text</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>HTML</string>
    <key>public.mime-type</key>
    <string>text/html</string>
    <key>public.filename-extension</key>
    <array>
     <string>html</string>
     <string>htm</string>
     <string>shtml</string>
     <string>shtm</string>
    </array>
    <key>com.apple.nspboard-type</key>
    <string>Apple HTML pasteboard type</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.plain-text</string>
   <key>UTTypeIdentifier</key>
   <string>public.utf16-plain-text</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>utxt</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.plain-text</string>
   <key>UTTypeIdentifier</key>
   <string>public.utf16-external-plain-text</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>ut16</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.plain-text</string>
   <key>UTTypeIdentifier</key>
   <string>public.utf8-plain-text</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>com.apple.ostype</key>
    <string>utf8</string>
    <key>com.apple.nspboard-type</key>
    <string>NSStringPboardType</string>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <string>public.text</string>
   <key>UTTypeIdentifier</key>
   <string>public.plain-text</string>
   <key>UTTypeTagSpecification</key>
   <dict>
    <key>public.mime-type</key>
    <string>text/plain</string>
    <key>public.filename-extension</key>
    <array>
     <string>txt</string>
     <string>text</string>
    </array>
   </dict>
  </dict>

  <dict>
   <key>UTTypeConformsTo</key>
   <array>
    <string>public.data</string>
    <string>public.content</string>
   </array>
   <key>UTTypeIdentifier</key>
   <string>public.text</string>
   <key>UTTypeDescription</key>
   <string>text</string>
  </dict>

 </array>



 <key>CFBundleDocumentTypes</key>
 <array>
  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>mp3</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>audio/mpeg</string>
    <string>audio/mpeg3</string>
    <string>audio/mpg</string>
    <string>audio/mp3</string>
    <string>audio/x-mpeg</string>
    <string>audio/x-mpeg3</string>
    <string>audio/x-mpg</string>
    <string>audio/x-mp3</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>MPG3</string>
    <string>mpg3</string>
    <string>Mp3 </string>
    <string>MP3 </string>
    <string>mp3!</string>
    <string>MP3!</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>MP3 audio</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.mp3</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>m4a</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>audio/mp4</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>M4A </string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>MPEG-4 audio</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.mpeg-4-audio</string>
   </array>
  </dict>

  <dict>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>audio</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.audio</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>bmp</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>image/bmp</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>BMP </string>
    <string>BMPf</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>Windows bitmap image</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>com.microsoft.bmp</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>png</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>image/png</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>PNGf</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>Portable Network Graphics image</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.png</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>gif</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>image/gif</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>GIFf</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>Graphics Interchange Format (GIF)</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>com.compuserve.gif</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>tiff</string>
    <string>tif</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>image/tiff</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>TIFF</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>TIFF image</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.tiff</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>jp2</string>
    <string>jpf</string>
    <string>jpx</string>
    <string>j2k</string>
    <string>j2c</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>image/jp2</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>jp2 </string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>JPEG 2000 image</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.jpeg-2000</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>jpeg</string>
    <string>jpg</string>
    <string>jpe</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>image/jpeg</string>
    <string>image/jpg</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>JPEG</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>JPEG image</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.jpeg</string>
   </array>
  </dict>

  <dict>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>image</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.image</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>webarchive</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>application/x-webarchive</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>weba</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>web archive</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>com.apple.webarchive</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>pdf</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>application/pdf</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>PDF </string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>Portable Document Format (PDF)</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>com.adobe.pdf</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>html</string>
    <string>htm</string>
    <string>shtml</string>
    <string>shtm</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>text/html</string>
   </array>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>HTML</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>HTML text</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.html</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>utxt</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.utf16-plain-text</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>ut16</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.utf16-external-plain-text</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeOSTypes</key>
   <array>
    <string>utf8</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.utf8-plain-text</string>
   </array>
  </dict>

  <dict>
   <key>CFBundleTypeExtensions</key>
   <array>
    <string>txt</string>
    <string>text</string>
   </array>
   <key>CFBundleTypeMIMETypes</key>
   <array>
    <string>text/plain</string>
   </array>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.plain-text</string>
   </array>
  </dict>

  <dict>
   <key>LSTypeIsPackage</key>
   <false />
   <key>NSExportableAs</key>
   <array>
   </array>
   <key>CFBundleTypeName</key>
   <string>text</string>
   <key>LSItemContentTypes</key>
   <array>
    <string>public.text</string>
   </array>
  </dict>

 </array>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!