2013-01-23 5 views
6

Sto lavorando a un'applicazione iOS che consente di esportare i dati inviando un file via e-mail. L'app registra il tipo di file come un file con l'estensione 'sainputs' (questo è così che l'app può anche aprire un file da un'e-mail o da un dropbox per importare i valori - questo funziona bene). Sto cercando di aggiungere la possibilità di inviare il file a qualsiasi altra applicazione in grado di aprire vari tipi di file. Dropbox è un buon esempio: si suppone che sia in grado di aprire qualsiasi tipo di file.iOS: errore durante l'invio di file specifici dell'applicazione a Dropbox utilizzando UIDocumentInteractionController

Attualmente sto tentando questo visualizzando un UIDocumentInteractionController inizializzato con l'URL del file. Quando viene visualizzato, l'app Dropbox viene visualizzata come una delle opzioni disponibili per l'apertura del file, come previsto.

Tuttavia, quando si preme l'icona Dropbox, non accade nulla e nella console vedo il seguente testo:

LaunchServices: Invalid LSOpenOperation request - No applications found to open document 

Nel documento plist dell'app registra un tipo di documento con UTI com.mycompany.myapp. sainputs e registra un UTI di tipo esportato con identificatore com.mycompany.myapp.sainputs, con estensione di nome file pubblica "sainputs" e myapp/input di tipo MIME.

Ecco gli estratti rilevanti dal file plist:

<key>CFBundleDocumentTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleTypeName</key> 
      <string>My App's File Type</string> 
      <key>LSHandlerRank</key> 
      <string>Owner</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>com.mycompany.myapp.sainputs</string> 
      </array> 
     </dict> 
     <array> 
. 
. 
. 
<key>UTExportedTypeDeclarations</key> 
    <array> 
     <dict> 
      <key>UTTypeConformsTo</key> 
      <array/> 
      <key>UTTypeDescription</key> 
      <string>My App's File Type</string> 
      <key>UTTypeIdentifier</key> 
      <string>com.mycompany.myapp.sainputs</string> 
      <key>UTTypeTagSpecification</key> 
      <dict> 
       <key>public.filename-extension</key> 
       <string>sainputs</string> 
       <key>public.mime-type</key> 
       <string>steuerapp/inputs</string> 
      </dict> 
     </dict> 
     <array> 

Ho provato a cambiare il tipo MIME per 'application/octet-stream' nel file plist. Non ha fatto la differenza.

Qualsiasi consiglio/idea sarebbe molto apprezzato.

+2

Fornire un valore per la chiave 'UTTypeConformsTo'. Forse 'public.data' funzionerà. – rmaddy

+0

Grazie rmaddy! Questo ha fatto il trucco! Si prega di inviare questo come una risposta, quindi posso contrassegnarlo come la risposta corretta. – bgh

risposta

5

Come suggerito da @dydy e confermato da @bgh, questo risolve il problema. Ho appena incontrato lo stesso problema.

Oltre a definire il tipo universale personalizzato, è anche possibile suggerire che questo tipo è un "sottotipo" di un tipo più generale. Per esempio. specificando esplicitamente l'UTI 'public.data' nel UTTypeConformsTo chiave come segue:

<dict> 
    <key>UTTypeConformsTo</key> 
     <array> 
     <string>public.data</string> 
     </array> 
    <key>UTTypeDescription</key> 
     <string>My App's File Type</string> 
    <key>UTTypeIdentifier</key> 
     <string>com.mycompany.myapp.sainputs</string> 
    <key>UTTypeTagSpecification</key> 
     <dict> 
     <key>public.filename-extension</key> 
      <string>sainputs</string> 
     <key>public.mime-type</key> 
      <string>steuerapp/inputs</string> 
     </dict> 
</dict> 

È quindi possibile specificare le UTI personalizzati come argomento nella UIDocumentInteractionController:

UIDocumentInteractionController *documentController = ...; 
documentController.UTI = @"com.mycompany.myapp.sainputs"; 

Apples documentation about this can be found here.

0

Nel caso in cui questo accada a qualcun altro:

non potevo far funzionare la risposta di Klaas perché avevo un'altra app sul devi ce (la versione "light") che dichiara anche la stessa UTI, con impostazioni errate. È necessario aggiungere "public.data" in ogni app che dichiara il tipo prima che funzioni.

Giusto per essere sicuri, vorrei raccomandare il debug con una sola app installata, quindi aggiungere l'altra e vedere se tutto funziona ancora.

Problemi correlati