Как отправить файл в другое приложение, зная, какой UTI поддерживает приложение? Допустим, у файла нет расширения, но я случайно знаю UTI файла.
Я попробовал следующее:
// 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]
Он показывает поддерживаемое приложение, однако, если я выбираю его, оно не переключает приложение. Делегат вызывает
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application
но
- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application
никогда не вызывается и приложение не переключается.
Целевое приложение экспортирует свой UTI следующим образом:
<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>
Поскольку это не сработало, я также попробовал добавить пользовательское расширение. Тем не менее, этот способ не сработал. При добавлении пользовательского расширения в файл я передаю DocumentInteractionController
и он работает. Однако в списке приложений отображаются все другие приложения, поддерживающие то же расширение файла, независимо от типа UTI, который я предоставляю.
Скажем, я объявляю 2 UTI в двух разных приложениях:
App1 with UTI1: com.mycomp.a with extension .abc
App2 with UTI2: com.mycomp.b with extension .abc
При передаче файла DocumentInteractionController и установке UTI на com.mycomp.a
он также покажет App2 как возможное приложение, способное обработать файл.
Я определил UTI с расширением следующим образом:
<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>
Буду очень признателен за помощь, я немного застрял. Итак, снова вопрос: Как мне отправить файл в приложение с известным UTI либо без расширения, либо с тем же расширением, что и другие файлы, которые я не хочу показывать приложениям в качестве выбора в DocumentInteractionController?
Спасибо