Dateityp-Zuordnung wiederherstellen

12

Ich arbeite gelegentlich mit iTunes Music Store-Paketen. Diese Pakete haben eine .itmspErweiterung. Wie .app, .itmspist im Wesentlichen ein Container - Verzeichnis. .itmspOrdner enthalten XML- und Mediendateien.

Das neueste Xcode- und / oder Mac OS X-Update (Xcode 4.6.1 unter Mac OS 10.8.3) hat die Dateitypzuordnung für Verzeichnisse mit der .itmspErweiterung missbraucht . Zuvor wurden sie wie normale Ordner behandelt - es ist kein Doppelklick erforderlich, um nach innen zu sehen. Jetzt muss ich sie doppelt anklicken, um mit ihnen zu interagieren. Wenn ich das tue, versucht ein Programm namens Application Loader, sie zu öffnen. Um nach innen zu sehen, muss ich mit der rechten Maustaste klicken und "Show Package Contents" auswählen. Ich beschäftige mich mit Tausenden dieser Dateien zu einem bestimmten Zeitpunkt, so dass das nicht funktioniert.

Ich habe versucht, die Dateitypzuordnung mit Get Info und RCDefaultApp zu ändern oder zu entfernen. Beides funktioniert nicht. Durch das Entfernen der Dateitypzuordnung werden .itmspVerzeichnisse einfach in leere Dateien umgewandelt. Ebenso das vollständige Löschen von Application Loader.app. In beiden Fällen kann ich den Inhalt immer noch nicht durchsuchen, ohne mit der rechten Maustaste zu klicken.

Die zuvor akzeptierte Antwort hat sich für eine Weile als lsregister -u /Applications/Contents/Applications/Application\ Loader.app/nützlich erwiesen : Sie funktioniert nicht mehr, seit ich Xcode und / oder Mac OS X aktualisiert habe. Wenn Sie Xcode installiert haben, sollten Sie dies selbst testen können, indem Sie ein Verzeichnis angeben foo.itmsp.

Wie kann ich dafür sorgen, dass .itmspDateien wieder als Ordner behandelt werden?

michaelmichael
quelle
Haben Sie versucht, eine Datei auf das Xcode App-Symbol zu ziehen und dort abzulegen, um zu sehen, ob sie das tut, was Sie wollen?
MrDaniel
Danke für den Vorschlag. Es ist für das vorliegende Problem nicht relevant, daher werde ich versuchen, meine Frage zu bearbeiten, um meine Absicht zu klären.
Michaelmichael
1
Welche Version von OS X verwenden Sie? Welche Version von Xcode?
Old Pro
Ich habe meine Antwort gelöscht, wodurch die Typen aus den CFBundleDocumentTypes entfernt und in der Launch Service DataBase beendet wurden. Es funktioniert eine Weile, aber es scheint sich irgendwann später wieder zu behaupten.
Markhunte

Antworten:

11

Das Problem: .itmsp-Ordner werden als Dateien angezeigt

Der Finder behandelt .itmsp-Ordner als Pakete , dh als ob sie eine einzelne Datei wären. In der Spaltenansicht ist beispielsweise alles, was im Ordner .itmsp enthalten ist, unsichtbar. Es wird nur das Dokumentsymbol angezeigt:

Bildbeschreibung hier eingeben

Der Finder betrachtet ein Verzeichnis als Paket, wenn eine der folgenden Bedingungen erfüllt ist (aus dem Bundle-Programmierhandbuch ):

  1. Das Verzeichnis hat eine bekannte Dateinamenerweiterung: .app, .bundle, .framework, .plugin, .kext usw. (wie in /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist. Dies ist eine binäre Liste, öffne sie mit Xcode :) open -a Xcode Info.plist.

  2. Das Verzeichnis hat eine Erweiterung, die von einigen anderen Anwendungsansprüchen als Pakettyp angegeben wird (suchen Sie com.apple.packagein der Ausgabe von mdls -name kMDItemContentTypeTree <foldername>, um dies herauszufinden.)

  3. Das Verzeichnis hat seine Paket - Bit gesetzt (wenn GetFileInfo -ab <foldername>zurückkehrt 1, es gesetzt ist.)

Fall 2. gilt für .itmsp-Ordner: Application Loader.appexportiert den Typ com.apple.itunes-producer.itmspund stellt ihn so ein, dass er den folgenden Anforderungen entspricht 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>

