Russian Qt Forum

Компиляторы и платформы => Mac OS X => Тема начата: Igors от Ноябрь 08, 2020, 14:17



Название: Разборки с info.plist
Отправлено: Igors от Ноябрь 08, 2020, 14:17
Добрый день

Такую тему я уже создал, но, поскольку, увы, все свалилось в нативняк, лучше продолжить здесь.
  
Требуется чтобы Finder по Cmd+I (в панели More Info) отображал инфу которая записывается приложением. Это называется "extended file attributes" и, как я убедился, используется очень широко. Привлекает что файл (содержимое) не трогается, ОС хранит записанные metadata как внешние. Отпадает необходимость в каких-то плагинах (иначе как ОС эту инфу покажет?).

Сама запись работает "с пол-пинка" как из командной строки (xattr) так и в runtime (setxattr). Однако метаданных "туева хуча", и ясно что отображать их все Finder не сможет. Нужно как-то задать "какие", причем там 2 варианта (для Finder'a и SpotLight'а).

Теперь собсно  Info.plist, никогда им не занимался, ну вот пришлось лезть. Для минимального ф-ционала (который обычно и нужен) - все прекрасно. Добавляем нужные расширения в секцию "Document Types", туда же имя своей иконки (из своих ресурсов) и ОС тип файла - все бычит, файлы показываются с нашей иконкой и по dbl-click или (Cmd+O) открываются нашим приложением. Причем даже если др приложение юзает то же расширение (видимо спасает OSType)

А вот инфу (метаданные) Finder просто так не показывает :'( Вернее показывает для стандартных расширений типа .png или .tga (видимо др приложение(я) подсуетилось). А вот для расширения .img - нет. Оно используется др приложением (как-то DiskMounter). но видимо оно нужный мета-айтем kMDTitlle не поддерживает.

Ну ладно, "пытаюсь разобраться" :) В Info.plist создал "Exported Type UTI(s)", понял так что это мы, мол, заявляем что "вот эта корова (файл с таким-то расширением и типом) наша" и присваиваем ему UTI (идентификатор типа, строка напр "com.mycompany,myapp"), а по этой уте (ууути-ути-ути) товарищи Finder и SpotLight уже разбираются  с метаданными.

Так, ну и для злополучного .img ни фига это не работает :'( Утилита mdls показывает что мое UTI файлу не присвоено, стоит то что поставил DiskMounter (com.apple.disl-image-ndif). Есть еще "Imported Type UTI(s)" как его юзать - хз.

В общем - застрял. Есть познания и/или мысли?

Спасибо


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 09, 2020, 14:19
Ну ладно, "пытаюсь разобраться" :) В Info.plist создал "Exported Type UTI(s)", понял так что это мы, мол, заявляем что "вот эта корова (файл с таким-то расширением и типом) наша" и присваиваем ему UTI (идентификатор типа, строка напр "com.mycompany,myapp"), а по этой уте (ууути-ути-ути) товарищи Finder и SpotLight уже разбираются  с метаданными.

Так, ну и для злополучного .img ни фига это не работает :'( Утилита mdls показывает что мое UTI файлу не присвоено, стоит то что поставил DiskMounter (com.apple.disl-image-ndif). Есть еще "Imported Type UTI(s)" как его юзать - хз.
первые же ссылки из поиска дают всю необходимую инфу по этим полям:
- https://stackoverflow.com/questions/24958021/document-types-vs-exported-and-imported-utis
- https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_declare/understand_utis_declare.html

еще можно посмотреть как другие приложения их описывают.

без минимального примера никто смотреть, скорее всего, не будет :)


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 09, 2020, 15:16
Ну я знал кто ответит :)
первые же ссылки из поиска дают всю необходимую инфу по этим полям:
:) Ну почему Вы полагаете что я даже не смотрел первые же ссылки, а сразу полез на форум спрашивать? "У кого глупость других не вызывает удивления?" :)

без минимального примера никто смотреть, скорее всего, не будет :)
А минимальный пример у Вас "в кармане". Требуется

Для файла с расширением .img в окне Finder'а, панели "More Info" показать
Цитировать
Title: kambala

И, как я понял, такой возможности (почти) нет :'(  Вот с каким-то своим расширением - пожалуйста. Для img можно вместо "Title" показать "Where From" или "Kind" - пожалуйста, но не более того. "Почти" - ну может это решается  кастомным импортером. Та це вже занадто  :'(


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 09, 2020, 15:55
Ну почему Вы полагаете что я даже не смотрел первые же ссылки, а сразу полез на форум спрашивать?
а потому что не видно попыток решения в виде кода или отрывков Info.plist ;)
А минимальный пример у Вас "в кармане"
описательно минимальный пример ясен, конечно. тем не менее, у вас уже есть некоторые наработки, которые можно было бы оформить в виде компилируемого примера, от которого и плясать, а не проделывать все то же самое с нуля, особенно с учетом отсутствия опыта именно с данной темой :)


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 10, 2020, 10:50
описательно минимальный пример ясен, конечно. тем не менее, у вас уже есть некоторые наработки, которые можно было бы оформить в виде компилируемого примера, от которого и плясать, а не проделывать все то же самое с нуля, особенно с учетом отсутствия опыта именно с данной темой :)
Думаю здесь выкладывать какие-то файлы неэффективно. Ну ладно, давайте "по шагам"

1) Добавим нужные метаданные
a) В TextEdit создадим файл, напр test1.rtf, содержимое не имеет никакого значения
b) В Terminal запишем метаданные
Цитировать
xattr -w com.apple.metadata:kMDItemTitle kambala <path/to/file>
c) Убедимся что записали
Цитировать
xattr -l <path/to/file>
d) В Finder'е возьмем инфу файла, все хорошо, в панели "More Info" есть "Title: kambala"
Теперь в том же окне инфы изменим расширение с .rtf на .img. Увы, title исчезнет.

