Связь с Mac OS X работает, но значок файла не изменился

Я разработал приложение для Mac, используя Qt 5.3.2. Это приложение обрабатывает файлы с определенным расширением (скажем, .xyz).

Я создал файл значков с именем XYZ.icns и добавил его в папку ресурсов пакета приложений (MyApp.app/Contents/Resources/XYZ.icns).

Я также изменил файл Info.plist пакета для установки ассоциации файлов. Я добавил эту запись:

<key>CFBundleDocumentTypes</key>
<array>
    <!-- Registered file accociation -->
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleTypeName</key>
        <string>XYZ</string>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>xyz</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>XYZ</string>
    </dict>
<array>

Результат: сработало сопоставление файлов (двойной щелчок по файлу открывает мое приложение), однако значок не был заменен (по-прежнему отображается значок пустого документа).

Есть что-то, что я пропустил? Я посмотрел на другие приложения для примеров, и, кажется, нет ничего больше, чем я сделал.

РЕДАКТИРОВАТЬ: я сделал еще несколько тестов. Я сбросил данные службы запуска с помощью этой команды:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister -dump

В результате я могу найти претензии к файлу типа файла, включая информацию о значке:

...

--------------------------------------------------------------------------------
Container mount state: mounted
bundle  id:            105396
    ...
    path:          /Applications/MyApp.app
    name:          MyApp
    ...
    --------------------------------------------------------
    claim   id:            27628
        name:          XYZ
        rank:          Default
        reqCaps:      
        roles:         Editor  
        flags:         relative-icon-path  doc-type  
        icon:          Contents/Resources/XYZ.icns
        bindings:      .xyz
--------------------------------------------------------------------------------
...

РЕДАКТИРОВАТЬ 2: Через некоторое время он, наконец, начал работать самостоятельно. Ночью, есть обновление ОС, которое было установлено, и я также должен был выключить компьютер (Служба запуска, вероятно, обновила что-то самостоятельно). Я хотел бы обновить свой вопрос следующим образом: как убедиться, что служба запуска обновляет значки соответствующих файлов, когда приложение установлено или изменено?

1 ответ

Насколько я понимаю, определенные (встроенные) действия запускают Launch Services для обновления базы данных. Перетаскивание нового пакета.app в папки "Приложения" является одним из триггеров, как и запуск установщика PackageMaker. Однако может быть разрыв между тем, что находится в базе данных Launch Services и тем, что показывает Finder (до некоторого другого обновления / перезапуска).

Некоторые быстрые поиски в Google показывают, что вы можете принудительно пересобрать из командной строки: /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

Однако этот шаг не должен быть необходим из-за встроенных триггеров, поэтому я не буду его использовать, если вы не сможете четко определить, почему встроенные триггеры не работают в вашем приложении. И если проблема в кеше иконок Finder, это тоже может не помочь.

Другие вопросы по тегам