2010-10-20 15 views
42

Sui dispositivi iOS, l'app Mail offre l'opzione "Apri in ..." per gli allegati. Le app elencate hanno registrato i loro CFBundleDocumentTypes con il sistema operativo. Quello che mi chiedo è come la mia app possa consentire agli utenti di aprire file generati dalla mia app in altre app. Mail è l'unica app che fornisce questa funzionalità?Aggiunta dell'opzione "Apri in ..." all'app per iOS

+1

Sono abbastanza sicuro che la risposta è qui: http://stackoverflow.com/questions/2774343/how-do-i-associa-file-types-with-an-iphone-application –

+1

L'articolo aggiornato che fornisce le informazioni pertinenti può ora essere trovato sotto [ Argomenti di programmazione dell'interazione del documento] (http://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/PreviewingandOpeningItems.html#//apple_ref/doc/uid/TP40010410-SW1 "Programmazione dell'interazione documento Argomenti "). – robotpukeko

risposta

36

Dai uno sguardo allo Document Interaction Programming Topics for iOS: Registering the File Types Your App Supports.

Finché si forniscono i tipi di documento nel proprio Info.plist, altre app che riconoscono quel tipo di documento elencheranno l'app nelle proprie scelte "aperte". Ovviamente, presume che la tua app crei documenti che altre app possono aprire.

+0

Grazie, sembra esattamente quello che stavo cercando. E, sì, la mia app crea .csv e .zip File. – westsider

+0

potresti voler modificare la tua risposta per fare riferimento al nuovo link (Apple ha riorganizzato la libreria di riferimento iOS, apparentemente). – westsider

+0

Ho aggiunto il tipo di documento nella mia app. per esempio ho aggiunto il tipo PDF.Ma quando gestisco l'interazione con il documento, sto solo facendo l'applicazione rapida. –

15

This è un ottimo tutorial, che mi ha aiutato.

Ho aggiunto il supporto per i file *.xdxf nella mia app. In breve, devi fare due cose. In primo luogo - aggiungere voci come questo per file del app Plist:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>XDXF Document</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.alwawee.xdxf</string> 
     </array> 
    </dict> 
</array> 
<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeDescription</key> 
     <string>XDXF - XML Dictionary eXchange Format</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.text</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.alwawee.xdxf</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>xdxf</string> 
      <key>public.mime-type</key> 
      <string>text/xml</string> 
     </dict> 
    </dict> 
</array> 

Qui, si dovrebbe aggiungere UTExportedTypeDeclarations solo se il tipo di file è unico. O con altre parole non è here.

In secondo luogo - gestire metodo delegato in AppDelegate:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 

    if (url != nil && [url isFileURL]) { 

     // xdxf file type handling 

     if ([[url pathExtension] isEqualToString:@"xdxf"]) { 

      NSLog(@"URL:%@", [url absoluteString]); 

     } 

    } 

    return YES; 
} 
+0

Il collegamento del tutorial è rotto. –

4

Per essere visibile nella lista di "Apri in ..." per tutti i file, è necessario aggiungere questo alla vostra plist

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>Open All Files</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.content</string> 
      <string>public.data</string> 
     </array> 
    </dict> 
</array> 

Una volta visualizzata l'app in "Apri in ...", è necessario caricare tale file. La maggior parte sito web mostra per implementare questa funzione:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool 
{ 
    println("Open URL "+url.path!) 
} 

Ma questa funzione che ha funzionato bene in IOS 7 arresti in IOS 8. ho dovuto implementare la seguente funzione invece per farlo funzionare.

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool 
{ 
    println("Open URL "+url.path!) 
} 
2

aggiungo la mia applicazione in "Apri in" lista con successo come segue,

Select info in YourAppName.target aggiungere un nuovo filtro tipo di documento, il cui nome è tutto quello che vuoi e il tipo è definito in https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

Spero anche tu possa essere un successo !!

Tuttavia, la caratteristica che voglio implementare è "Condividi" come Facebook o Slack di, non posso fare ancora ... qualcuno mi può dare una grossa mano :(

Problemi correlati