Je travaille occasionnellement avec des packages iTunes Music Store. Ces packages ont une .itmsp
extension. Comme .app
, .itmsp
est essentiellement un répertoire de conteneurs. .itmsp
les dossiers contiennent du XML et des fichiers multimédias.
La dernière mise à jour de Xcode et / ou Mac OS X (Xcode 4.6.1 sur Mac OS 10.8.3) a détourné l'association de type de fichier pour les répertoires avec l' .itmsp
extension. Auparavant, ils étaient traités comme des dossiers normaux - aucun double-clic requis pour voir à l'intérieur. Maintenant, je dois double-cliquer dessus pour interagir avec eux. Quand je le fais, un programme appelé Application Loader essaie de les ouvrir. Pour voir l'intérieur, je dois cliquer avec le bouton droit et sélectionner "Afficher le contenu du paquet". Je traite des milliers de ces fichiers à un moment donné, donc cela ne fonctionnera pas.
J'ai essayé de modifier ou de supprimer l'association de type de fichier à l'aide de Get Info et de RCDefaultApp. Ni l'un ni l'autre ne fonctionne. La suppression de l'association de type de .itmsp
fichier transforme simplement les répertoires en fichiers vides. Il en va de même pour la suppression complète d'Application Loader.app. Dans les deux cas, je ne peux toujours pas parcourir le contenu sans cliquer avec le bouton droit.
La réponse précédemment acceptée a fonctionné pendant un certain temps: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/
elle ne fonctionne plus depuis que j'ai mis à jour Xcode et / ou Mac OS X. Si Xcode est installé, vous devriez pouvoir le tester vous-même en nommant un répertoire foo.itmsp
.
Comment puis-je faire en sorte que les .itmsp
fichiers soient à nouveau traités comme des dossiers?
Réponses:
Le problème: les dossiers .itmsp sont affichés sous forme de fichiers
Le Finder traite les dossiers .itmsp comme des packages , c'est-à-dire comme s'il s'agissait d'un seul fichier. Par exemple, en mode colonne, tout ce qui est contenu dans le dossier .itmsp est invisible, seule l'icône du document est affichée:
Le Finder considère un répertoire comme un package si l'une des conditions suivantes est remplie (du Bundle Programming Guide ):
Le répertoire a une extension de nom de fichier connue: .app, .bundle, .framework, .plugin, .kext, etc. (comme défini dans
/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
. Il s'agit d'une liste binaire, ouvrez-la avec Xcode:)open -a Xcode Info.plist
.Le répertoire a une extension que certaines autres revendications d'application représentent un type de package (recherchez
com.apple.package
dans la sortie demdls -name kMDItemContentTypeTree <foldername>
pour le savoir.)Le répertoire a son bit de package défini (s'il
GetFileInfo -ab <foldername>
retourne1
, il est défini.)Le cas 2. s'applique aux dossiers .itmsp:
Application Loader.app
exporte le typecom.apple.itunes-producer.itmsp
et le définit pour se conformer àcom.apple.package
:Une solution: re-déclarer le type
com.apple.itunes-producer.itmsp
Une solution consisterait à re-déclarer le type
com.apple.itunes-producer.itmsp
et l'extension enitmsp
tant que dossier et à forcer Launch Services à utiliser la déclaration de type modifiée.Pour que les dossiers .itmsp soient affichés en tant que dossiers par le Finder, procédez comme suit:
Ouvrez Automator dans le dossier Applications et sélectionnez Application :
Sélectionnez Utilitaires dans la liste Bibliothèque, sélectionnez Exécuter le script Shell et faites-le glisser vers le volet de droite:
Remplacez le contenu du script par défaut par
exit 0
:Enregistrez l'application sous itmspOpener:
Fermez Automator.
Sélectionnez
itmspOpener.app
et affichez son contenu:Localisez Contents> Info.plist et ouvrez-le avec votre éditeur préféré:
Remplacez ces sections dans
Info.plist
:Associez un fichier .itmsp à
itmspOpener
et appuyez sur le bouton Change All...:Réinitialisez la base de données Launch Services:
(sous OS X 10.8
lsregister
se trouve dans/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
.)Créez un dossier .itmsp et répertoriez ses propriétés:
Étant donné que la base de données Launch Services a été réinitialisée, le Finder affiche désormais les dossiers .itmsp en tant que dossiers.
Ouvrez
itmspOpener.app
pour charger son fichier plist et vous inscrirecom.apple.itunes-producer.itmsp
:Début
Application Loader.app
:Le dossier
foo3.itmsp
doit toujours être affiché en tant que dossier.Vérifiez à nouveau les propriétés du dossier:
com.apple.package
n'a pas été ajouté aux attributs de métadonnées du dossier, c'est pourquoi le Finder affiche toujours les dossiers .itmsp en tant que dossiers!Solution automatisée: affichage des dossiers .itmsp en tant que dossiers après la connexion
Pour afficher les dossiers .itmsp en tant que dossiers après la connexion:
Créez
itmspOpener.app
et modifiez sonInfo.plist
comme décrit ci-dessus.Créez
/usr/local/bin/itmspTypeLoader
avec ce contenu (la variableitmspOpener
pointe vers l'emplacement oùitmspOpener.app
réside, modifiez si nécessaire):Les deux
sleep 15
avant et après l' exécutionlsregister
sont d' une importance capitale. Si vous ne voyez pas le résultat souhaité, essayez différents délais.Créez
/usr/local/bin/itmspTypeLoaderLauncher
avec ce contenu:Définissez les deux scripts exécutables:
Définir
/usr/local/bin/itmspTypeLoaderLauncher
comme hook de connexion :Redémarrez pour que les modifications prennent effet. Une fois connecté, vous devriez voir ceci:
et
lsregister -dump
devrait révéler queitmspOpener.app
«UTExportedTypeDeclarations
a priorité surApplication Loader.app
»:Voyez-vous l'
inactive
indicateur défini dans l'exportation de type d'Application Loader.app? Nous avons vaincu Application Loader.Le test acide: les dossiers .itmsp s'affichent toujours comme tels après la mise à jour d'iTunes
J'ai récemment mis à jour Xcode:
et peut confirmer que les dossiers .itmsp ont été affichés en tant que dossiers lors de la mise à jour:
et après:
Une solution partielle: le package affichera le contenu lors d'un double clic
Comme indiqué précédemment, la procédure détaillée ci-dessus ne fonctionnera pas avec les dossiers arbitraires affichés sous forme de packages par le Finder.
Cependant, si vous souhaitez simplement pouvoir double-cliquer sur un package pour l'ouvrir, il existe un moyen de le faire avec un
bash
script et Automator:Le script crée un dossier temporaire masqué à l'intérieur du package, le révèle dans le Finder (révélant ainsi le package en tant que dossier), puis supprime le dossier temporaire.
Automator regroupe le script dans une application qui sera associée aux fichiers de package.
Ce sont les étapes pour créer une telle application. Je vais utiliser les fichiers .itmsp comme exemple de type de package dans l'explication ci-dessous:
Ouvrez Automator dans le dossier Applications et sélectionnez Application :
Sélectionnez Utilitaires dans la liste Bibliothèque, sélectionnez Exécuter le script Shell et faites-le glisser vers le volet de droite:
Set entrée passe à comme arguments :
Remplacez le contenu du script par défaut par ceci:
Enregistrez l'application sous itmspOpener:
Fermez Automator.
Vous disposez maintenant d'une application qui peut ouvrir des fichiers .itmsp en tant que dossiers si elle y est associée.
Il y a un problème cosmétique: en l'état, les fichiers associés auront l'icône de document blanc standard:
Corrigeons cela aussi:
Assurez-vous que Automator est fermé.
Sélectionnez itmspOpener et affichez son contenu:
Localisez Contents> Info.plist et ouvrez-le avec votre éditeur préféré:
Remplacez la valeur de cette clé dans le
CFBundleDocumentTypes
tableau:et ajoutez cette clé:
Maintenant, la section ressemble à ceci:
Basculez vers le Finder, sélectionnez un dossier, appuyez sur ⌘I, sélectionnez l'icône de dossier dans le coin supérieur gauche et copiez-la avec ⌘C:
Ouvrez Aperçu et sélectionnez Fichier> Nouveau dans le presse-papiers. Enregistrez le fichier sous
folder.icns
:Copier
folder.icns
àitmspOpener/Contents/Resources
:Associez un fichier .itmsp à
itmspOpener
et appuyez sur le bouton Change All...:L'icône des fichiers .itmsp devrait changer dans un dossier, ou du moins je le pensais: malheureusement, ce n'était pas le cas. J'ai donc déplacé l'application itmspOpener vers un autre emplacement (j'ai créé un dossier temporaire sur mon bureau, je l'ai déplacé là-bas et de nouveau sur mon bureau). Cela a actualisé les informations d'icône dans le Finder:
Maintenant, double-cliquez sur un fichier .itmsp et regardez-le s'ouvrir en tant que dossier:
la source
.itmsp
dossier est invisible. Je ne peux pas comprendre pourquoi, mais ça y est. De plus, si j'avais mes druthers, vous n'auriez pas à double-cliquer sur le fichier pour voir à l'intérieur, mais bon.Une option serait de désinscrire Application Loader avec
lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/
, mais il est enregistré à nouveau s'il est ouvert, si la base de données Launch Services est reconstruite, ou éventuellement si Xcode est mis à jour.Vous pouvez également commenter les entrées dans les dictionnaires CFBundleDocumentTypes et UTExportedTypeDeclarations dans
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plist
et exécuterlsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/
. Cela n'invalide pas la signature de code de Xcode, mais les modifications pourraient être écrasées par les mises à jour.Le chemin complet vers lsregister est
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
en 10.5 et versions ultérieures.la source
Info.plist
annulera l'enregistrement des types de fichiers que vous avez supprimés de la liste? Je peux l'imaginer fonctionner et je peux facilement imaginer qu'il échoue. aussi.lsregister -u $app && lsregister $app
semble-t-il appliquer les modifications à un Info.plist au moins dans ce cas.CFBundleDocumentTypes
, vous pouvez donc simplement supprimer cet "outil" lorsqu'il apparaît si vous n'en avez pas besoin et / ou fatigué de le modifier.Voici un extrait pertinent de la documentation d'Apple sur les offres groupées (non souligné dans l'original )
Il est presque certain que Xcode représente qu'il prétend
.itmsp
représenter un type de package, comme décrit dans Packages de documents . Alors peut-être que supprimer cette extension de XcodeInfo.plist
fera l'affaire, mais je soupçonne qu'une fois que cette association a été notée par le Finder, la supprimer de Xcode ne l'annulera pas. Quelles sont les "applications recommandées" que vous obtenez lorsque vous cliquez avec le bouton droit sur "Ouvrir avec ..."? Vous devez vérifier tous leurs Info.plists.Je suggère de voir si vous pouvez vous permettre
lsregister -u
de désinscrire toutes les applications revendiquées.itmsp
. Sinon, vous devrez peut-être supprimer.itmsp
de tous les plists, puis tuer toute la base de données d'association de recherche à l'aide delsregister -kill -seed
. Je n'ai jamais fait ça, je ne dis pas combien de dégâts cela fera au reste de votre système. Vous souhaitez probablement vous désinscrire, puis modifier les listes, puis tuer et réamorcer la base de données. Je ne serais pas surpris si l'annulation de l'inscription ne supprime pas l'association si vous l'avez déjà supprimée de la liste, et la réamorçage la rajoutera si vous ne l'avez pas encore supprimée. De plus, vous ne perdrez pas toutes les autres associations pour les applications incriminées.Pire encore, Xcode aurait pu passer et définir le bit de bundle sur tous les dossiers. Je suppose que vous devrez alors écrire un script en utilisant
GetFileInfo
etSetFile
pour analyser le disque et les défaire, ce qui est une sorte de douleur, mais faisable. Les doigts croisés sur les bits du paquet restent non réglés. UtilisezGetFileInfo
pour vérifier en testant quelques-uns.la source
Je pense que vous pouvez résoudre ce problème en utilisant
/usr/bin/SetFile -a B /path/to/file.itmsp
Testez-le sur un avant de l'essayer sur tous les autres, évidemment.
Si vous en avez besoin pour tous les exécuter dans un dossier donné:
find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;
devrait le faire pour vous.
la source
SetFile -a B
définit le bit de paquet. En fait, il devrait être désactivé:SetFile -a b
. Mais cela n'aura aucun effet puisque leHas bundle
bit n'est pas positionné:GetFileInfo -ab foo.itmsp
retourne0
.