2) Откроем любой проект в Xcode (напр один из примеров Qt, любой лишь бы это было приложение с Ui, а не утилита командной строки). В установках проекта, таба Info добавим новый документ (аттач). Разумеется можно использовать редактор plist или любой другой

Запустим приложение и выйдем из него. Смотрим переименованный test1.img. Да, наше приложение (по меньшей мере) попало в список открывающих img файл, можно добиться и своей иконки и Kind. Но "Title: kambala" нету.

Ну и собсно все. Да, неск дней я читал и экспериментировал с Exported/Imported UTIs (что после Document Types), но это ни к чему не привело (titlle в Finder'e нет), делиться мне просто нечем  :)


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 10, 2020, 11:27
больше похоже, что это как-то связано именно с образами диска, ибо та же история с файлом dmg. При этом, если переименовать в какой-нибудь log или md, то атрибут по-прежнему виден в файндере. Вроде ничего особенного не объявлено в /System/Library/CoreServices/DiskImageMounter.app/Contents/Info.plist ...

разве что только попробовать написать свой QL плагин, который будет отображать любые кастомные данные :)


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 10, 2020, 12:16
больше похоже, что это как-то связано именно с образами диска, ибо та же история с файлом dmg.
Думаю конкретно "образы диска" здесь ни при чем. Если расширение img ассоциируются со своим UTI (com.apple.disk-image-ndif), то отбор атрибутов (метаданных) для SpotLight и Finder'a будет выполняться плагинами что понимают эту утю - а их нет
Цитировать
mdimport -n - d1 <path/test1.img>
Остаются только дефаулты (Where From и Keywords), они всегда покажутся

Правда не понял почему "Imported UTI" не имеет эффекта. По смыслу вроде "оно", указываю идентификатор = com.apple.disk-image-ndif и "Conform to UTI" = public.rtf. Не бычит :'(

разве что только попробовать написать свой QL плагин, который будет отображать любые кастомные данные :)
Скорее всего да, но это уже вопрос "другого порядка", здесь речь о том можно ли обеспечить показ юзая только info.plist, без написания кода. Выходит для "уже занятых" нельзя  :'(


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 10, 2020, 13:50
Правда не понял почему "Imported UTI" не имеет эффекта. По смыслу вроде "оно", указываю идентификатор = com.apple.disk-image-ndif и "Conform to UTI" = public.rtf. Не бычит :'(
а почему Conform должен быть на ртф? там же изначально образ диска. Сомневаюсь, что простая смена расширения влияет на зашитый UTI.

вот пример: я сначала создал dmg, потом сменил расширение. что показывает path finder:


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 11, 2020, 10:38
вот пример: я сначала создал dmg, потом сменил расширение. что показывает path finder:
О path finder ничего не слышал. Выложите Ваш asd файл (в zip). Спасибо
а почему Conform должен быть на ртф? там же изначально образ диска. Сомневаюсь, что простая смена расширения влияет на зашитый UTI.
Влияет, напр команды mdimport и mdls это показывает (kMDItemContentType). Если расширение никому не принадлежит (как asd) то создается временный UTI типа dyn.<digits>. Да и по смыслу оно так - запрашивается подтверждение, меняется иконка и список открывающих. Никакой "изначальной" инфы не сохраняется, во всяком случае автоматом.

Также в mdls есть kMDItemContentTypeTree, и я рассчитывал что мой Conform (public.rtf) будет туда добавлен (для Imported UTI). Но этого почему-то не происходит


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 11, 2020, 11:51
https://www67.zippyshare.com/v/aVrg5t0S/file.html


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 11, 2020, 12:54
https://www67.zippyshare.com/v/aVrg5t0S/file.html
Так это голый-босый, т.е. только "содержимое файла", остальное утеряно при пересылке. Ну здесь он и показывается как "Document" с временным UTI. Зипаните на Mac, "по идее" zip должен все сохранить.


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 11, 2020, 13:47
точно, а я и не понял сначала зачем в zip совать :)

zip: https://www74.zippyshare.com/v/w14ZnFLM/file.html
tar на всякий случай: https://www108.zippyshare.com/v/LoktH8vm/file.html


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 12, 2020, 11:31
Здесь используется OS File Type/Creator записанное в FinderInfo, т.е. если расширение не зарегистрировано, то UTI вычисляется по OS Type. Если метаданные FinderInfo удалить, то все становится как в предыдущем случае для голого файла. Заметим что приоритет расширения выше. Попробуйте напр .asf (виесто .asd) - и UTI станет другим т.к. есть зарегистрированное asf.

В свой img файл я конечно пишу Type/Creator (еще со времен classic), но это никак не помогает показать инфу Titlle  :'(  По расширению img вычисляется UTI = com.apple.disk-image-ndif, и нет ни возможности это изменить, ни подсунуть этой уте атрибут Title

Где еще можно спросить, знаете Mac форумы (где в лесах много диких обезьян)?


Название: Re: Разборки с info.plist
Отправлено: kambala от Ноябрь 12, 2020, 12:00
Попробуйте напр .asf (виесто .asd) - и UTI станет другим т.к. есть зарегистрированное asf.
таки да :(
Где еще можно спросить, знаете Mac форумы (где в лесах много диких обезьян)?
https://developer.apple.com/forums/
https://stackoverflow.com/
https://apple.stackexchange.com/
https://forums.macrumors.com/


Название: Re: Разборки с info.plist
Отправлено: Igors от Ноябрь 13, 2020, 13:21
Ну эти я тоже знаю. Ладно, спробуем на stackoverflow