Come si invia un file a un'altra app sapendo quale UTI l'app supporta? Diciamo che il file non ha estensione di file, ma capita di conoscere l'UTI del file.UIDocumentInteractionController, nessuna estensione file ma UTI
Ho provato il seguente:
// target is a NSURL with the location of the extension less file on the system
// knownUTI is a NSString containing the UTI of the file
UIDocumentInteractionController* dic = [UIDocumentInteractionController interactionControllerWithURL:target];
[dic retain];
dic.delegate = self;
dic.UTI = knownUTI;
[dic presentOpenInMenuFromRect:CGRectZero inView:superController.view animated:YES]
Essa mostra App supportato, tuttavia, se seleziono esso, non passerà App. Il delegato chiama il
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application
ma
- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application
non è mai chiamato e l'applicazione non è mai commutazione.
L'obiettivo App esporta la sua UTI nel seguente:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array/>
<key>CFBundleTypeName</key>
<string>Migration DocType</string>
<key>CFBundleTypeRol</key>
<string>Shell</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.mycomp.customstring</string>
</array>
</dict>
</array>
...
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My custom UTI</string>
<key>UTTypeIdentifier</key>
<string>com.mycomp.customstring</string>
</dict>
</array>
Dato che questo non ha funzionato, ho anche provato ad aggiungere un'estensione personalizzata. Tuttavia, non funzionerebbe in questo modo. Quando aggiungo l'estensione personalizzata al file, lo consegno allo DocumentInteractionController
e funziona. Tuttavia, l'elenco delle applicazioni mostra tutte le altre applicazioni che supportano la stessa estensione di file indipendentemente dal tipo di UTI di tipo I.
dire che mi dichiaro 2 IVU in 2 diverse applicazioni:
App1 with UTI1: com.mycomp.a with extension .abc
App2 with UTI2: com.mycomp.b with extension .abc
Al momento della consegna il file sul DocumentInteractionController, e l'impostazione del UTI per com.mycomp.a
mostrerà anche App2 come una possibile applicazione in grado di gestire il file .
ho definito un UTI con l'estensione nel modo seguente:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My UTI Type</string>
<key>UTTypeIdentifier</key>
<string>com.mycomp.a</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>abc</string>
<key>public.mime-type</key>
<string>application/abc</string>
</dict>
</dict>
</array>
Vorrei davvero apprezzare il vostro aiuto, io sono un po 'bloccato. Quindi, ancora una volta la domanda: come posso inviare un file a un'app con UTI noto o senza estensione o con la stessa estensione di altri file di cui non voglio mostrare le applicazioni come scelte in DocumentInteractionController?
Grazie
Ho trovato una soluzione più semplice. Il codice di 'willBeginSendingToApplication:' può essere già eseguito dopo che l'apertura nel menu è stata richiamata con successo, questo elimina la necessità di swizzle i metodi! – Jan
Si prega di fornire il codice per questo. Ho provato a impostare la proprietà name ma non si riflette nell'app di terze parti. – slott
Sì, una descrizione dettagliata della soluzione * reale * sarebbe molto utile. – buildsucceeded