Przywróć skojarzenie rodzaju pliku

12

Czasami pracuję z pakietami iTunes Music Store. Te pakiety mają .itmsprozszerzenie. Podobnie .app, .itmspjest zasadniczo katalogiem kontenerowym. .itmspfoldery 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 .itmsprozszerzeniem. 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 .itmspkatalogi 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 .itmsppliki były ponownie traktowane jak foldery?

michaelmichael
źródło
Czy próbowałeś przeciągnąć i upuścić plik na ikonie aplikacji Xcode i sprawdzić, czy robi to, co chcesz?
MrDaniel
Dzieki za sugestie. Nie ma to związku z omawianym problemem, dlatego spróbuję edytować moje pytanie, aby wyjaśnić moją intencję.
michaelmichael
1
Z jakiej wersji OS X korzystasz? Jaka wersja Xcode?
Old Pro
Usunąłem moją odpowiedź, która usunęła typy z CFBundleDocumentTypes i zabiłem w bazie danych usługi uruchamiania. Działa przez chwilę, ale wydaje się, że w pewnym momencie później ponownie się uspokaja.
markhunte

Odpowiedzi:

11

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:

wprowadź opis zdjęcia tutaj

Finder uważa katalog za pakiet, jeśli spełniony jest jeden z poniższych warunków (z Przewodnika programowania pakietów ):

  1. 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.

  2. Katalog ma rozszerzenie, które według niektórych innych aplikacji reprezentuje typ pakietu (poszukaj com.apple.packagew danych wyjściowych, mdls -name kMDItemContentTypeTree <foldername>aby się dowiedzieć).

  3. Katalog ma ustawiony bit pakietu (jeśli GetFileInfo -ab <foldername>zwraca 1, jest ustawiony).

Przypadek 2. dotyczy folderów .itmsp: Application Loader.apptyp eksportu com.apple.itunes-producer.itmspi ustawia zgodność z com.apple.package:

$ mkdir foo.itmsp
$ mdls -name kMDItemContentTypeTree foo.itmsp/
kMDItemContentTypeTree = (
    "com.apple.itunes-producer.itmsp",
    "com.apple.package",
    (...)
)
$ grep -B 5 -A 8 com.apple.package /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Info.plist 
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>com.apple.package</string>
                <string>public.composite-content</string>
            </array>
            <key>UTTypeDescription</key>
            <string>iTunes Package</string>
            <key>UTTypeIconFile</key>
            <string>ITMSP.icns</string>
            <key>UTTypeIdentifier</key>
            <string>com.apple.itunes-producer.itmsp</string>

Rozwiązanie: ponownie zadeklaruj typ com.apple.itunes-producer.itmsp

Rozwiązaniem byłoby ponowne zadeklarowanie typu com.apple.itunes-producer.itmspi rozszerzenia itmspjako folderu i wymuszenie na usługach uruchamiania korzystania ze zmodyfikowanej deklaracji typu.

Ważna uwaga:

Chociaż niezawodnie rozwiązuje problem PO, proponowane rozwiązanie zastosowane do innych pakietów nie wyświetla ich jako folderów.

Przekonałem się, że proponowane rozwiązanie wydaje się działać tylko z typami plików zadeklarowanymi przez aplikacje znajdujące się w niestandardowej ścieżce aplikacji.

Tak jest w przypadku Application Loader.app, który znajduje się w /Applications/Xcode.app/Contents/Applications/.

Jeśli jesteś zainteresowany częściowym rozwiązaniem, sprawdź koniec tej odpowiedzi.

