Jak ustawić ikonę typu pliku na komputerze Mac?

42

Jak ustawić ikonę dla niektórych typów plików, pomyślał cały system?

Na przykład mam pliki tekstowe, które kończą się rozszerzeniem .scala i chcę skojarzyć ikonę dla tych plików przez cały system i dla każdego nowo utworzonego pliku tego rozszerzenia.

Dzięki.

Chiron
źródło
Właśnie zauważyłem, że jesteś MAC ... ale w każdym razie w systemie Windows zmieniłbyś domyślną aplikację powiązaną z tym typem pliku. Plik następnie przyjmuje ikonę tej aplikacji.
MrWhite
12
@ w3d: Nie ma go na Macu, jest na Macu.
Wuffers

Odpowiedzi:

41

Ikony typów plików są obsługiwane przez usługi uruchamiania (usługa określająca między innymi, która aplikacja obsługuje typ pliku). Ikona pliku jest zawsze dostarczana przez obsługę aplikacji domyślnie otwierającą plik. W ten sposób np. Preview udostępnia domyślnie ikony PDF i ikony PNG, ale jeśli zmienisz wszystkie pliki PNG, aby otworzyć je za pomocą Pixelmator, pliki te otrzymają później ikonę w stylu Pixelmator.

To, co musisz zrobić, to dodać definicję typu pliku do aplikacji, która ją domyślnie otwiera, lub utworzyć własną „obojętną” aplikację dla tego typu pliku .


Na przykład mój system jeszcze nie wie .scalai chcę TextMatesobie z tym poradzić.

Najpierw Pokaż Zawartość opakowania z TextMate.appprzejdź do Contents/i otwarte Info.plist, albo za pomocą edytora tekstu, lub Property List Editor, część narzędzi Apple'a deweloperskich.

TextMate używa nietypowego formatu Info.plist(zazwyczaj binarnego lub XML), którego fragment wygląda następująco:

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },

Klucz nadrzędny CFBundleDocumentTypesjest tym, czego chcemy. Pierwszy element potomny, zawarty w nawiasach klamrowych, zawiera definicję typu pliku wraz z nazwą (dla kolumny typu pliku w Finderze), rozszerzeniami plików i nazwą pliku ikony ( ADAdla TextMate.app/Contents/Resources/ADA.icns).

Aby wesprzeć .scala, musimy dodać element siostrzany podobny do powyższego, w ramach tego samego elementu nadrzędnego CFBundleDocumentTypes:

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },
    {   CFBundleTypeName = "Scala source";
        CFBundleTypeExtensions = (scala); 
        CFBundleTypeIconFile = ADA; 
    },

Dla uproszczenia używam tego samego pliku ikon, ale możemy go sami stworzyć, skopiować go TextMate.app/Contents/Resources/SCALA.icnsi odwołać się do niego jak SCALAw Info.plist.

Teraz zamknij TextMate, jeśli jest uruchomiony, przenieś aplikację TextMate.appdo innego folderu i otwórz go ponownie. Zamknij i przesuń z powrotem, a następnie otwórz ponownie. Dokonuje się tego, więc usługi uruchamiania wychwytują zmiany, Info.plistktóre właśnie wykonaliśmy.

Wynik wygląda następująco (pamiętaj, że ponownie użyliśmy ikony TextMate Ada .scala):

alternatywny tekst

Jeśli nie chcesz kojarzyć aplikacji z otwartymi .scalaplikami (nie wyobrażasz sobie, dlaczego, ale jest na to sposób): Zmień dodatki do pliku na następujące:

    {   CFBundleTypeName = "Scala source";
        CFBundleTypeExtensions = (scala); 
        CFBundleTypeIconFile = ADA; 
        CFBundleTypeRole = "None";
    },

Teraz aplikacja deklaruje typ pliku, ale informuje system, że nie wie, jak sobie z tym poradzić (Apple podaje przykład Findera deklarującego typy czcionek, chociaż sam nie może ich otworzyć).

