Ocasionalmente trabajo con paquetes de iTunes Music Store. Estos paquetes tienen una .itmsp
extensión. Al igual que .app
, .itmsp
es esencialmente un directorio contenedor. .itmsp
Las carpetas contienen XML y archivos multimedia.
La última actualización de Xcode y / o Mac OS X (Xcode 4.6.1 en Mac OS 10.8.3) ha secuestrado la asociación de tipo de archivo para directorios con la .itmsp
extensión. Anteriormente se trataban como carpetas normales: no es necesario hacer doble clic para ver el interior. Ahora, tengo que hacer doble clic en ellos para interactuar con ellos. Cuando lo hago, un programa llamado Application Loader intenta abrirlos. Para ver el interior, tengo que hacer clic derecho y seleccionar "Mostrar contenido del paquete". Estoy tratando con miles de estos archivos en un momento dado, por lo que eso no funcionará.
Intenté cambiar o eliminar la asociación de tipo de archivo usando Obtener información y RCDefaultApp. Ninguno de los dos funciona. Eliminar la asociación de tipo de archivo simplemente convierte los .itmsp
directorios en archivos en blanco. Al igual que eliminar Application Loader.app por completo. En cualquier caso, todavía no puedo navegar por el contenido sin hacer clic derecho.
La respuesta previamente aceptada funcionó de maravilla por un tiempo: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/
dejó de funcionar desde que actualicé Xcode y / o Mac OS X. Si tiene instalado Xcode, debería poder probarlo usted mismo nombrando un directorio foo.itmsp
.
¿Cómo puedo hacer que los .itmsp
archivos se traten como carpetas una vez más?
Respuestas:
El problema: las carpetas .itmsp se muestran como archivos
El Finder trata las carpetas .itmsp como paquetes , es decir, como si fueran un solo archivo. Por ejemplo, en la vista de columna, todo lo contenido en la carpeta .itmsp es invisible, solo se muestra el icono del documento:
El Finder considera que un directorio es un paquete si se cumple alguna de las siguientes condiciones (de la Guía de programación de paquetes ):
El directorio tiene una extensión de nombre de archivo conocida: .app, .bundle, .framework, .plugin, .kext, etc. (como se define en
/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
. Esta es una lista binaria, ábrala con Xcode:)open -a Xcode Info.plist
.El directorio tiene una extensión que algunas otras reclamaciones de aplicaciones representan un tipo de paquete (busque
com.apple.package
en la salidamdls -name kMDItemContentTypeTree <foldername>
para averiguarlo).El directorio tiene su bit de paquete establecido (si
GetFileInfo -ab <foldername>
devuelve1
, está establecido).El caso 2. se aplica a las carpetas .itmsp:
Application Loader.app
exporta el tipocom.apple.itunes-producer.itmsp
y lo configura para que se ajuste acom.apple.package
:Una solución: volver a declarar el tipo
com.apple.itunes-producer.itmsp
Una solución sería volver a declarar el tipo
com.apple.itunes-producer.itmsp
y la extensiónitmsp
como una carpeta y forzar a Launch Services a usar la declaración de tipo modificada.Para que el Finder muestre las carpetas .itmsp como carpetas, siga los siguientes pasos:
Abra Automator en la carpeta Aplicaciones y seleccione Aplicación :
Seleccione Utilidades en la lista Biblioteca, seleccione Ejecutar script de shell y arrástrelo al panel de la derecha:
Reemplace el contenido del script predeterminado con
exit 0
:Guarde la aplicación como itmspOpener:
Cierra Automator.
Seleccione
itmspOpener.app
y muestre sus contenidos:Localice Contenido> Info.plist y ábralo con su editor favorito:
Reemplace estas secciones en
Info.plist
:Asocia un archivo .itmsp
itmspOpener
y presiona el botón Change All...:Restablezca la base de datos de Launch Services:
(en OS X 10.8
lsregister
se encuentra en/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
).Cree una carpeta .itmsp y enumere sus propiedades:
Debido a que la base de datos de Launch Services se restableció, ahora el Finder muestra las carpetas .itmsp como carpetas.
Abrir
itmspOpener.app
para cargar su archivo plist y registrarcom.apple.itunes-producer.itmsp
:Inicio
Application Loader.app
:La carpeta
foo3.itmsp
aún debe mostrarse como una carpeta.Verifique nuevamente las propiedades de la carpeta:
com.apple.package
no se agregó a los atributos de metadatos de la carpeta, por eso el Finder todavía muestra las carpetas .itmsp como carpetas.Solución automatizada: mostrar carpetas .itmsp como carpetas después de iniciar sesión
Para mostrar las carpetas .itmsp como carpetas después de iniciar sesión:
Crear
itmspOpener.app
y modificar suInfo.plist
como se describe anteriormente.Cree
/usr/local/bin/itmspTypeLoader
con este contenido (la variableitmspOpener
apunta a la ubicación dondeitmspOpener.app
reside, cambie según sea necesario):Tanto
sleep 15
antes como después de correrlsregister
son de suma importancia. Si no ve el resultado deseado, pruebe diferentes demoras.Crea
/usr/local/bin/itmspTypeLoaderLauncher
con este contenido:Establecer ambos scripts ejecutables:
Establecer
/usr/local/bin/itmspTypeLoaderLauncher
como enlace de inicio de sesión :Reinicie para que los cambios surtan efecto. Después de iniciar sesión, debería ver esto:
y
lsregister -dump
debe revelar queitmspOpener.app
'sUTExportedTypeDeclarations
tiene prioridad sobreApplication Loader.app
' s:¿Ve la
inactive
bandera establecida en el tipo de exportación de Application Loader.app? Derrotamos a Application Loader.La prueba de fuego: las carpetas .itmsp aún se muestran como tales después de la actualización de iTunes
Recientemente actualicé Xcode:
y puede confirmar que las carpetas .itmsp se mostraron como carpetas durante la actualización:
y después:
Una solución parcial: el paquete mostrará el contenido cuando se hace doble clic
Como se comentó anteriormente, el procedimiento detallado anteriormente no funcionará con carpetas arbitrarias que el Finder muestra como paquetes.
Sin embargo, si solo desea poder hacer doble clic en un paquete para abrirlo, hay una manera de hacerlo con un
bash
script y Automator:El script crea una carpeta temporal oculta dentro del paquete, la revela en el Finder (revelando así el paquete como una carpeta) y luego elimina la carpeta temporal.
Automator agrupa el script en una aplicación que se asociará con los archivos del paquete.
Estos son los pasos para crear una aplicación de este tipo. Usaré archivos .itmsp como ejemplo de tipo de paquete en la explicación a continuación:
Abra Automator en la carpeta Aplicaciones y seleccione Aplicación :
Seleccione Utilidades en la lista Biblioteca, seleccione Ejecutar script de shell y arrástrelo al panel de la derecha:
Conjunto de entrada Paso a como argumentos :
Reemplace el contenido del script predeterminado con esto:
Guarde la aplicación como itmspOpener:
Cierra Automator.
Ahora tiene una aplicación que puede abrir archivos .itmsp como carpetas si está asociada a ella.
Hay un problema cosmético: tal como está, los archivos asociados tendrán el icono de documento blanco estándar:
Arreglemos esto también:
Asegúrese de que Automator esté cerrado.
Seleccione itmspOpener y muestre su contenido:
Localice Contenido> Info.plist y ábralo con su editor favorito:
Reemplace el valor de esta clave en la
CFBundleDocumentTypes
matriz:y agregue esta clave:
Ahora, la sección se ve así:
Cambie al Finder, seleccione una carpeta, presione ⌘I, seleccione el icono de carpeta en la esquina superior izquierda y cópielo con ⌘C:
Abra Vista previa y seleccione Archivo> Nuevo desde el portapapeles. Guarde el archivo como
folder.icns
:Copiar
folder.icns
aitmspOpener/Contents/Resources
:Asocia un archivo .itmsp
itmspOpener
y presiona el botón Change All...:El ícono de los archivos .itmsp debería cambiar a una carpeta, o al menos eso pensé: desafortunadamente, este no fue el caso. Así que moví la aplicación itmspOpener a otra ubicación (creé una carpeta temporal en mi escritorio, la moví allí y de regreso a mi escritorio). Eso actualizó la información del icono en el Finder:
Ahora haga doble clic en un archivo .itmsp y vea cómo se abre como una carpeta:
fuente
.itmsp
carpeta es invisible. No puedo entender por qué, pero ahí está. Además, si tuviera mis druthers, no tendrías que hacer doble clic en el archivo para ver el interior, pero bueno.Una opción sería anular el registro del Application Loader
lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/
, pero se vuelve a registrar si se abre, si se reconstruye la base de datos de Launch Services, o posiblemente si se actualiza Xcode.También puede comentar las entradas en los diccionarios CFBundleDocumentTypes y UTExportedTypeDeclarations en
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plist
y ejecutarlsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/
. No invalida la firma del código de Xcode, pero las actualizaciones podrían sobrescribir los cambios.El camino completo a lsregister está
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
en 10.5 y posterior.fuente
Info.plist
anulará el registro de los tipos de archivos que eliminó de la lista? Puedo imaginarlo funcionando y puedo imaginarlo fácilmente fallando. también.lsregister -u $app && lsregister $app
parece aplicar los cambios a un Info.plist al menos en este caso.CFBundleDocumentTypes
por lo que puede eliminar esa "herramienta" cuando aparezca si no la necesita y / o cansado de modificarlo.Aquí hay un extracto relevante de la documentación de Apple sobre paquetes ( énfasis agregado )
Es casi seguro que Xcode representa que afirma que
.itmsp
representa un tipo de paquete, como se describe en Paquetes de documentos . Entonces, quizás eliminar esa extensión de XcodeInfo.plist
sea suficiente, pero sospecho que una vez que el Finder haya notado esa asociación, eliminarla de Xcode no la deshacerá. ¿Cuáles son las "aplicaciones recomendadas" que obtienes cuando haces clic derecho en "Abrir con ..."? Debe verificar todas sus listas de información.Sugiero ver si puede salirse con la suya
lsregister -u
para anular el registro de cualquier aplicación que reclame.itmsp
. De lo contrario, es posible que tenga que quitar.itmsp
de todas las plists y luego matar a toda la base de datos usando el buscador asociaciónlsregister -kill -seed
. Nunca lo hizo, sin saber cuánto daño le hará al resto de su sistema. Probablemente desee anular el registro, luego editar las listas, luego eliminar y volver a colocar la base de datos. No me sorprendería si anular el registro no elimina la asociación si ya la eliminó de la lista, y reseed la agregará nuevamente si aún no la ha eliminado. Además, de esta manera no perderá todas las otras asociaciones por las aplicaciones ofensivas.Lo que es peor, Xcode podría haber pasado y establecer el bit de paquete en todas las carpetas. Supongo que tendrías que escribir un script usando
GetFileInfo
ySetFile
para escanear el disco y deshacerlos, lo cual es un poco complicado, pero factible. Los dedos que cruzan los bultos permanecen sin ajustar. UseGetFileInfo
para verificar probando algunos.fuente
Creo que puedes arreglar esto usando
/usr/bin/SetFile -a B /path/to/file.itmsp
Pruébelo en uno antes de probarlo en todos los demás, obviamente.
Si necesita que se ejecute en todos ellos en una carpeta determinada:
find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;
debería hacerlo por ti.
fuente
SetFile -a B
establece el bit de paquete. De hecho, debería ser desactivado:SetFile -a b
. Pero esto no tendrá efecto ya que elHas bundle
bit no está establecido:GetFileInfo -ab foo.itmsp
retornos0
.