Ассоциация файлов приложений MacOS - PullRequest
0 голосов
/ 05 марта 2019

Я уже некоторое время пытаюсь проанализировать информацию, и у меня возникают проблемы с определением того, что все еще актуально.Также кажется, что по какой-то причине информации по этому вопросу меньше, чем должно быть.

Я работаю над приложением, которое распространяется для macOS.Я хотел бы связать пользовательское расширение файла с моим приложением.Я хотел бы, чтобы пользователь мог дважды щелкнуть один из файлов и открыть его приложению.Мне достаточно легко выбрать приложение для открытия файлов, но я не могу понять, как получить имя файла для открытого файла.

Единственное, что я до сих пор нашел, - это создание приложения из AppleScript.Затем AppleScript может анализировать аргументы и вызывать основное приложение с ними.У меня есть две проблемы с этим подходом.

Во-первых, что произойдет, если пользователь изменит его и выберет приложение напрямую?Я предполагал, что это просто не будет работать?Есть ли способ обойти это?

Во-вторых, как мне связать приложение автоматически в первую очередь?Я нашел информацию о CFBundleTypeExtensions, но потом обнаружил, что она устарела.Я нашел некоторую информацию о UTI и Launch Services.Имеет смысл добавить UTI в файл plist и запустить команду lsregister.Как бы вы сделали это автоматически, хотя?Пользователь устанавливает приложение с помощью dmg. В какой момент я могу запустить команду lsregister?

1 Ответ

0 голосов
/ 05 марта 2019

Добавьте что-то вроде следующего к вашему Info.plist.Он сообщит macOS, что ваше приложение обрабатывает файлы .foo и .bar.

<key>CFBundleDocumentTypes</key>
<array>
<dict>
    <key>CFBundleTypeRole</key>
        <string>Viewer</string>
    <key>CFBundleTypeExtensions</key>
    <array>
        <string>foo</string>
        <string>bar</string>
    </array>
    <key>CFBundleTypeIconFile</key>
        <string>FileIcons.icns</string>
    <key>CFBundleTypeMIMETypes</key>
        <string>application/octet-stream</string>
    <key>CFBundleTypeName</key>
        <string>Something Unique Here</string>
    <key>CFBundleTypeOSTypes</key>
    <array>
        <string>****</string>
    </array>
</dict>
</array>

FileIcons.icns должны содержать файлы значков для зарегистрированных файлов.Если вы не хотите создавать значки файлов, вы можете оставить эту строку пустой:

<key>CFBundleTypeIconFile</key>
    <string></string>

CFBundleTypeMIMETypes имеет значение application/octet-stream выше.Это тип MIME для общих двоичных данных.Если файлы действительно имеют надлежащие типы MIME, используйте их.

Когда macOS увидит ваше приложение (например, при его загрузке), оно автоматически узнает, что нужно открыть .foo и .bar.Вам не нужно запускать что-либо внешнее.

Наконец, ваше приложение будет запущено macOS, когда пользователь дважды щелкнет файл .foo или .bar, и он получит «открытый файл»событие.Вы должны справиться с этим.То, как вы это сделаете, зависит от того, какую среду / язык вы используете для разработки своего приложения.

...