* Uwaga: każde trwałe przypisanie aplikacji do typu pliku zastępuje ikonę, prawdopodobnie do rodzaju „nieznanego dokumentu”.


Jeśli masz już powiązaną aplikację .scalai po prostu chcesz zmienić ikonę pliku bez zmiany powiązanej aplikacji:

Otwórz aplikację Info.plist, poszukaj wpisu typu pliku CFBundleDocumentTypesi pobierz CFBundleTypeIconFile. Zmodyfikuj ten plik, .../Contents/Resources/a wkrótce potem powinien zostać odzwierciedlony w Finderze.


Informacje o bonusie:

Jak zmienić ikonę pojedynczego dokumentu lub folderu na plik obrazu

Załóżmy, że masz obraz, ~/Desktop/test.pngktórego chcesz użyć ikony (to zrzut ekranu użyty powyżej, aby zilustrować .scalazmianę ikony / TextMate / Ada.

Otwórz /Applications/Utilities/Terminal.appi wprowadź:

sips -i ~/Desktop/test.png

Spowoduje to zmianę test.pngikony pliku na obraz. Ponieważ lubię rekurencję, spróbujmy tego:

Wcześniej zwykła pngikona podglądu (podgląd obrazu jest wyłączony):

alternatywny tekst

Następnie sam plik obrazu jest jego podglądem:

alternatywny tekst

Teraz możemy otworzyć okno dialogowe Pobierz informacje o pliku , kliknąć żądaną ikonę przyszłego dokumentu w lewym górnym rogu, Cmd-Caby ją skopiować, otworzyć okno dialogowe Pobierz informacje o pliku , kliknąć niepożądaną, bieżącą ikonę dokumentu w lewym górnym rogu i Cmd-Vwkleić ikona, którą chcemy.


Alternatywnie możesz otworzyć plik obrazu, którego chcesz użyć jako ikony w Podglądzie, Cmd-Aaby wybrać wszystko, Cmd-Caby skopiować obraz do schowka. Następnie otwórz okno dialogowe Uzyskaj informacje w dokumencie docelowym , wybierz ikonę, którą chcesz zmienić w lewym górnym rogu, i Cmd-Vwklej nad nią obraz.

Daniel Beck
źródło
2
Jedną rzecz do zweryfikowania: czy to unieważnia podpis cyfrowy aplikacji? codesign --verify --verbose /Applications/TextMate.applub coś podobnego. W przypadku unieważnienia nie rób tego w przypadku aplikacji, które wymagają wyjątków w zaporze ogniowej lub potrzebują pęku kluczy. Nie jestem pewien, co jeszcze może pójść nie tak, jeśli zadzieramy z podpisem. (+1 za szczegół!)
Arjan,
1
Edytuj BAH, przejrzałem pierwszy raz i nie widziałem twojej alternatywnej metody wymuszania aktualizacji LS. meh, FWIW: Tylko jedna rzecz po zmianie aplikacji Info.plist (lub dowolnego pakietu / pakietu): prawdopodobnie będziesz potrzebować touchpoziomu głównego pakietu, aby zaktualizować datę modyfikacji. Następnie w Finderze usuń zaznaczenie i ponownie wybierz aplikację / pakiet / pakiet, a gdy zauważy, że data modyfikacji jest późniejsza niż data pamięci podręcznej w bazie danych Launch Services, ponownie ją zarejestruje, rozpoznając w ten sposób wszelkie zmiany zrobiłeś.
NSGod
1
@Arjan Masz rację. Niestety TextMate.app: code object is not signedi nie chcę przez to przechodzić ponownie. Podejrzewam, że to prawdziwy problem, nie myślałem o tym. Edycja : Z drugiej strony przechowywane są również niestandardowe skróty klawiaturowe Info.plist. Więc to może nie być problem, jeśli tak nie jest. Jedynym problemem może być dodanie dodatkowego pliku ikony w pakiecie aplikacji.
Daniel Beck
1
Użyłem dokładnie tej samej metody (chociaż wprowadzałem zmiany w xml Info.plist Sublime Text). W rezultacie skojarzenie pliku działało, ale nie zmieniło to ikony powiązanego pliku. Masz pomysł, dlaczego to nie zadziała?
gfrigon
2
Trochę późno na imprezę, ale muszę się zgodzić z @Arjan. Jeśli masz aplikację podpisaną kodem, na przykład powiedzmy, och, nie wiem, ... Xcode ... w rzeczywistości powie ci, że aplikacja jest uszkodzona i usuniesz ją i ponownie pobierz z App Store. To, co naprawdę mi się nie podoba, to sposób, w jaki aplikacje takie jak Enthought Canopy przechwytują wszystkie ikony rozszerzeń dla siebie. Apple naprawdę powinno mieć to, że po ustawieniu domyślnego edytora dla typu pliku, system wchodzi i wprowadza wszystkie niezbędne zmiany w rzeczach takich jak powiązanie aplikacji.
AMR
1

Musisz zastąpić plik ICNS w programie, który jest przypisany jako program domyślny dla określonego typu pliku.

1 - Utwórz obraz dla żądanej ikony, a następnie zapisz jako typ pliku png (png obsługuje przezroczystość).

2 - Konwertuj plik png na typ pliku icns (FastIcns jest całkiem świetny i darmowy).

3 - Kliknij CMD lub kliknij prawym przyciskiem aplikację, która jest ustawiona jako domyślna aplikacja dla określonego rodzaju pliku, a następnie wybierz opcję pokaż zawartość pakietu.

4 - Poszukaj pliku icns, który aplikacja określa jako ikonę określonego typu pliku, prawdopodobnie znajdzie się on w folderze o nazwie Zasoby.

5 - Nazwij utworzony plik icns, dokładnie taką samą nazwę, jak plik, który chcesz zastąpić.

6 - Skopiuj i wklej lub przeciągnij i upuść nowy plik icns, który utworzyłeś, do folderu, w którym znajduje się ten, który chcesz zastąpić, i wybierz opcję zamień, gdy pojawi się opcja.

7 - Gotowe! Wszystkie ikony dla tego typu plików zostały zastąpione nową, pożądaną ikoną.

daporterfizzle
źródło
Która wersja OSX odpowiada tej odpowiedzi ... tylko po to, by oznaczyć ją czasem, gdy metoda nieuchronnie się zmieni.
JoshP,
0

Zawsze podchodzę do tego, szukając pliku z tym rozszerzeniem, klikając prawym przyciskiem myszy »Uzyskaj informacje lub Command-i, a to wyświetli Panel informacyjny. U góry widoczna jest ikona aktualnie używana dla obrazu. Możesz przeciągnąć plik obrazu na ten, aby go zmienić, lub jeśli skopiowałeś obraz, możesz kliknąć obraz, który chcesz zmienić, i wkleić, aby go zmienić.

jakehschwartz
źródło
Zobacz także obraz na stronie Jak mogę zmienić ikonę aplikacji w Mac OS X? i pamiętaj, że każdy obraz, który można otworzyć w podglądzie, może być używany jako ikona, otwierając go w podglądzie, wybierając i kopiując za pomocą Command-C. Spowoduje to umieszczenie obrazu w schowku, który zawiera również format do użycia jako ikona. Następnie wybierz istniejącą ikonę i wklej schowek za pomocą Command-V.
Arjan,
3
To nie działa Kiedy przeciągam plik .PNG do obrazu na ekranie informacyjnym, dostaję ikonę PNG zamiast obrazu w PNG. I zmienia określony plik, a nie wszystkie pliki z tym samym rozszerzeniem w całym systemie.
Eran Kampf