Russian Qt Forum
Март 29, 2024, 01:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разборки с info.plist  (Прочитано 8918 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Ноябрь 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)" как его юзать - хз.

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

Спасибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #1 : Ноябрь 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

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

без минимального примера никто смотреть, скорее всего, не будет Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 09, 2020, 15:16 »

Ну я знал кто ответит Улыбающийся
первые же ссылки из поиска дают всю необходимую инфу по этим полям:
Улыбающийся Ну почему Вы полагаете что я даже не смотрел первые же ссылки, а сразу полез на форум спрашивать? "У кого глупость других не вызывает удивления?" Улыбающийся

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

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

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

Сообщений: 4724



Просмотр профиля WWW
« Ответ #3 : Ноябрь 09, 2020, 15:55 »

Ну почему Вы полагаете что я даже не смотрел первые же ссылки, а сразу полез на форум спрашивать?
а потому что не видно попыток решения в виде кода или отрывков Info.plist Подмигивающий
А минимальный пример у Вас "в кармане"
описательно минимальный пример ясен, конечно. тем не менее, у вас уже есть некоторые наработки, которые можно было бы оформить в виде компилируемого примера, от которого и плясать, а не проделывать все то же самое с нуля, особенно с учетом отсутствия опыта именно с данной темой Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 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 нет), делиться мне просто нечем  Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #5 : Ноябрь 10, 2020, 11:27 »

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

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Ноябрь 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, без написания кода. Выходит для "уже занятых" нельзя  Плачущий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #7 : Ноябрь 10, 2020, 13:50 »

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

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Ноябрь 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). Но этого почему-то не происходит
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #9 : Ноябрь 11, 2020, 11:51 »

https://www67.zippyshare.com/v/aVrg5t0S/file.html
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Ноябрь 11, 2020, 12:54 »

Так это голый-босый, т.е. только "содержимое файла", остальное утеряно при пересылке. Ну здесь он и показывается как "Document" с временным UTI. Зипаните на Mac, "по идее" zip должен все сохранить.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #11 : Ноябрь 11, 2020, 13:47 »

точно, а я и не понял сначала зачем в zip совать Улыбающийся

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Ноябрь 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 форумы (где в лесах много диких обезьян)?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #13 : Ноябрь 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/
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Ноябрь 13, 2020, 13:21 »

Ну эти я тоже знаю. Ладно, спробуем на stackoverflow
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 22.