Добавление опции "Открыть в..." в приложение iOS
На устройствах iOS почтовое приложение предлагает опцию "Открыть в..." для вложений. Перечисленные приложения зарегистрировали свои CFBundleDocumentTypes в ОС. Что меня интересует, так это то, как мое приложение позволяет пользователям открывать файлы, созданные моим приложением, в других приложениях. Является ли Mail единственным приложением, которое предоставляет эту функцию?
4 ответа
Ознакомьтесь с разделами " Программирование взаимодействия с документами для iOS": регистрация типов файлов, поддерживаемых вашим приложением.
Пока вы предоставляете свои типы документов в своем Info.plist, другие приложения, которые распознают этот тип документа, будут перечислять ваше приложение в качестве "открытых". Конечно, это предполагает, что ваше приложение создает документы, которые могут открывать другие приложения.
Это отличный урок, который мне помог.
Я добавил поддержку для *.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;
}
Чтобы быть видимым в списке "открыть в..." для всех файлов, необходимо добавить это в свой список
<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!)
}
Я успешно добавляю свое приложение в список "Открыть в" следующим образом:
Добавьте новый фильтр типов документов, имя которого - это все, что вам нужно, и тип определяется в https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html
Надеюсь, у тебя тоже получится!
Тем не менее, я хочу реализовать функцию "Поделиться", как это делают Facebook или Slack, я не могу сделать это до сих пор... любой может дать мне большую руку:(