Jak sprawić, by OS X rozpoznał nowe rozszerzenia plików?

19

W Finder.app możesz nacisnąć przycisk, Enteraby edytować nazwę aktualnie wybranego pliku lub folderu.

OS X automatycznie wybierze tylko część nazwy pliku, a nie rozszerzenie:

Jest to bardzo przydatne, ponieważ w ten sposób możesz po prostu zacząć pisać nową nazwę, nie martwiąc się o przypadkową zmianę rozszerzenia pliku.

Jednak wydaje się, że działa to tylko w przypadku „znanych” typów plików. Jeśli spróbujesz z nieznanym rozszerzeniem, wybierana jest cała nazwa pliku (łącznie z rozszerzeniem):

Próbowałem mapować aplikację, która może otwierać wszystkie .barpliki za pomocą + I→ „Zmień wszystko”, ale nadal otrzymuję zachowanie opisane powyżej.

Gdzie przechowywana jest lista „znanych” typów plików? Czy istnieje sposób, aby OS X rozpoznał nowe typy plików?

Mathias Bynens
źródło

Odpowiedzi:

7

Ten post SuperUser działał dla mnie:

Musisz przejść do aplikacji, której chcesz użyć do otwarcia tych plików, i edytować jej pakiet. Kliknij aplikację prawym przyciskiem myszy, aby obsłużyć te rozszerzenia plików, i wybierz opcję Pokaż zawartość pakietu . Przejdź do Contentsi edytuj Info.plist. Może być potrzebny Edytor list właściwości , który jest częścią narzędzi programistycznych Apple. Jeśli masz szczęście, jest w formacie XML. Edytuj ten plik CFBundleDocumentTypesi dodaj wpis dla żądanego rozszerzenia.

Użyłem TextEdit jako domyślnej aplikacji do otwierania .barplików. Jedyną rzeczą, którą zrobiłem inaczej, była zmiana XML, który poszedł w TextEdit Info.plistna:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>bar</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>BarDocument</string>
        <key>CFBundleTypeName</key>
        <string>Bar Document</string>
        <key>CFBundleTypeRole</key>
        <string>Document</string>
    </dict>

… A następnie użyłem LSRefresh.app do odświeżenia TextEdit w bazie danych usług uruchamiania. Potem działało, jak sugerowałeś, chociaż prawdopodobnie złamie podpis kodu Textedit (i każdej innej podpisanej aplikacji) na Lionie.

binarybob
źródło
1
CFBundleTypeExtensionsjest starszym kluczem, który stał się przestarzały w OS X 10.5 . Preferowaną metodą od 2007 roku jest deklarowanie nowych UTI, jak wspomniano tutaj i opisano w mojej odpowiedzi .
TachyonVortex
6
Przepraszam, muszę to zagłosować, ponieważ jest to zła rada. Nie tylko niemądrze jest manipulowanie pakietem aplikacji (ryzykując dziwnymi efektami ubocznymi lub gorzej), ale może również całkowicie zniszczyć kopię aplikacji. Należy zauważyć, że ten proces unieważnia podpis kodu, ale nie zwraca uwagi, że w wersjach macOS obsługujących piaskownicę (10.7+) aplikacja piaskownicy z nieprawidłowym podpisem nie może być uruchomiona ani używana w jakikolwiek sposób.
Bob
1
@ binarybob, czego nie rozumiem, dlaczego po prostu nie klikniesz prawym przyciskiem myszy pliku xxx.bari nie wybierzesz open with?
Pacerier
@ Bob, Co to jest standboxing aplikacji?
Pacerier,
@Pacerier App Sandboxing jest zabezpieczenie MacOS, który całkowicie izoluje aplikacje z systemu i siebie nawzajem, z bardzo krótkiej liście „uprawnień”, które szczegóły co konkretnie aplikacje wolno robić. Ta lista uprawnień jest osadzona w podpisie kodu i sprawdzana przy każdym uruchomieniu aplikacji, zapewniając, że możliwości aplikacji nie zostaną naruszone, ani przez przypadek, ani przez atak. Zobacz ten dokument dla wyjaśnienia technicznego.
Bob
28

