Mac OSX: ассоциация расширения папки программно - PullRequest
4 голосов
/ 14 декабря 2011

Можно ли зарегистрировать расширение папка на Mac для открытия в определенном приложении (что-то вроде папок .app ведет себя особым образом)? Если это возможно, то как? Я ищу решение, подобное этому: связанный вопрос , только для папок, а не файлов.

Я посмотрел ссылку на UTI UTI , но я не нашел ни одного подходящего идентификатора (например, что-то вроде public.folder-extension).

Можно ли вообще это сделать? В графическом интерфейсе я также не видел никакого способа сделать это (для папки с определенным расширением нет опции "Открыть с помощью ..."). [Важно: я не хочу делать это в графическом интерфейсе, это было только замечание, чтобы сказать, почему я думаю, что это может быть невозможно.]

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Я нашел способ, который работает для меня (в случае, если кто-то еще сталкивается с этой проблемой):

  1. Добавьте следующий фрагмент в файле Info.plist пакета приложения:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
           <key>CFBundleTypeExtensions</key>
           <array>
               <string>ext1</string>
               <string>ext2</string>
           </array>
           <key>CFBundleTypeIconFile</key>
           <string>documentlogo.icns</string>
           <key>CFBundleTypeName</key>
           <string>My Bundle Type Name</string>
           <key>CFBundleTypeRole</key>
           <string>Viewer</string>
           <key>LSTypeIsPackage</key>
           <true />
        </dict>
    </array>
    
  2. Замените ext1, ext2 расширениями, которые вы хотели бы поддерживать, documentlogo.icns - именем значка документа (который должен находиться в Application Bundle.app/Contents/Resources/documentlogo.icns) и имя типа My Bundle с разумным именем для вашего пакета)

  3. В этом примере любая папка, которая должна быть распознана как пакет нашегоприложение, должно иметь расширение ext1 или ext2 и должно содержать файл Contents / PkgInfo с 8 "?".Все остальное - на ваше усмотрение.

Я основываю свое решение на этих источниках, Пакеты документов , Справочная информация о ключе списка свойств , Примеры пакетов документов .

Пожалуйста, исправьте меня, если есть лучший / более эффективный способ сделать это, потому что у меня все еще есть некоторые сомнения (например: как я вижу, это должно также работатьдля обычных файлов, а не только для пакетов. Тогда зачем нам нужен способ LaunchServices? Является ли комплект приложений стандартным, а LaunchServices - тем, как его настраивает каждый пользователь?)

1 голос
/ 26 июня 2013

Я нашел, как сделать это вручную, что я перечислю здесь, чтобы другие могли его найти, и чтобы сделать это программно, вы можете объединить эту информацию с ответом по адресу: https://superuser.com/questions/273756/how-to-change-default-app-for-all-files-of-particular-file-type-through-terminal

У вас должен быть установлен XCode,Откройте Терминал или iTerm и:

cd ~/Library/Preferences
open com.apple.LaunchServices.plist

Добавьте или перезапишите следующую запись (используйте Cmd + F для поиска «папки»):

LSHandlerContentType String public.folder
LSHandlerRoleAll String com.somecompany.someproduct

Замените com.somecompany.someproduct насуществующее имя - вы можете увидеть их в одном каталоге (~/Library/Preferences) - они заканчиваются на .plist - например, com.macromates.textmate или com.sublimetext.2.

Альтернатива, если вы используете Quicksilver: добавьте пользовательский триггер клавиатурыдля «Текущий выбор (прокси-объект) -> Открыть с помощью -> Ваше приложение здесь».Я обнаружил, что это также создает (и энергично воссоздает) вышеуказанную связь всякий раз, когда вы используете только что созданное сочетание клавиш в папке в Finder.

...