Aby foldery .itmsp były wyświetlane przez Finder jako foldery, wykonaj następujące kroki:

  1. Otwórz Automator w folderze Aplikacje i wybierz Aplikacja :

    wprowadź opis zdjęcia tutaj

  2. Wybierz Narzędzia z listy Biblioteka, wybierz Uruchom skrypt powłoki i przeciągnij go do panelu po prawej stronie:

    wprowadź opis zdjęcia tutaj

  3. Zamień domyślną zawartość skryptu na exit 0:

    wprowadź opis zdjęcia tutaj

  4. Zapisz aplikację jako itmspOpener:

    wprowadź opis zdjęcia tutaj

  5. Zamknij Automator.

  6. Wybierz itmspOpener.appi pokaż jego zawartość:

    wprowadź opis zdjęcia tutaj

  7. Znajdź zawartość> Info.plist i otwórz go w swoim ulubionym edytorze:

    wprowadź opis zdjęcia tutaj

  8. Zamień te sekcje w Info.plist:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>itmsp</string>
            </array>
            <key>CFBundleTypeName</key>
                <string>itmsp folder</string>
            <key>CFBundleTypeRole</key>
                <string>Viewer</string>
            <key>CFBundleTypeIconFile</key>
                <string>folder</string>
            <key>LSTypeIsPackage</key>
                <false/>
            <key>LSHandlerRank</key>
                <string>Owner</string>
        </dict>
    </array>
    (...)
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>kUTTypeDirectory</string>
            </array>
            <key>UTTypeDescription</key>
            <string>itmsp folder</string>
            <key>UTTypeIconFile</key>
            <string>folder.icns</string>
            <key>UTTypeIdentifier</key>
            <string>com.apple.itunes-producer.itmsp</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <string>itmsp</string>
            </dict>
        </dict>
    </array>
    

    Uwaga: Dlaczego kUTTypeDirectoryzamiast public.directoryw UTExportedTypeDeclarations? Z dokumentacji Apple'a : Ważne: W przypadku korzystania ze zdefiniowanych w systemie interfejsów użytkownika w kodzie należy używać stałych zdefiniowanych w UTCoreTypes.hramach usług uruchamiania, jeśli są one dostępne, zamiast rzeczywistych ciągów interfejsu użytkownika. Na przykład przekaż kUTTypeApplication zamiast „com.apple.application”. „Deklarowane przez system jednolite identyfikatory typu” wymienia te stałe oprócz ciągów UTI.

  9. Skojarz plik .itmsp z itmspOpeneri naciśnij przycisk Change All...:

    wprowadź opis zdjęcia tutaj

  10. Zresetuj bazę danych usług uruchamiania:

    $ lsregister -kill -r -domain local -domain system -domain user
    

    (w OS X 10.8 lsregisterznajduje się w /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/.)

  11. Utwórz folder .itmsp i wyświetl jego właściwości:

    $ mkdir foo3.itmsp
    $ mdls -name kMDItemContentTypeTree foo3.itmsp/
    kMDItemContentTypeTree = (
        "public.folder",
        "public.directory",
        "public.item"
    )
    

    Ponieważ baza danych Launch Services została zresetowana, teraz Finder pokazuje foldery .itmsp jako foldery.

  12. Otwórz, itmspOpener.appaby załadować plik plist i zarejestrować com.apple.itunes-producer.itmsp:

    $ open ~/Desktop/itmspOpener.app
    
  13. Rozpocznij Application Loader.app:

    $ open '/Applications/Xcode.app/Contents/Applications/Application Loader.app'
    

    Folder foo3.itmsppowinien nadal być wyświetlany jako folder.

  14. Sprawdź ponownie właściwości folderu:

    $ mdls -name kMDItemContentTypeTree foo3.itmsp/
    kMDItemContentTypeTree = (
        "public.directory",
        "public.item",
        "public.content"
    )
    

    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:

  1. Utwórz itmspOpener.appi zmodyfikuj go, Info.plistjak opisano powyżej.

  2. Utwórz za /usr/local/bin/itmspTypeLoaderpomocą tej zawartości (zmienna itmspOpenerwskazuje lokalizację, w której się itmspOpener.appznajduje, w razie potrzeby zmień):

    #!/bin/bash
    
    itmspOpener="/Users/jaume/Applications/itmspOpener.app/"
    
    echo "$(date): Starting" > /tmp/itmspTypeLoader.log
    sleep 15
    echo "$(date): Deleting Launch Services database" >> /tmp/itmspTypeLoader.log
    /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user >> /tmp/itmspTypeLoader.log
    sleep 15
    echo "$(date): Starting $itmspOpener" >> /tmp/itmspTypeLoader.log
    open $itmspOpener >> /tmp/itmspTypeLoader.log
    sleep 1
    echo "$(date): Starting Application Loader.app" >> /tmp/itmspTypeLoader.log
    open "/Applications/Xcode.app/Contents/Applications/Application Loader.app/"
    
    # Wait until process "Application Loader.app" exists
    while [ $(ps -ef|grep -v grep|grep -c "Application Loader") -ne 1 ]; do
        sleep 1
        echo "$(date): Waiting" >> /tmp/itmspTypeLoader.log
    done
    # Send TERM signal
    kill -TERM $(ps -ef|grep "Application Loader"|grep -v grep|awk "{print \$2}")
    if [ $? -eq 0 ]; then
        echo "$(date): Application Loader killed" >> /tmp/itmspTypeLoader.log
    else
        echo "$(date): Application Loader could not be killed" >> /tmp/itmspTypeLoader.log
    fi
    echo "$(date): Exiting" >> /tmp/itmspTypeLoader.log
    

    Zarówno sleep 15przed, jak i po biegu lsregistermają ogromne znaczenie. Jeśli nie widzisz pożądanego rezultatu, spróbuj różnych opóźnień.

  3. Utwórz /usr/local/bin/itmspTypeLoaderLauncherz tej zawartości:

    #!/bin/bash
    
    # $1 returns the short name of the user who is logging in
    su - $1 -c /usr/local/bin/itmspTypeLoader &
    
  4. Ustaw oba skrypty jako pliki wykonywalne:

    $ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher 
    
  5. Ustaw /usr/local/bin/itmspTypeLoaderLauncherjako hak logowania :

    $ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
    
  6. Uruchom ponownie, aby zmiany odniosły skutek. Po zalogowaniu powinieneś zobaczyć to:

    wprowadź opis zdjęcia tutaj

    i lsregister -dumppowinny ujawnić, że itmspOpener.app„s UTExportedTypeDeclarationsma pierwszeństwo przed Application Loader.app” s:

    $ lsregister -dump | less
    bundle  id:            24748
            path:          /Users/jaume/Desktop/itmspOpener.app/
            name:          itmspOpener
            (...)
            flags:         apple-internal  relative-icon-path  ui-element  has-min-sys-version-by-arch  hi-res-capable  user-can-change-hi-res-mode  
            item flags:    container  package  application  extension-hidden  native-app  scriptable  services  x86_64  
            (...)
            --------------------------------------------------------
            type    id:            33796
                    uti:           com.apple.itunes-producer.itmsp
                    description:   itmsp folder
                    flags:         exported  active  apple-internal  trusted  
                    icon:          Contents/Resources/folder.icns
                    conforms to:   kuttypedirectory
                    tags:          .itmsp
            --------------------------------------------------------
            (...)
    bundle  id:            24600
            path:          /Applications/Xcode.app/Contents/Applications/Application Loader.app/
            name:          Application Loader
            (...)
            flags:         apple-internal  relative-icon-path  hi-res-capable  user-can-change-hi-res-mode  
            item flags:    container  package  application  extension-hidden  native-app  i386  x86_64  
            (...)
            --------------------------------------------------------
            type    id:            33832
                    uti:           com.apple.itunes-producer.itmsp
                    description:   iTunes Package
                    flags:         exported  inactive  apple-internal  trusted  
                    icon:          Contents/Resources/ITMSP.icns
                    conforms to:   com.apple.package, public.composite-content
                    tags:          .itmsp
            --------------------------------------------------------
    

    Czy widzisz inactiveflagę 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:

wprowadź opis zdjęcia tutaj

i może potwierdzić, że foldery .itmsp były wyświetlane jako foldery podczas aktualizacji:

wprowadź opis zdjęcia tutaj

a potem:

wprowadź opis zdjęcia tutaj

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 bashskryptu i Automatora:

  • Skrypt tworzy ukryty, tymczasowy folder w pakiecie, ujawnia go w Finderze (ujawniając pakiet jako folder), a następnie usuwa folder tymczasowy.

    Uwaga:

    Zamiast tego skrypt może utworzyć ukryty plik tymczasowy. Jednak wolę utworzyć folder, ponieważ rmdirusuwa tylko puste foldery, a jednocześnie rmusuwa dowolny plik, więc jeśli z jakiegoś powodu. skrypt sieje spustoszenie, tylko puste foldery zostaną usunięte, co prawdopodobnie nie jest tak złe, jak gdyby pliki zostały usunięte.

  • 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:

  1. Otwórz Automator w folderze Aplikacje i wybierz Aplikacja :

    wprowadź opis zdjęcia tutaj

  2. Wybierz Narzędzia z listy Biblioteka, wybierz Uruchom skrypt powłoki i przeciągnij go do panelu po prawej stronie:

    wprowadź opis zdjęcia tutaj

  3. Zestaw Przełęcz wejście do jako argumenty :

    wprowadź opis zdjęcia tutaj

  4. Zastąp domyślną zawartość skryptu tym:

    for f in "$@"; do
        # If not dealing with a directory, exit
        if [ ! -d "$f" ]; then exit; fi
        # Create a temporary directory inside the itmsp "file"
        tmpdir="$f/.itmspOpener$$"
        if mkdir $tmpdir; then
            # Reveal in Finder
            open -R $tmpdir
            # Delete temporary file
            rmdir $tmpdir
        fi
    done
    
  5. Zapisz aplikację jako itmspOpener:

    wprowadź opis zdjęcia tutaj

  6. 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:

wprowadź opis zdjęcia tutaj

Naprawmy to również:

  1. Upewnij się, że Automator jest zamknięty.

  2. Wybierz itmspOpener i pokaż jego zawartość:

    wprowadź opis zdjęcia tutaj

  3. Znajdź zawartość> Info.plist i otwórz go w swoim ulubionym edytorze:

    wprowadź opis zdjęcia tutaj

  4. Zamień wartość tego klucza w CFBundleDocumentTypestablicy:

    <key>CFBundleTypeName</key>
    <string>itmsp folder</string>
    

    i dodaj ten klucz:

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

    Teraz sekcja wygląda następująco:

    wprowadź opis zdjęcia tutaj

  5. Przejdź do Findera, wybierz folder, naciśnij I, wybierz ikonę folderu w lewym górnym rogu i skopiuj za pomocą C:

    wprowadź opis zdjęcia tutaj

  6. Otwórz podgląd i wybierz Plik> Nowy ze schowka. Zapisz plik jako folder.icns:

    wprowadź opis zdjęcia tutaj

  7. Skopiuj folder.icnsdo itmspOpener/Contents/Resources:

    wprowadź opis zdjęcia tutaj

  8. Skojarz plik .itmsp z itmspOpeneri naciśnij przycisk Change All...:

    wprowadź opis zdjęcia tutaj

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:

wprowadź opis zdjęcia tutaj

Teraz kliknij dwukrotnie plik .itmsp i obejrzyj go jako folder:

wprowadź opis zdjęcia tutaj