UTI i usługi uruchamiania

Gdzie przechowywana jest lista „znanych” typów plików?

Oficjalny termin „typy plików” to Uniform Type Identifiers (UTI), a baza danych UTI jest prowadzona przez Launch Services .

Za pomocą terminalu możesz przeglądać zawartość bazy danych Launch Services za pomocą lsregisternarzędzia, które jest przechowywane w:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister

Zamiast określać tę długą ścieżkę za każdym razem, gdy chcesz uruchomić lsregister, możesz tymczasowo dodać jej katalog do PATH:

PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"

a następnie możesz uruchomić lsregister, wpisując:

lsregister

Aby wyświetlić zawartość bazy danych Launch Services:

lsregister -dump

Deklarowanie nowych UTI

Czy istnieje sposób, aby OS X rozpoznał nowe typy plików?

W tym artykule Apple „Deklarowanie nowych jednolitych identyfikatorów typów” podano przydatne informacje, jak to zrobić. Oto kompletny proces:

1. Utwórz aplikację zastępczą

Utwórz aplikację zastępczą, aby zarejestrować się w Launch Services:

  • Otwórz AppleScript Editor (znajduje się w folderze Narzędzia OS X ).
  • Zapisz gdzieś nowy pusty skrypt (np. Na pulpicie), ustawiając jego format pliku na Application .

2. Otwórz plik Info.plist

  • Znajdź swoją nową aplikację pozorną w Finderze.
  • Kliknij go prawym przyciskiem myszy i wybierz opcję Pokaż zawartość opakowania z menu podręcznego.
  • Otwórz folder Contents .
  • Otwórz plik Info.plist w edytorze tekstu (np .: TextEdit ).

3. Dodaj nową UTI

Do wyboru są dwa klucze:

  • UTExportedTypeDeclarations - dla własnych niestandardowych rozszerzeń plików.
  • UTImportedTypeDeclarations - dla rozszerzeń plików, które już istnieją, ale nie są rozpoznawane przez OS X.

Wybierz klucz, który najlepiej odpowiada Twoim potrzebom.

Następnie w pliku Info.plist , przed ostatnimi dwoma liniami ( </dict></plist>), dodaj ten kod:

<key>KEY</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>IDENTIFIER</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>EXTENSION</string>
            </array>
        </dict>
    </dict>
</array>

wprowadzanie następujących zmian:

  • Zamień KEYna wybrany klucz (albo UTExportedTypeDeclarationslub UTImportedTypeDeclarations).
  • Zamień IDENTIFIERna odpowiedni identyfikator odwrotnego DNS:
    • Wyeksportowane - coś podobnego com.mycompany.mytype
    • Importowane - dla id Software „s Doom WAD formacie, odpowiedni identyfikator byłobycom.idsoftware.wad
  • Zamień EXTENSIONna rozszerzenie nazwy pliku (bez kropki), np wad. : .

Jest to minimalny kod niezbędny do uruchomienia nowych usług UTI przez usługi uruchamiania. Możesz także dodać następujące opcjonalne właściwości:

  • UTTypeConformsTo - Zobacz załącznik poniżej.
  • UTTypeDescription - Widoczny dla użytkownika opis, który zostanie wyświetlony w Finderze.
  • UTTypeIconFile- Jeśli dodasz plik Apple Icon Image do folderu Contents / Resources w aplikacji fikcyjnej i dodasz jego nazwę pliku do tej właściwości, pliki z nowym rozszerzeniem nazwy pliku będą używać tej ikony.
  • UTTypeReferenceURL - Adres URL dokumentu referencyjnego opisującego ten typ.

