Обновление:
Во всех системах с Spotlight, используя mdls
, вы можете обнаруживать пакеты, глядя на свойство kMDItemContentTypeTree. E.g.:
mdls -name kMDItemContentTypeTree "/Applications/Safari.app"
производит для меня следующий вывод
kMDItemContentTypeTree = (
"com.apple.application-bundle",
"com.apple.application",
"public.executable",
"com.apple.localizable-name-bundle",
"com.apple.bundle",
"public.directory",
"public.item",
"com.apple.package"
)
Всякий раз, когда вы видите com.apple.package
, он должен отображаться Finder как пакет. Конечно, все, что имеет в названии «комплект», подразумевает, что уже, но не все пакеты являются пакетами (комплекты представляют собой определенное подмножество пакетов, которые имеют четко определенную структуру каталогов).
Старый ответ:
Вы можете получить список всех зарегистрированных расширений типов файлов, используя эту команду (OS X до Leopard):
/System/Library/Frameworks/ApplicationServices.framework/Frameworks\
/LaunchServices.framework/Support/lsregister -dump
или для Леопарда и позже:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks\
/LaunchServices.framework/Versions/A/Support/lsregister -dump
У каждого расширения файла есть флаги. Если установлен флаг пакета, это пакет.
1024 * Е.Г. *
claim id: 806354944
name: Bundle
role: none
flags: apple-internal relative-icon-path package
icon: Contents/Resources/KEXT.icns
bindings: .bundle
--------------------------------------------------------
claim id: 1276116992
name: Plug-in
role: none
flags: apple-internal relative-icon-path package
icon: Contents/Resources/KEXT.icns
bindings: .plugin
Сравните это с файлом без пакета
claim id: 2484731904
name: TEXT
role: viewer
flags: apple-internal
icon:
bindings: .txt, .text, 'TEXT'
Единственный способ действительно получить все пакеты - это поискать в базе данных LaunchService (той, которую мы вывалили выше). Если вы просто узнаете, есть ли у него plist или нет, или установлен бит пакета, вы можете перехватить некоторые или даже много пакетов, но вы не можете перехватить все из них. Это база данных, которую Finder использует для определения
- Является ли этот каталог связкой или нет?
- Это известное расширение файла или нет?
- Какие приложения должны быть перечислены в разделе «Открыть с помощью» для этого типа файлов?
- Какой значок я должен использовать для отображения файлов этого типа?
и еще кое-что.
[EDIT: добавлен путь для Leopard, спасибо Hagelin за обновление]