Eine Lösung: Typ neu deklarieren com.apple.itunes-producer.itmsp

Eine Lösung wäre, Typ com.apple.itunes-producer.itmspund Erweiterung itmspals Ordner neu zu deklarieren und Launch Services zu zwingen, die geänderte Typdeklaration zu verwenden.

Wichtige Notiz:

Obwohl es das Problem des OP zuverlässig löst, zeigt die vorgeschlagene Lösung, wenn sie auf andere Pakete angewendet wird, diese nicht als Ordner an.

Ich habe herausgefunden, dass die vorgeschlagene Lösung nur mit Dateitypen funktioniert, die von Anwendungen deklariert wurden, die sich in einem nicht standardmäßigen Anwendungspfad befinden.

Dies ist der Fall bei Application Loader.app, der sich in befindet /Applications/Xcode.app/Contents/Applications/.

Wenn Sie an einer Teillösung interessiert sind, überprüfen Sie das Ende dieser Antwort.

Befolgen Sie die folgenden Schritte, damit .itmsp-Ordner vom Finder als Ordner angezeigt werden:

  1. Öffnen Sie Automator im Ordner Applications und wählen Sie Application :

    Bildbeschreibung hier eingeben

  2. Wählen Sie in der Bibliotheksliste Dienstprogramme aus, wählen Sie Shell-Skript ausführen aus und ziehen Sie es in den Bereich rechts:

    Bildbeschreibung hier eingeben

  3. Ersetzen Sie den Standard-Skriptinhalt durch exit 0:

    Bildbeschreibung hier eingeben

  4. Speichern Sie die Anwendung als itmspOpener:

    Bildbeschreibung hier eingeben

  5. Schließen Sie Automator.

  6. Wählen Sie itmspOpener.appden Inhalt aus und zeigen Sie ihn an:

    Bildbeschreibung hier eingeben

  7. Suchen Sie nach Contents> Info.plist und öffnen Sie es mit Ihrem bevorzugten Editor:

    Bildbeschreibung hier eingeben

  8. Ersetzen Sie diese Abschnitte in 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>
    

    Hinweis: Warum kUTTypeDirectorystatt public.directoryin UTExportedTypeDeclarations? Aus der Dokumentation von Apple : Wichtig: Wenn Sie systemdefinierte UTIs in Ihrem Code verwenden, sollten Sie die UTCoreTypes.him Launch Services-Framework definierten Konstanten verwenden, sofern verfügbar, und nicht die tatsächlichen UTI-Zeichenfolgen. Übergeben Sie beispielsweise kUTTypeApplication anstelle von "com.apple.application". "System-Declared Uniform Type Identifiers" listet diese Konstanten zusätzlich zu den UTI-Zeichenfolgen auf.

  9. Verknüpfen Sie eine .itmsp-Datei mit itmspOpenerund drücken Sie die Taste Change All...:

    Bildbeschreibung hier eingeben

  10. Setzen Sie die Launch Services-Datenbank zurück:

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

    (Unter OS X 10.8 lsregisterbefindet sich in /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/.)

  11. Erstellen Sie einen .itmsp-Ordner und listen Sie seine Eigenschaften auf:

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

    Da die Launch Services-Datenbank zurückgesetzt wurde, werden im Finder jetzt .itmsp-Ordner als Ordner angezeigt.

  12. Öffnen Sie itmspOpener.app, um die plist-Datei zu laden und zu registrieren com.apple.itunes-producer.itmsp:

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

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

    Ordner foo3.itmspsollte weiterhin als Ordner angezeigt werden.

  14. Überprüfen Sie die Ordnereigenschaften erneut:

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

    com.apple.package Wurde den Metadatenattributen des Ordners nicht hinzugefügt, zeigt der Finder die .itmsp-Ordner weiterhin als Ordner an.

Automatisierte Lösung: Anzeigen von .itmsp-Ordnern als Ordner nach der Anmeldung