Oto kompletny przykład pokazujący wszystkie opcjonalne właściwości:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.idsoftware.wad</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>wad</string>
            </array>
        </dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Doom WAD file</string>
        <key>UTTypeIconFile</key>
        <string>DoomWAD.icns</string>
        <key>UTTypeReferenceURL</key>
        <string>http://en.wikipedia.org/wiki/Doom_WAD</string>
    </dict>
</array>

4. Zarejestruj nowe UTI w Launch Services

Uruchom to polecenie w terminalu:

lsregister <PATH_TO_APP>

zamieniając <PATH_TO_APP>na ścieżkę do aplikacji zastępczej, np .:

lsregister ~/Desktop/MyDummyApp.app

Jeśli teraz utworzysz plik z nowym rozszerzeniem nazwy pliku, a następnie wybierzesz go w Finderze i naciśniesz Enter, Finder powinien automatycznie wybrać tylko część nazwy pliku, a nie rozszerzenie.

Jeśli przeglądasz zawartość bazy danych Launch Services:

lsregister -dump

powinieneś znaleźć swoje nowe UTI na liście:

type    id:            50364
        bindableKey:   12608
        generation:    1
        uti:           com.idsoftware.wad
        description:   Doom WAD file
        flags:         imported  active  apple-internal  untrusted
        icon:          DoomWAD.icns
        conforms to:   public.data
        tags:          .wad

Jeśli później chcesz wyrejestrować nowy interfejs użytkownika, przekaż -uopcję lsregister:

lsregister -u ~/Desktop/MyDummyApp.app

Dodatek: Hierarchia i zgodność UTI

OS X deklaruje hierarchię UTI wymienionych tutaj: Deklarowane przez system jednolite identyfikatory typu .

Oto kilka interfejsów użytkownika w hierarchii:

  • public.content
    • public.text
      • public.rtf
      • public.html
      • public.xml
      • public.plain-text
      • public.source-code
        • public.c-source
        • public.c-header
        • com.sun.java-source
    • public.image
      • public.jpeg
      • public.tiff
      • public.png
    • public.audiovisual-content
      • public.movie
      • public.audio

Każde UTI „odpowiada” jego macierzystemu UTI:

Na przykład, UTI public.html, który definiuje tekst HTML, jest zgodny z identyfikatorem tekstu bazowego public.text. W takim przypadku zgodność pozwala aplikacjom, które potrafią otwierać ogólne pliki tekstowe, identyfikować pliki HTML jako te, które można również otworzyć. ( ref )

Podczas tworzenia nowego interfejsu użytkownika dobrym pomysłem jest ustawienie tej UTTypeConformsTowłaściwości na jedną z istniejących interfejsów użytkownika.

Na przykład, jeśli nowy UTI jest rodzajem kodu źródłowego, a następnie należy ustawić UTTypeConformsTowłaściwość public.source-code, dzięki czemu można go otworzyć za pomocą wszelkich aplikacji, które można otwierać public.source-codelub public.plain-textlub public.textplików.

TachyonVortex
źródło
Czy istnieje sposób na określenie edytora powiązanego z rozszerzeniem pliku?
gr4nt3d
0

Wykonaj następujące kroki:

  1. Wybierz plik z nierozpoznanym rozszerzeniem (powiedzmy .txt).

  2. Kliknij prawym przyciskiem myszy i wybierz Get Infolub użyj skrótu klawiaturowego, Commandiaby wyświetlić okno informacyjne.

  3. Kliknij wskaźnik ujawnienia oprócz Otwórz za pomocą:, aby otworzyć widok szczegółowy. Wybierz żądaną aplikację z menu rozwijanego. Spowoduje to powiązanie dokumentu z wybraną aplikacją (np. TextEdit).

  4. Kliknij na ... zmień Wszystkie przycisku. Najpierw wyświetli się okno dialogowe z prośbą o potwierdzenie zamiaru i połączy wszystkie .txtdokumenty, które mają zostać otwarte za pomocą TextEdit, a rozszerzenie pozostawi niezaznaczone po naciśnięciu klawisza return na nazwie dokumentu.

użytkownik3127882
źródło