Czasami pracuję z pakietami iTunes Music Store. Te pakiety mają .itmsp
rozszerzenie. Podobnie .app
, .itmsp
jest zasadniczo katalogiem kontenerowym. .itmsp
foldery zawierają pliki XML i pliki multimedialne.
Najnowsza aktualizacja Xcode i / lub Mac OS X (Xcode 4.6.1 w Mac OS 10.8.3) przejęła powiązanie typu pliku dla katalogów z .itmsp
rozszerzeniem. Wcześniej były traktowane jak normalne foldery - nie trzeba klikać dwukrotnie, aby zobaczyć wnętrze. Teraz muszę kliknąć je dwukrotnie, aby wejść z nimi w interakcję. Kiedy to robię, program o nazwie Application Loader próbuje je otworzyć. Aby zobaczyć wnętrze, muszę kliknąć prawym przyciskiem myszy i wybrać „Pokaż zawartość opakowania”. Mam do czynienia z tysiącami tych plików w danym momencie, więc to nie zadziała.
Próbowałem zmienić lub usunąć powiązanie typu pliku za pomocą Get Info i RCDefaultApp. Żadne nie działa. Usunięcie powiązania typu pliku po prostu zamienia .itmsp
katalogi w puste pliki. Podobnie jest z całkowitym usunięciem aplikacji Loader.app. W obu przypadkach nadal nie mogę przeglądać zawartości bez kliknięcia prawym przyciskiem myszy.
Poprzednio zaakceptowana odpowiedź działała przez chwilę: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/
przestała działać, odkąd zaktualizowałem Xcode i / lub Mac OS X. Jeśli masz zainstalowany Xcode, powinieneś być w stanie przetestować to sam, nazywając katalog foo.itmsp
.
Jak mogę to zrobić, aby .itmsp
pliki były ponownie traktowane jak foldery?
Odpowiedzi:
Problem: foldery .itmsp są wyświetlane jako pliki
Finder traktuje foldery .itmsp jak pakiety , to znaczy, jakby były pojedynczym plikiem. Na przykład w widoku kolumny wszystko zawarte w folderze .itmsp jest niewidoczne, wyświetlana jest tylko ikona dokumentu:
Finder uważa katalog za pakiet, jeśli spełniony jest jeden z poniższych warunków (z Przewodnika programowania pakietów ):
Katalog ma znane rozszerzenie nazwy pliku: .app, .bundle, .framework, .plugin, .kext itd. (Zgodnie z definicją w
/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
. To jest binarna lista, otwórz ją za pomocą Xcode:)open -a Xcode Info.plist
.Katalog ma rozszerzenie, które według niektórych innych aplikacji reprezentuje typ pakietu (poszukaj
com.apple.package
w danych wyjściowych,mdls -name kMDItemContentTypeTree <foldername>
aby się dowiedzieć).Katalog ma ustawiony bit pakietu (jeśli
GetFileInfo -ab <foldername>
zwraca1
, jest ustawiony).Przypadek 2. dotyczy folderów .itmsp:
Application Loader.app
typ eksportucom.apple.itunes-producer.itmsp
i ustawia zgodność zcom.apple.package
:Rozwiązanie: ponownie zadeklaruj typ
com.apple.itunes-producer.itmsp
Rozwiązaniem byłoby ponowne zadeklarowanie typu
com.apple.itunes-producer.itmsp
i rozszerzeniaitmsp
jako folderu i wymuszenie na usługach uruchamiania korzystania ze zmodyfikowanej deklaracji typu.Aby foldery .itmsp były wyświetlane przez Finder jako foldery, wykonaj następujące kroki:
Otwórz Automator w folderze Aplikacje i wybierz Aplikacja :
Wybierz Narzędzia z listy Biblioteka, wybierz Uruchom skrypt powłoki i przeciągnij go do panelu po prawej stronie:
Zamień domyślną zawartość skryptu na
exit 0
:Zapisz aplikację jako itmspOpener:
Zamknij Automator.
Wybierz
itmspOpener.app
i pokaż jego zawartość:Znajdź zawartość> Info.plist i otwórz go w swoim ulubionym edytorze:
Zamień te sekcje w
Info.plist
:Skojarz plik .itmsp z
itmspOpener
i naciśnij przycisk Change All...:Zresetuj bazę danych usług uruchamiania:
(w OS X 10.8
lsregister
znajduje się w/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
.)Utwórz folder .itmsp i wyświetl jego właściwości:
Ponieważ baza danych Launch Services została zresetowana, teraz Finder pokazuje foldery .itmsp jako foldery.
Otwórz,
itmspOpener.app
aby załadować plik plist i zarejestrowaćcom.apple.itunes-producer.itmsp
:Rozpocznij
Application Loader.app
:Folder
foo3.itmsp
powinien nadal być wyświetlany jako folder.Sprawdź ponownie właściwości folderu:
com.apple.package
nie został dodany do atrybutów metadanych folderu, dlatego Finder nadal wyświetla foldery .itmsp jako foldery!Zautomatyzowane rozwiązanie: wyświetlanie folderów .itmsp jako folderów po zalogowaniu
Aby wyświetlić foldery .itmsp jako foldery po zalogowaniu:
Utwórz
itmspOpener.app
i zmodyfikuj go,Info.plist
jak opisano powyżej.Utwórz za
/usr/local/bin/itmspTypeLoader
pomocą tej zawartości (zmiennaitmspOpener
wskazuje lokalizację, w której sięitmspOpener.app
znajduje, w razie potrzeby zmień):Zarówno
sleep 15
przed, jak i po biegulsregister
mają ogromne znaczenie. Jeśli nie widzisz pożądanego rezultatu, spróbuj różnych opóźnień.Utwórz
/usr/local/bin/itmspTypeLoaderLauncher
z tej zawartości:Ustaw oba skrypty jako pliki wykonywalne:
Ustaw
/usr/local/bin/itmspTypeLoaderLauncher
jako hak logowania :Uruchom ponownie, aby zmiany odniosły skutek. Po zalogowaniu powinieneś zobaczyć to:
i
lsregister -dump
powinny ujawnić, żeitmspOpener.app
„sUTExportedTypeDeclarations
ma pierwszeństwo przedApplication Loader.app
” s:Czy widzisz
inactive
flagę ustawioną w eksporcie typu Application Loader.app? Pokonaliśmy moduł ładujący aplikacje.Kwasowy test: foldery .itmsp nadal są wyświetlane jako takie po aktualizacji iTunes
Niedawno zaktualizowałem Xcode:
i może potwierdzić, że foldery .itmsp były wyświetlane jako foldery podczas aktualizacji:
a potem:
Częściowe rozwiązanie: pakiet wyświetli zawartość po dwukrotnym kliknięciu
Jak wspomniano wcześniej, procedura opisana powyżej nie będzie działać z dowolnymi folderami wyświetlanymi przez Finder jako pakiety.
Jeśli jednak chcesz po prostu kliknąć dwukrotnie pakiet, aby go otworzyć, możesz to zrobić za pomocą jednego
bash
skryptu i Automatora:Skrypt tworzy ukryty, tymczasowy folder w pakiecie, ujawnia go w Finderze (ujawniając pakiet jako folder), a następnie usuwa folder tymczasowy.
Automator łączy skrypt w aplikację, która zostanie powiązana z plikami pakietu.
Są to kroki, aby utworzyć taką aplikację. Wykorzystam pliki .itmsp jako przykład typu pakietu w poniższym objaśnieniu:
Otwórz Automator w folderze Aplikacje i wybierz Aplikacja :
Wybierz Narzędzia z listy Biblioteka, wybierz Uruchom skrypt powłoki i przeciągnij go do panelu po prawej stronie:
Zestaw Przełęcz wejście do jako argumenty :
Zastąp domyślną zawartość skryptu tym:
Zapisz aplikację jako itmspOpener:
Zamknij Automator.
Teraz masz aplikację, która może otwierać pliki .itmsp jako foldery, jeśli są z nią powiązane.
Istnieje problem kosmetyczny: na obecnym etapie skojarzone pliki będą miały standardową białą ikonę dokumentu:
Naprawmy to również:
Upewnij się, że Automator jest zamknięty.
Wybierz itmspOpener i pokaż jego zawartość:
Znajdź zawartość> Info.plist i otwórz go w swoim ulubionym edytorze:
Zamień wartość tego klucza w
CFBundleDocumentTypes
tablicy:i dodaj ten klucz:
Teraz sekcja wygląda następująco:
Przejdź do Findera, wybierz folder, naciśnij ⌘I, wybierz ikonę folderu w lewym górnym rogu i skopiuj za pomocą ⌘C:
Otwórz podgląd i wybierz Plik> Nowy ze schowka. Zapisz plik jako
folder.icns
:Skopiuj
folder.icns
doitmspOpener/Contents/Resources
:Skojarz plik .itmsp z
itmspOpener
i naciśnij przycisk Change All...:Ikona plików .itmsp powinna zmienić się w folder, a przynajmniej tak mi się wydawało: niestety tak nie było. Przeniosłem więc aplikację itmspOpener do innej lokalizacji (utworzyłem folder tymczasowy na moim pulpicie, przeniosłem go tam iz powrotem na pulpit). Odświeżono informacje o ikonie w Finderze:
Teraz kliknij dwukrotnie plik .itmsp i obejrzyj go jako folder:
źródło
.itmsp
folderze, jest niewidoczne. Nie potrafię wyjaśnić, dlaczego, ale tak jest. Dodatkowo, gdybym miał moje druty, nie musiałbyś dwukrotnie kliknąć pliku, aby zobaczyć wnętrze, ale no cóż.Jedną z opcji byłoby wyrejestrowanie
lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/
modułu ładującego aplikacje , ale jest on rejestrowany ponownie, jeśli zostanie otwarty, jeśli baza danych Launch Services zostanie przebudowana lub jeśli Xcode zostanie zaktualizowany.Można również komentować wpisy w słownikach CFBundleDocumentTypes i UTExportedTypeDeclarations w
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plist
i uruchamiać jelsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/
. Nie unieważnia podpisu kodu Xcode, ale zmiany mogą zostać zastąpione przez aktualizacje.Pełna ścieżka do lsregister znajduje się
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
w wersji 10.5 i nowszych.źródło
Info.plist
spowoduje wyrejestrowanie typów plików usuniętych z listy? Mogę sobie wyobrazić, że działa i łatwo mogę sobie wyobrazić, że nie działa. zbyt.lsregister -u $app && lsregister $app
wydaje się, że stosuje zmiany do Info.plist przynajmniej w tym przypadku.CFBundleDocumentTypes
więc możesz po prostu usunąć to „narzędzie”, gdy się pojawi, jeśli go nie potrzebujesz i / lub męcząca modyfikacja.Oto odpowiedni fragment dokumentacji Apple'a na temat pakietów ( wyróżnienie dodane )
Niemal na pewno Xcode twierdzi, że twierdzi, że
.itmsp
reprezentuje typ pakietu, jak opisano w Pakietach dokumentów . Może więc usunięcie tego rozszerzenia z Xcode załatwiInfo.plist
sprawę, ale podejrzewam, że po zauważeniu tego powiązania przez Findera usunięcie go z Xcode go nie cofnie. Jakie „polecane aplikacje” otrzymujesz po kliknięciu prawym przyciskiem myszy „Otwórz za pomocą ...”? Musisz sprawdzić wszystkie ich Info.plists.Sugeruję sprawdzenie, czy uda ci się
lsregister -u
wyrejestrować aplikacje, do których zgłoszono roszczenia.itmsp
. W przeciwnym razie może być konieczne usunięcie.itmsp
ze wszystkich list, a następnie zabicie całej bazy danych asocjacji przy użyciulsregister -kill -seed
. Nigdy tego nie robiłem, nie mówiąc o tym, ile szkód wyrządzi reszcie twojego systemu. Prawdopodobnie chcesz się wyrejestrować, a następnie edytować listy, a następnie zabić i ponownie uruchomić bazę danych. Nie zdziwiłbym mnie, gdyby wyrejestrowanie nie usunęło powiązania, jeśli zostało już usunięte z listy, a po zresetowaniu doda je ponownie, jeśli jeszcze go nie usunąłeś. Ponadto w ten sposób nie stracisz wszystkich innych skojarzeń dotyczących szkodliwych aplikacji.Co gorsza, Xcode mógł przejść i ustawić bit pakietu na wszystkich folderach. Myślę, że wtedy będziesz musiał napisać skrypt za pomocą
GetFileInfo
iSetFile
przeskanować dysk i cofnąć te, co jest trochę uciążliwe, ale wykonalne. Palce przecięte przez wiązki pozostają nierozbrojone. Użyj,GetFileInfo
aby sprawdzić, testując kilka.źródło
Wierzę, że możesz to naprawić za pomocą
/usr/bin/SetFile -a B /path/to/file.itmsp
Oczywiście przetestuj go na jednym, zanim wypróbujesz go na wszystkich pozostałych.
Jeśli potrzebujesz, aby uruchomić je wszystkie na danym folderze:
find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;
powinien to zrobić dla ciebie.
źródło
SetFile -a B
ustawia bit pakietu. W rzeczywistości, powinny być wyłączone:SetFile -a b
. Ale to nie zadziała, ponieważHas bundle
bit nie jest ustawiony:GetFileInfo -ab foo.itmsp
zwraca0
.