2012-02-20 28 views
15

Existe la aplicación de iPhone "Another Mail Client" que debería poder abrir cualquier archivo para enviarlo como archivo adjunto. Entonces, quiero asociar esta aplicación con cualquier archivo con cualquier extensión.¿Cómo asociar la aplicación de iPhone con _every_ tipo de archivo?

Siguiendo la documentación, debemos declarar la compatibilidad con archivos con el tipo de UTI raíz public.data - cualquier archivo debe pertenecer a este tipo. Funciona, pero no en absoluto. En este caso, nuestra aplicación no podrá abrir ningún archivo, solo aquellos que ya se hayan registrado en el sistema. Por ejemplo, si en cualquier aplicación (por ejemplo, Dropbox) intentaremos "abrir en ..." el archivo con una extensión desconocida (file.unknowntype) usando UIDocumentInteractionController, entonces la respuesta será negativa a pesar del hecho de que ya tenemos registrado nuestra aplicación y es compatible con la raíz UTI tipo public.data. Pero, si instala otra aplicación, que admite archivos con extensión (* .unknowntype), entonces nuestra aplicación también podrá abrir estos archivos y aparecerá en la lista de aplicaciones "abrir en ...".

UPD: @Gabriel Esta es CFBundleDocumentTypes parte de mi archivo info.plist:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>MyMail</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.data</string> 
     </array> 
     <key>CFBundleTypeRole</key> 
     <string>Viewer</string> 
     <key>LSHandlerRank</key> 
     <string>Default</string> 
     <key>CFBundleTypeIconFiles</key> 
     <array> 
      <string>Icon29.png</string> 
      ... 
      <string>Icon114.png</string> 
     </array> 
    </dict> 
</array> 
+0

Plese, muéstranos la parte CFBundleDocumentTypes de tu info.plist. – Gabriel

Respuesta

2

He hecho una aplicación con la siguiente configuración

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeIconFiles</key> 
     <array/> 
     <key>CFBundleTypeName</key> 
     <string>name</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.data</string> 
     </array> 
    </dict> 
</array> 

Cuando intento abrir un .pdf de Safari, esta aplicación aparece en la lista "abrir en ...". ¿Puedes hacer una aplicación de muestra y probarla?

UPD:

Parece que la alegación public.data '(tratado también public.item, public.content) significa archivo, que pertenece al conjunto "todos los conocidos a las UTI sistema", no cualquier archivo. Por lo tanto, podrá manejar 99% of files, que los usuarios desean enviar por correo electrónico, pero no todos. Otra forma sería exportar la UTI que creas importante, pero que no están en las UTI del sistema por defecto.

+0

El sistema admite el tipo de PDF de forma predeterminada, por lo que está bien. Intente abrir el archivo con una extensión desconocida (por ejemplo, * .unknowntype). – ddnv

0

Amigo, leí su pregunta correctamente antes de publicar la respuesta. Pensé que tendrías un conjunto de "tipos de archivos" ya conocidos para registrar en grandes cantidades. Sin embargo, desea acomodar dinámicamente su aplicación para registrar cualquier tipo de archivo proporcionado a su aplicación en el futuro y hacerla conectable. Por lo que a mi conocimiento se refiere, no puedes hacer que tu aplicación sea compatible universalmente con ningún tipo de archivo desconocido. Voy a explicar lo que sucede,

  1. Suponga que ha hecho una aplicación APP1 entonces no sabe nada de un .XYZ extensión de archivo e instalarlo en el iPhone.

  2. Pero luego desarrollo otra aplicación APP2, que contiene el código anterior y registro el tipo .XYZ de APP2 en cualquier iPhone que instale.

  3. Digamos que instalo APP2 en su iPhone, con APP1. Y cuando mi aplicación se ejecuta, entonces la extensión .XYZ (conocida por APP2 antes de tiempo) se registra en el iPhone.

Este es el motivo por el cual su aplicación APP1 puede utilizar este archivo .XYZ sorprendentemente.

En conclusión, debe conocer un tipo específico de extensiones antes de realizar la aplicación.

Sin embargo, aquí hay una posible solución.

Solución:

  1. decidir el número máximo de caracteres que desea apoyar en una extenstion. Digamos que 4.

  2. Ahora puede hacer que una pequeña rutina de fuerza bruta se ejecute en su aplicación para hacer todas las posibles combinaciones de caracteres y registrarlas todas. Esto debería hacer que cualquier archivo con extensión de hasta 4 caracteres se pueda adjuntar al correo.

Espero que así sea.

¡La mejor de las suertes!

+0

¿De verdad está seguro de que quiere recomendar 4 caracteres de fuerza bruta? ¡Esto dará como resultado 456976 registros! Eso es casi 96MB de datos plist siguiendo el ejemplo en [respuesta de fspirit] (http://stackoverflow.com/a/9432862/1608468)! – tomsmeding

0

Una idea para la investigación ...

Si la instalación de otro "soluciones" al problema de la aplicación a continuación, tratar de inspeccionar el archivo Info.plist otras aplicaciones para ver si se está registrando o exportar cualquier interesantes UTI s o similares configuraciones.

Parece que su aplicación podría estar haciendo la mitad del trabajo y la otra aplicación está completando la configuración faltante.

Usted puede inspeccionar el contenido de un archivo de aplicaciones ipa de iTunes copiándolo, el cambio de nombre a ipazip extraer el contenido y luego Show Package Contents en la aplicación en el interior.

Cuestiones relacionadas