So zeigen Sie .itmsp-Ordner nach der Anmeldung als Ordner an:

  1. Erstellen itmspOpener.appund ändern Sie es Info.plistwie oben beschrieben.

  2. Erstellen Sie /usr/local/bin/itmspTypeLoadermit diesem Inhalt (die Variable itmspOpenerzeigt auf den Ort, an dem sich der Inhalt itmspOpener.appbefindet, ändern Sie ihn nach Bedarf):

    #!/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
    

    Sowohl sleep 15vor als auch nach dem Laufen lsregistersind von größter Bedeutung. Wenn Sie das gewünschte Ergebnis nicht sehen, versuchen Sie es mit verschiedenen Verzögerungen.

  3. Erstellen Sie /usr/local/bin/itmspTypeLoaderLaunchermit diesen Inhalten:

    #!/bin/bash
    
    # $1 returns the short name of the user who is logging in
    su - $1 -c /usr/local/bin/itmspTypeLoader &
    
  4. Stellen Sie beide ausführbaren Skripte ein:

    $ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher 
    
  5. Stellen Sie /usr/local/bin/itmspTypeLoaderLauncherals Login Haken :

    $ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
    
  6. Starten Sie den Computer neu, damit die Änderungen wirksam werden. Nach dem Einloggen solltest du folgendes sehen:

    Bildbeschreibung hier eingeben

    und lsregister -dumpsollte zeigen, dass itmspOpener.app's UTExportedTypeDeclarationsVorrang vor Application Loader.app' s hat:

    $ 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
            --------------------------------------------------------
    

    inactiveWird das Flag beim Typexport von Application Loader.app angezeigt? Wir haben Application Loader besiegt.

Der Härtetest: .itmsp-Ordner werden nach dem iTunes-Update immer noch als solche angezeigt

Ich habe kürzlich Xcode aktualisiert:

Bildbeschreibung hier eingeben

und können bestätigen, dass .itmsp-Ordner während der Aktualisierung als Ordner angezeigt wurden:

Bildbeschreibung hier eingeben

und danach:

Bildbeschreibung hier eingeben

Eine Teillösung: Das Paket zeigt den Inhalt an, wenn Sie darauf doppelklicken

Wie bereits erwähnt, funktioniert das oben beschriebene Verfahren nicht mit beliebigen Ordnern, die vom Finder als Pakete angezeigt werden.

Wenn Sie jedoch nur auf ein Paket doppelklicken möchten, um es zu öffnen, gibt es eine Möglichkeit, dies mit einem bashSkript und Automator zu tun :

  • Das Skript erstellt einen versteckten temporären Ordner innerhalb des Pakets, zeigt ihn im Finder an (wodurch das Paket als Ordner angezeigt wird) und löscht dann den temporären Ordner.

    Hinweis:

    Das Skript könnte stattdessen eine versteckte, temporäre Datei erstellen. Ich ziehe es jedoch vor, einen Ordner zu erstellen, da rmdirnur leere Ordner gelöscht werden, während alle Dateien rmgelöscht werden . Das Skript ist verheerend, nur leere Ordner werden gelöscht, was wahrscheinlich nicht so schlimm ist, als ob Dateien gelöscht würden.

  • Automator bündelt das Skript in eine Anwendung, die den Paketdateien zugeordnet wird.

Dies sind die Schritte, um eine solche Anwendung zu erstellen. In der folgenden Erläuterung werden .itmsp-Dateien als Beispiel für Pakettypen verwendet:

  1. Öffnen Sie Automator im Ordner Applications und wählen Sie Application :

    Bildbeschreibung hier eingeben

  2. Wählen Sie in der Bibliotheksliste Dienstprogramme aus, wählen Sie Shell-Skript ausführen aus und ziehen Sie es in den Bereich rechts:

    Bildbeschreibung hier eingeben

  3. Setze Pass Eingabe auf als Argumente :

    Bildbeschreibung hier eingeben

  4. Ersetzen Sie den Standard-Skriptinhalt durch Folgendes:

    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. Speichern Sie die Anwendung als itmspOpener:

    Bildbeschreibung hier eingeben

  6. Schließen Sie Automator.

Jetzt haben Sie eine Anwendung, die .itmsp-Dateien als Ordner öffnen kann, wenn sie damit verknüpft sind.

Es gibt ein kosmetisches Problem: So wie es aussieht, haben verknüpfte Dateien das standardmäßige weiße Dokumentsymbol:

Bildbeschreibung hier eingeben

