Quiero tener una extensión, llamada .content, para almacenar todos los archivos que están vinculados al nombre del archivo. El sistema operativo debe reconocer la extensión ".content" como una extensión de archivo en lugar de un mapa normal. Solo se debe acceder a los archivos de la extensión abriendo la extensión con la opción "Mostrar contenido del paquete". Espero que alguien pueda ofrecerme una solución a mi problema.
Las carpetas que terminan en .bundle ya actúan de esa manera. Sin embargo, se abren en la Terminal de forma predeterminada.
El tipo de archivo se define en /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
:
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>com.apple.bundle</string>
<string>com.apple.package</string>
</array>
<key>UTTypeDescription</key>
<string>bundle</string>
<key>UTTypeIdentifier</key>
<string>com.apple.generic-bundle</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>com.apple.ostype</key>
<string>BNDL</string>
<key>public.filename-extension</key>
<string>bundle</string>
</dict>
</dict>
Para que las carpetas que terminan en .content se traten como paquetes, agregue una entrada como esta:
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>com.apple.bundle</string>
<string>com.apple.package</string>
</array>
<key>UTTypeIdentifier</key>
<string>my.content</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>content</string>
</dict>
</dict>
Luego reconstruya la base de datos de Launch Services para aplicar los cambios:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -domain local -domain system -domain user
También puede agregar esto a una matriz CFBundleDocumentTypes en Info.plist de cualquier aplicación:
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>content</string>
</array>
<key>CFBundleTypeRole</key>
<string>None</string>
<key>LSTypeIsPackage</key>
<true/>
</dict>
Para aplicar cambios, reconstruya la base de datos de Launch Services o toque el paquete de aplicaciones. Sin embargo , si la aplicación está firmada, la modificación de Info.plist invalida la firma del código .
OS X viene con un conjunto de extensiones que se asignan a aplicaciones específicas (y la mayoría de estas se asignan a aplicaciones proporcionadas por Apple), por lo que podría solicitarle a Apple que realice el cambio, pero eso sería poco probable.
El otro mecanismo para inyectar un .extension específico para el mapeo de aplicaciones en la base de datos de Launch Services es instalar una aplicación que le indique al sistema que asigne ciertos tipos de archivos y extensiones a esa aplicación específica.
Entonces, para mantener las cosas en el tema aquí, solo lo dirigiremos a Stack Overflow para preguntar cómo hacer su propia aplicación. Si no está buscando desarrollar una aplicación, también puede modificar la aplicación que desea para abrir su extensión de archivo personalizada cambiando su archivo interal info.plist:
Lo siento si este nivel de detalle es más técnico de lo que deseas, pero quería responder esto para cualquiera que necesite saber cómo modificar las cosas.
mmmmmm
bmike