Ich arbeite gelegentlich mit iTunes Music Store-Paketen. Diese Pakete haben eine .itmsp
Erweiterung. Wie .app
, .itmsp
ist im Wesentlichen ein Container - Verzeichnis. .itmsp
Ordner 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 .itmsp
Erweiterung 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 .itmsp
Verzeichnisse 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 .itmsp
Dateien wieder als Ordner behandelt werden?
Antworten:
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:
Der Finder betrachtet ein Verzeichnis als Paket, wenn eine der folgenden Bedingungen erfüllt ist (aus dem Bundle-Programmierhandbuch ):
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
.Das Verzeichnis hat eine Erweiterung, die von einigen anderen Anwendungsansprüchen als Pakettyp angegeben wird (suchen Sie
com.apple.package
in der Ausgabe vonmdls -name kMDItemContentTypeTree <foldername>
, um dies herauszufinden.)Das Verzeichnis hat seine Paket - Bit gesetzt (wenn
GetFileInfo -ab <foldername>
zurückkehrt1
, es gesetzt ist.)Fall 2. gilt für .itmsp-Ordner:
Application Loader.app
exportiert den Typcom.apple.itunes-producer.itmsp
und stellt ihn so ein, dass er den folgenden Anforderungen entsprichtcom.apple.package
:Eine Lösung: Typ neu deklarieren
com.apple.itunes-producer.itmsp
Eine Lösung wäre, Typ
com.apple.itunes-producer.itmsp
und Erweiterungitmsp
als Ordner neu zu deklarieren und Launch Services zu zwingen, die geänderte Typdeklaration zu verwenden.Befolgen Sie die folgenden Schritte, damit .itmsp-Ordner vom Finder als Ordner angezeigt werden:
Öffnen Sie Automator im Ordner Applications und wählen Sie Application :
Wählen Sie in der Bibliotheksliste Dienstprogramme aus, wählen Sie Shell-Skript ausführen aus und ziehen Sie es in den Bereich rechts:
Ersetzen Sie den Standard-Skriptinhalt durch
exit 0
:Speichern Sie die Anwendung als itmspOpener:
Schließen Sie Automator.
Wählen Sie
itmspOpener.app
den Inhalt aus und zeigen Sie ihn an:Suchen Sie nach Contents> Info.plist und öffnen Sie es mit Ihrem bevorzugten Editor:
Ersetzen Sie diese Abschnitte in
Info.plist
:Verknüpfen Sie eine .itmsp-Datei mit
itmspOpener
und drücken Sie die Taste Change All...:Setzen Sie die Launch Services-Datenbank zurück:
(Unter OS X 10.8
lsregister
befindet sich in/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
.)Erstellen Sie einen .itmsp-Ordner und listen Sie seine Eigenschaften auf:
Da die Launch Services-Datenbank zurückgesetzt wurde, werden im Finder jetzt .itmsp-Ordner als Ordner angezeigt.
Öffnen Sie
itmspOpener.app
, um die plist-Datei zu laden und zu registrierencom.apple.itunes-producer.itmsp
:Start
Application Loader.app
:Ordner
foo3.itmsp
sollte weiterhin als Ordner angezeigt werden.Überprüfen Sie die Ordnereigenschaften erneut:
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:
Erstellen
itmspOpener.app
und ändern Sie esInfo.plist
wie oben beschrieben.Erstellen Sie
/usr/local/bin/itmspTypeLoader
mit diesem Inhalt (die VariableitmspOpener
zeigt auf den Ort, an dem sich der InhaltitmspOpener.app
befindet, ändern Sie ihn nach Bedarf):Sowohl
sleep 15
vor als auch nach dem Laufenlsregister
sind von größter Bedeutung. Wenn Sie das gewünschte Ergebnis nicht sehen, versuchen Sie es mit verschiedenen Verzögerungen.Erstellen Sie
/usr/local/bin/itmspTypeLoaderLauncher
mit diesen Inhalten:Stellen Sie beide ausführbaren Skripte ein:
Stellen Sie
/usr/local/bin/itmspTypeLoaderLauncher
als Login Haken :Starten Sie den Computer neu, damit die Änderungen wirksam werden. Nach dem Einloggen solltest du folgendes sehen:
und
lsregister -dump
sollte zeigen, dassitmspOpener.app
'sUTExportedTypeDeclarations
Vorrang vorApplication Loader.app
' s hat:inactive
Wird 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:
und können bestätigen, dass .itmsp-Ordner während der Aktualisierung als Ordner angezeigt wurden:
und danach:
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
bash
Skript 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.
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:
Öffnen Sie Automator im Ordner Applications und wählen Sie Application :
Wählen Sie in der Bibliotheksliste Dienstprogramme aus, wählen Sie Shell-Skript ausführen aus und ziehen Sie es in den Bereich rechts:
Setze Pass Eingabe auf als Argumente :
Ersetzen Sie den Standard-Skriptinhalt durch Folgendes:
Speichern Sie die Anwendung als itmspOpener:
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:
Lassen Sie uns das auch beheben:
Stellen Sie sicher, dass Automator geschlossen ist.
Wählen Sie itmspOpener aus und zeigen Sie den Inhalt an:
Suchen Sie nach Contents> Info.plist und öffnen Sie es mit Ihrem bevorzugten Editor:
Ersetzen Sie den Wert für diesen Schlüssel im
CFBundleDocumentTypes
Array:und diesen Schlüssel hinzufügen:
Nun sieht der Abschnitt so aus:
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:
Öffnen Sie die Vorschau und wählen Sie Datei> Neu aus der Zwischenablage. Speichern Sie die Datei als
folder.icns
:Kopieren
folder.icns
nachitmspOpener/Contents/Resources
:Verknüpfen Sie eine .itmsp-Datei mit
itmspOpener
und drücken Sie die Taste Change All...: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:
Doppelklicken Sie nun auf eine .itmsp-Datei und sehen Sie, wie diese als Ordner geöffnet wird:
quelle
.itmsp
Ordner 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.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.plist
und ausführenlsregister -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/lsregister
in 10.5 und höher.quelle
Info.plist
die 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.lsregister -u $app && lsregister $app
zumindest in diesem Fall scheinen die Änderungen auf eine Info.plist anzuwenden.CFBundleDocumentTypes
Löschen Sie also das "Tool", wenn es angezeigt wird, wenn Sie es nicht benötigen, und / oder oder Reifen es zu ändern.Hier ist ein relevanter Auszug aus der Dokumentation von Apple zu Bundles ( Hervorhebung hinzugefügt )
Mit ziemlicher Sicherheit stellt Xcode dar, dass es behauptet, es handele sich
.itmsp
um einen Pakettyp, wie in Dokumentpakete beschrieben . Vielleicht reicht es also, diese Erweiterung von Xcode zu entfernenInfo.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 -u
Registrierung von Apps, für die Sie Ansprüche geltend machen, mithilfe von aufheben können.itmsp
. Andernfalls müssen Sie möglicherweise.itmsp
alle Listen löschen und anschließend die gesamte Finder-Zuordnungsdatenbank mit tötenlsregister -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
GetFileInfo
undSetFile
die 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 SieGetFileInfo
, um zu überprüfen, indem Sie einige testen.quelle
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.
quelle
SetFile -a B
setzt das Bündelbit In der Tat sollte es sein deaktiviert:SetFile -a b
. Dies hat jedoch keine Auswirkung, da dasHas bundle
Bit nicht gesetzt ist:GetFileInfo -ab foo.itmsp
return0
.