Lassen Sie uns das auch beheben:

  1. Stellen Sie sicher, dass Automator geschlossen ist.

  2. Wählen Sie itmspOpener aus und zeigen Sie den Inhalt an:

    Bildbeschreibung hier eingeben

  3. Suchen Sie nach Contents> Info.plist und öffnen Sie es mit Ihrem bevorzugten Editor:

    Bildbeschreibung hier eingeben

  4. Ersetzen Sie den Wert für diesen Schlüssel im CFBundleDocumentTypesArray:

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

    und diesen Schlüssel hinzufügen:

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

    Nun sieht der Abschnitt so aus:

    Bildbeschreibung hier eingeben

  5. Wechseln Sie zum Finder, wählen Sie einen Ordner aus, drücken Sie I, wählen Sie das Ordnersymbol in der linken oberen Ecke und kopieren Sie es mit C:

    Bildbeschreibung hier eingeben

  6. Öffnen Sie die Vorschau und wählen Sie Datei> Neu aus der Zwischenablage. Speichern Sie die Datei als folder.icns:

    Bildbeschreibung hier eingeben

  7. Kopieren folder.icnsnach itmspOpener/Contents/Resources:

    Bildbeschreibung hier eingeben

  8. Verknüpfen Sie eine .itmsp-Datei mit itmspOpenerund drücken Sie die Taste Change All...:

    Bildbeschreibung hier eingeben

Das Icon von .itmsp-Dateien sollte sich in einen Ordner ändern, oder zumindest dachte ich das so: Leider war dies nicht der Fall. Daher habe ich die Anwendung itmspOpener an einen anderen Speicherort verschoben (ich habe einen temporären Ordner auf meinem Desktop erstellt, dorthin und zurück auf meinen Desktop verschoben). Dadurch wurden die Symbolinformationen im Finder aktualisiert:

Bildbeschreibung hier eingeben

Doppelklicken Sie nun auf eine .itmsp-Datei und sehen Sie, wie diese als Ordner geöffnet wird:

Bildbeschreibung hier eingeben

jaume
quelle
Das ist sehr beeindruckend ... ABER es scheint ein Problem zu geben: Wenn sich der Finder in der Spaltenansicht befindet (mein bevorzugter Ansichtstyp), ist alles, was im .itmspOrdner enthalten ist, unsichtbar. Ich kann nicht herausfinden warum, aber da ist es. Wenn ich meine Druthers hätte, müsstest du nicht doppelt auf die Datei klicken, um sie zu sehen, aber na ja.
Michaelmichael
1
Du hast recht. Ich habe nicht damit gerechnet, dass Sie die Spaltenansicht verwenden, obwohl dies bei Tausenden von .itmsp-Ordnern durchaus Sinn macht. Aber ich habe einen Weg gefunden, das Problem zu lösen, nämlich den Finder zu zwingen, .itmsp-Ordner als Ordner zu behandeln. Schauen Sie sich meine Bearbeitung an (oder springen Sie direkt zum letzten Absatz mit dem Namen Die Lösung, aber vergessen Sie nicht, zuerst die Info.plist von itmspOpener zu ändern, wie im Abschnitt Der Trick beschrieben.)
jaume
Unglaublich! Danke für die Antwort. Dies ist ein sehr interessanter Blick auf einige Dinge, die den Finder und OS X zum Ticken bringen.
Michaelmichael
Danke, ich bin froh, dass Sie es nützlich fanden! (Ich werde die Antwort später bearbeiten, um die Lesbarkeit zu verbessern und sie strukturierter zu gestalten.)
29.
Ich habe endlich Zeit gefunden, die Antwort zu bearbeiten. Ich habe Absätze neu angeordnet und Beweise hinzugefügt, dass die in meiner Antwort erläuterte Lösung gegen iTunes-Updates immun ist.
Jaume
7

Eine Möglichkeit wäre, die Registrierung von Application Loader aufzuheben lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/, sie wird jedoch erneut registriert, wenn sie geöffnet wird, wenn die Launch Services-Datenbank neu erstellt wird oder wenn möglicherweise Xcode aktualisiert wird.

Sie können auch die Einträge in den Wörterbüchern CFBundleDocumentTypes und UTExportedTypeDeclarations auskommentieren /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plistund ausführen lsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/. Die Codesignatur von Xcode wird nicht ungültig, die Änderungen können jedoch durch Aktualisierungen überschrieben werden.

Der vollständige Pfad zu lsregister befindet sich /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregisterin 10.5 und höher.

