2012-02-20 6 views
15

C'è l'app per iPhone "Un altro client di posta" che dovrebbe essere in grado di aprire qualsiasi file per inviarlo come allegato. Quindi, voglio associare questa applicazione con qualsiasi file con qualsiasi estensione.Come associare l'applicazione iPhone con il tipo di file _every_?

In seguito alla documentazione, dovremmo dichiarare il supporto per i file con tipo UTI radice public.data - qualsiasi file dovrebbe appartenere a questo tipo. Funziona, ma non del tutto. In questo caso, la nostra app non sarà in grado di aprire alcun file, ma solo quelli che sono già stati registrati nel sistema. Ad esempio, se in qualsiasi applicazione (ad es. Dropbox) proveremo a "aprire in ..." file con un'estensione sconosciuta (file.unknowntype) utilizzando UIDocumentInteractionController, quindi la risposta sarà negativa nonostante il fatto che abbiamo già registrato la nostra applicazione e supporta il tipo UTI root public.data. Tuttavia, se si installa un'altra applicazione, che supporta file con estensione (* .unknowntype), la nostra applicazione sarà anche in grado di aprire questi file e comparirà nell'elenco delle applicazioni "aperte in ...".

UPD: @Gabriel Questo è CFBundleDocumentTypes parte del mio file 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, mostraci la parte CFBundleDocumentTypes del tuo info.plist. – Gabriel

risposta

2

Ho fatto un app con la seguente configurazione

<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> 

Quando provo ad aprire un file .pdf da Safari, questa app compare nella lista "apri in ..". Puoi creare un'app campione e provarla?

UPD:

Sembra rivendicazione 'public.data' (provato anche public.item, public.content) significa file, che appartiene all'insieme "tutti noti per sistema UTIs", non ha alcun file. Quindi, sarete in grado di gestire 99% of files, che gli utenti vogliono inviare via email, ma non tutti. Un altro modo sarebbe quello di esportare UTI che pensi siano importanti, ma che non sono in UTI di sistema per impostazione predefinita.

+0

Il sistema supporta il tipo di PDF per impostazione predefinita, quindi è OK. Prova ad aprire il file con estensione sconosciuta (ad es. * .unknowntype). – ddnv

0

Amico, ho letto correttamente la domanda prima di pubblicare la risposta. Ho dato un altro pensiero che avrai una serie di "tipi" già noti di file da registrare in gruppo. Tuttavia, desideri ospitare dinamicamente la tua app per registrare in futuro qualsiasi tipo di file fornito alla tua app e renderlo collegabile. Per quanto mi riguarda, non puoi creare app per supportare universalmente alcun tipo di file sconosciuto. Mi spiego cosa succede,

  1. Supponiamo si effettua un'APP1 applicazione allora non conosce un xyz estensione del file e installarlo su iPhone.

  2. Ma, successivamente, sviluppo un'altra applicazione APP2, che contiene il codice sopra riportato e registro il tipo .XYZ da APP2 in qualsiasi iPhone che installa.

  3. Quindi, diciamo che installo APP2 sul tuo iPhone, avendo APP1. E quando viene eseguita la mia app, l'estensione .XYZ (nota ad APP2 in anticipo) viene registrata nell'iPhone.

Questa è la ragione per cui la tua app APP1 può utilizzare questo file .XYZ in modo sorprendente.

Concludendo, è necessario conoscere in anticipo un tipo specifico di estensioni prima di eseguire l'app.

Tuttavia, ecco una possibile soluzione per questo.

Soluzione:

  1. decidere il numero massimo di caratteri che si desidera sostenere in un extenstion. Diciamo 4.

  2. Ora puoi eseguire una piccola routine Brute-Force nella tua app per creare tutte le possibili combinazioni di caratteri e registrarle tutte. Questo dovrebbe rendere qualsiasi file con estensione fino a 4 caratteri collegabili alla posta.

Spero che dovrebbe fare il trucco.

Buona fortuna!

+0

Sei proprio sicuro di voler consigliare brute-force a 4 caratteri? Ciò comporterà 456976 registrazioni! Sono quasi 96 MB di dati plist che seguono l'esempio in [risposta di fspirit] (http://stackoverflow.com/a/9432862/1608468)! – tomsmeding

0

Un'idea per le indagini ...

Se l'installazione di un altro app "correzioni" il problema quindi provare ispezionando il file Info.plist altre applicazioni per vedere se è la registrazione o l'esportazione di qualsiasi interessanti UTI s o simili impostazioni.

Sembra che la tua app stia facendo solo metà del lavoro e l'altra app sta completando la configurazione mancante.

è possibile controllare il contenuto di un file di ipa applicazioni da iTunes copiandolo, rinominare ipa-zip estrarre il contenuto e poi Show Package Contents sul app all'interno.

Problemi correlati