Подтвердить что ты не робот

Добавление опции "Открыть в..." для приложения iOS

На устройствах iOS приложение Mail предлагает вариант "Открыть в..." для вложений. Приложения, перечисленные, зарегистрировали свои CFBundleDocumentTypes с ОС. Мне интересно, как мое приложение может разрешить пользователям открывать файлы, созданные моим приложением в других приложениях. Является ли Mail единственным приложением, предоставляющим эту функцию?

4b9b3361

Ответ 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

Я успешно добавлю свое приложение в список "открыть",

Выбрать информацию в YourAppName.target Добавьте новый тип типа документа, имя которого вы хотите, и тип определен в https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

Надеюсь, вы тоже добьетесь успеха!

Однако функция, которую я хочу реализовать, это "Share", например, Facebook или Slack, я не могу сделать это... любой может дать мне большую руку:(