Создание собственного расширения файла на основе plist
Мое приложение обрабатывает файлы типа *.mndl
, который не превышает настраиваемый *.plist
.
До сих пор я использовал файлы *.plist
, но теперь я хочу связать расширение и иметь возможность открывать файлы *.mndl
из любого другого приложения, которое я понял, что переименование file.plist
в file.mndl
не работает. (Следовательно, я даже не знаю, правильно ли я сделал ассоциацию расширения и экспорт)
Я отправил себе файл file.mndl
с компьютера, а когда получил его в mail.app, я получил
file.mndl.plist
(он был автоматически переименован, это произошло при перепродаже моего iPad)
Как я могу создать свои собственные файлы mndl, имея возможность читать его содержимое, используя +dictionaryWithContentsOfFile:
из класса NSDictionary?
Даже я работаю с iOS. Я считаю, что такие вещи были перенесены из MacOS и Cocoa. Поэтому разработчики Cocoa тоже могли это знать.
Ваши комментарии и ответы приветствуются.
Спасибо
ОТВЕТИЛ:
Только для целей завершения Это дополнение, которое я сделал для своего info.plist:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Mandala Chart File</string>
<key>UTTypeIdentifier</key>
<string>com.nacho4d.Accordion.mndl</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>mndl</string>
</dict>
</dict>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Document320Icon.png</string>
<string>Document64Icon.png</string>
</array>
<key>CFBundleTypeName</key>
<string>Mandala Chart File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.nacho4d.Accordion.mndl</string>
</array>
</dict>
</array>
Ответы
Ответ 1
Как минимум для приложения Cocoa (desktop), вы хотите добавить следующую информацию в ваше приложение Info.plist.
http://www.markdouma.com/developer/nacho.plist
Очевидно, вы должны изменить идентификатор однородного типа на что-то подходящее. (Я обычно делаю com.markdouma.something, с тех пор на моем сайте).
Обратите внимание, что вы хотите указать запись для NSDocumentClass, если планируете использовать архитектуру Cocoa NSDocument, создав подкласс NSDocument для обработки загрузки файлов. В противном случае вы всегда можете просто реализовать следующее <NSApplicationDelegate> (прочитайте это как метод делегирования приложения):
- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames;
Это даст вам NSArray из NSStrings, представляющий пути POSIX, к файлам, которые пользователь дважды нажал в Finder (или перетащил на значок приложения и т.д.).
Если вы хотите перейти по пути NSDocument, вы можете переопределить следующий метод NSDocument
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)outError;
и создайте словарь с помощью [[NSDictionary dictionaryWithContentsOfFile: [url path]] сохранить];
Надеюсь, что это поможет...
Ответ 2
В конце концов я нашел это, которое также можно было бы использовать в качестве ссылки:
Я нашел это в кеше Google и показывает, как добавить несколько расширений с различными свойствами:)
<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>