jaume
źródło
To bardzo imponujące ... ALE wydaje się, że ma jeden problem: jeśli Finder jest w widoku kolumny (mój preferowany typ widoku), wszystko, co jest w .itmspfolderze, 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óż.
michaelmichael
1
Masz rację. Nie spodziewałem się, że użyjesz widoku kolumny, chociaż muszę przyznać, że ma to sens w przypadku tysięcy folderów .itmsp. Ale znalazłem sposób na rozwiązanie tego problemu, tzn. Zmusienie Findera do traktowania folderów .itmsp jako folderów. Spójrz na moją edycję (lub przejdź bezpośrednio do ostatniego akapitu o nazwie Rozwiązanie, ale nie zapomnij najpierw zmodyfikować Info.plist itmspOpener zgodnie z opisem w akapicie Sztuczka.)
jaume
Nie do wiary! Dziękuję za odpowiedź. To bardzo interesujące spojrzenie na niektóre rzeczy, które sprawiają, że Finder i OS X tyka.
michaelmichael
Dzięki, cieszę się, że przydało ci się! (Przeredaguję odpowiedź później, aby poprawić czytelność i nadać jej większą strukturę.)
jaume
W końcu znalazłem czas na edycję odpowiedzi. Zmieniłem kolejność akapitów i dodałem dowody, że rozwiązanie wyjaśnione w mojej odpowiedzi jest odporne na aktualizacje iTunes.
jaume
7

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.plisti uruchamiać je lsregister -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/lsregisterw wersji 10.5 i nowszych.

Lri
źródło
Czy na pewno wyrejestrowanie aplikacji po zmianie Info.plistspowoduje 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.
Old Pro
@OldPro Tak, lsregister -u $app && lsregister $appwydaje się, że stosuje zmiany do Info.plist przynajmniej w tym przypadku.
Lri
To wspaniała odpowiedź - pamiętaj, że przy następnej aktualizacji Xcode - możesz skończyć z programem ładującym aplikacje, który rejestruje domyślne, CFBundleDocumentTypeswięc możesz po prostu usunąć to „narzędzie”, gdy się pojawi, jeśli go nie potrzebujesz i / lub męcząca modyfikacja.
bmike
2

Oto odpowiedni fragment dokumentacji Apple'a na temat pakietów ( wyróżnienie dodane )

Jak system identyfikuje pakiety i pakiety

Finder uważa katalog za pakiet, jeśli spełniony jest jeden z poniższych warunków:

  • Katalog ma znane rozszerzenie nazwy pliku: .app, .bundle, .framework, .plugin, .kext i tak dalej.
  • Katalog ma rozszerzenie, które według niektórych innych aplikacji reprezentuje typ pakietu; patrz „ Pakiety dokumentów ”.
  • Katalog ma ustawiony bit pakietu.

Preferowanym sposobem określenia pakietu jest nadanie katalogu pakietu znanego rozszerzenia nazwy pliku. W większości przypadków Xcode zajmuje się tym, zapewniając szablony, które stosują prawidłowe rozszerzenie. Wszystko, co musisz zrobić, to stworzyć projekt Xcode odpowiedniego typu.

Niemal na pewno Xcode twierdzi, że twierdzi, że .itmspreprezentuje typ pakietu, jak opisano w Pakietach dokumentów . Może więc usunięcie tego rozszerzenia z Xcode załatwi Info.plistsprawę, 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 -uwyrejestrować aplikacje, do których zgłoszono roszczenia .itmsp. W przeciwnym razie może być konieczne usunięcie .itmspze wszystkich list, a następnie zabicie całej bazy danych asocjacji przy użyciu lsregister -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ą GetFileInfoi SetFileprzeskanować dysk i cofnąć te, co jest trochę uciążliwe, ale wykonalne. Palce przecięte przez wiązki pozostają nierozbrojone. Użyj, GetFileInfoaby sprawdzić, testując kilka.

Old Pro
źródło
0

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.

TJ Luoma
źródło
1
SetFile -a B ustawia bit pakietu. W rzeczywistości, powinny być wyłączone: SetFile -a b. Ale to nie zadziała, ponieważ Has bundlebit nie jest ustawiony: GetFileInfo -ab foo.itmspzwraca 0.
jaume