Lri
quelle
Sind Sie sicher, dass das Aufheben der Registrierung der App nach dem Ändern der App Info.plistdie Registrierung der Dateitypen aufhebt, die Sie aus der Liste entfernt haben? Ich kann mir vorstellen, dass es funktioniert, und ich kann mir leicht vorstellen, dass es versagt. auch.
Old Pro
@OldPro Ja, lsregister -u $app && lsregister $appzumindest in diesem Fall scheinen die Änderungen auf eine Info.plist anzuwenden.
Lri
Dies ist eine fabelhafte Antwort - denken Sie daran, dass Sie beim nächsten Upgrade von Xcode möglicherweise einen Application Loader haben, der die Standardeinstellungen registriert. CFBundleDocumentTypesLöschen Sie also das "Tool", wenn es angezeigt wird, wenn Sie es nicht benötigen, und / oder oder Reifen es zu ändern.
bmike
2

Hier ist ein relevanter Auszug aus der Dokumentation von Apple zu Bundles ( Hervorhebung hinzugefügt )

Wie das System Bundles und Pakete identifiziert

Der Finder betrachtet ein Verzeichnis als Paket, wenn eine der folgenden Bedingungen erfüllt ist:

  • Das Verzeichnis hat eine bekannte Dateinamenerweiterung: .app, .bundle, .framework, .plugin, .kext und so weiter.
  • Das Verzeichnis hat eine Erweiterung, die von einigen anderen Anwendungsansprüchen als Pakettyp angegeben wird. Siehe " Dokumentpakete ".
  • Das Paketbit des Verzeichnisses ist gesetzt.

Die bevorzugte Methode zum Angeben eines Pakets besteht darin, dem Paketverzeichnis eine bekannte Dateinamenerweiterung zuzuweisen. In den meisten Fällen übernimmt Xcode dies für Sie, indem es Vorlagen mit der richtigen Erweiterung bereitstellt. Sie müssen lediglich ein Xcode-Projekt des entsprechenden Typs erstellen.

Mit ziemlicher Sicherheit stellt Xcode dar, dass es behauptet, es handele sich .itmspum einen Pakettyp, wie in Dokumentpakete beschrieben . Vielleicht reicht es also, diese Erweiterung von Xcode zu entfernen Info.plist, aber ich vermute, dass das Entfernen dieser Verknüpfung von Xcode sie nicht mehr rückgängig macht, wenn diese Zuordnung vom Finder notiert wurde. Welche "empfohlenen Anwendungen" erhalten Sie, wenn Sie mit der rechten Maustaste auf "Öffnen mit ..." klicken? Sie müssen alle ihre Info.plists überprüfen.

Ich schlage vor, zu prüfen, ob Sie die lsregister -uRegistrierung von Apps, für die Sie Ansprüche geltend machen, mithilfe von aufheben können .itmsp. Andernfalls müssen Sie möglicherweise .itmspalle Listen löschen und anschließend die gesamte Finder-Zuordnungsdatenbank mit töten lsregister -kill -seed. Niemals, ohne vorherzusagen, wie viel Schaden das für den Rest Ihres Systems anrichten wird. Möglicherweise möchten Sie die Registrierung aufheben, dann die Listen bearbeiten, dann die Datenbank töten und erneut säen. Ich würde mich nicht wundern, wenn die Aufhebung der Registrierung die Zuordnung nicht löscht, wenn Sie sie bereits von der Liste entfernt haben, und reseed sie wieder hinzufügt, wenn Sie sie noch nicht entfernt haben. Auf diese Weise verlieren Sie nicht alle anderen Verknüpfungen für die anstößigen Apps.

Was noch schlimmer ist, Xcode hätte das Bündelbit für alle Ordner durchgehen und setzen können. Dann müsstest du wohl ein Skript schreiben GetFileInfound SetFiledie Diskette scannen und diese rückgängig machen, was ein bisschen mühsam ist, aber machbar. Finger, die die Bündelstücke kreuzen, bleiben ungekreuzt. Verwenden Sie GetFileInfo, um zu überprüfen, indem Sie einige testen.

Alter Pro
quelle
0

Ich glaube, dass Sie dies mit beheben können

/usr/bin/SetFile -a B /path/to/file.itmsp

Testen Sie es an einem, bevor Sie es an allen anderen ausprobieren.

Wenn Sie es für alle in einem bestimmten Ordner benötigen:

find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;

sollte es für dich tun.

TJ Luoma
quelle
1
SetFile -a B setzt das Bündelbit In der Tat sollte es sein deaktiviert: SetFile -a b. Dies hat jedoch keine Auswirkung, da das Has bundleBit nicht gesetzt ist: GetFileInfo -ab foo.itmspreturn 0.
Jaume