На устройствах iOS приложение Mail предлагает вариант "Открыть в..." для вложений. Приложения, перечисленные, зарегистрировали свои CFBundleDocumentTypes с ОС. Мне интересно, как мое приложение может разрешить пользователям открывать файлы, созданные моим приложением в других приложениях. Является ли Mail единственным приложением, предоставляющим эту функцию?
Добавление опции "Открыть в..." для приложения iOS
Ответ 1
Взгляните на Темы программирования взаимодействия с документами для iOS: Регистрация типов файлов, поддерживаемых вашим приложением.
Пока вы указываете свои типы документов в Info.plist, другие приложения, которые распознают этот тип документа, будут отображать ваше приложение в своих вариантах "открыто". Конечно, это предполагает, что ваше приложение создает документы, которые могут открывать другие приложения.
Ответ 2
Это отличный учебник, который мне помог.
Я добавил поддержку файлов *.xdxf
в своем приложении. Короче говоря, вам нужно сделать две вещи. Сначала добавьте такие элементы в файл приложения 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>
Здесь вы должны добавить UTExportedTypeDeclarations
, только если ваш тип файла уникален. Или другими словами не здесь.
Второй - обработать метод делегата в 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;
}
Ответ 3
Чтобы быть видимым в списке "открыть в..." для всех файлов, вам нужно добавить это в свой 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>
Как только ваше приложение отображается в "open in...", вам необходимо загрузить этот файл. На большинстве веб-сайтов реализована эта функция:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool
{
println("Open URL "+url.path!)
}
Но эта функция, которая отлично работала в IOS 7, сбой в IOS 8. Мне пришлось реализовать следующую функцию, чтобы заставить ее работать.
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool
{
println("Open URL "+url.path!)
}
Ответ 4
Я успешно добавлю свое приложение в список "открыть",
Добавьте новый тип типа документа, имя которого вы хотите, и тип определен в https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1
Надеюсь, вы тоже добьетесь успеха!
Однако функция, которую я хочу реализовать, это "Share", например, Facebook или Slack, я не могу сделать это... любой может дать мне большую руку:(