UTI "com.apple" в произвольном формате
У меня есть приложение на основе документа с пользовательским форматом файла, UTI и такими настроенными так:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>extension</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>Icon</string>
<key>CFBundleTypeName</key>
<string>Custom Document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>NSDocumentClass</key>
<string>MyDocument</string>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Custom Document</string>
<key>UTTypeIconFile</key>
<string>Icon</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.appname</string>
<key>UTTypeReferenceURL</key>
<string></string>
<key>UTTypeTagSpecification</key>
<dict>
<key>com.apple.ostype</key>
<string>XXXX</string>
<key>public.filename-extension</key>
<array>
<string>extension</string>
</array>
</dict>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array/>
Что (я полагаю, основываясь на том, что я прочитал) является правильным способом сделать это. За исключением случаев, когда я запускаю mdls для любых сохраненных файлов, UTI отображается как:
kMDItemContentType = "com.apple.appname.document"
Это сбивает с толку, поскольку я буквально копировал и вставлял записи из списков примеров приложений, таких как TextEdit, iSpend и Sketch, но все безрезультатно.
Особенно важно, чтобы сохраненные документы имели правильный UTI, потому что им нужен собственный генератор QuickLook, который полагается на правильный UTI.
Любая помощь с благодарностью. Заранее спасибо.
1 ответ
Вы когда-нибудь делали следующее:
1) В какой-то момент com.apple.appname.document
как ваш тип UTI, и в то время вы создали пользовательский документ вашего типа в файловой системе.
3) Затем вы изменили настройки UTI в вашем приложении.
4) Вы просматриваете информацию для файла, созданного на шаге 1, и этот файл не изменился с момента его создания?
Если это так, попробуйте использовать терминал для touch
рассматриваемый файл, чтобы вызвать его переиндексацию Spotlight, а затем еще раз посмотреть.
В противном случае это также может помочь убедиться, что вы удалили все посторонние копии своего приложения, а затем пересобрали базу данных Launch Services (вы можете использовать для этого утилиту, которую я написал: Rebuild Launch Services Database.
В целом, информация Info.plist в порядке, хотя я бы порекомендовал следующее:
В вашем
UTExportedTypeDeclarations
подUTTypeTagSpecification
, только укажите OSType (код типа файла), если вы действительно знаете, что делаете. Это означает, что вы, конечно, не используете такой тип, как'appe'
это все строчные буквы, так как они зарезервированы для Apple. Я знаю, что вы были обязаны зарегистрировать коды создателей (CFBundleSignature
s) с Apple (я сам сделал несколько), хотя я не уверен насчет типов файлов и того, делают ли они это до сих пор или нет. Если вы укажете какой-либо код произвольного типа файла и не будете знать, какие именно коды использовались за последние 30 лет, вы рискуете конфликтовать с существующими определенными типами.Измените тип документа UTI, чтобы он был более специфичным для вашего типа. Что-то вроде
com.mycompany.appname.extension
,
Тогда поменяй поменяй свой документ CFBundleDocumentTypes
запись, удалив CFBundleTypeExtensions
запись и добавление LSItemContentTypes
как следующее:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>LSItemContentTypes</key>
<array>
<string>com.mycompany.appname.extension</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>Icon</string>
<key>CFBundleTypeName</key>
<string>Custom Document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>NSDocumentClass</key>
<string>MyDocument</string>
</dict>
</array>
Затем, наконец, убедитесь, что все ключи в вашем Info.plist не переопределяются локализованными версиями в InfoPlist.strings
файл, если у вас есть.