Добавление опции «Открыть в ...» в приложение iOS - PullRequest
44 голосов
/ 20 октября 2010

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

Ответы [ 4 ]

37 голосов
/ 20 октября 2010

Посмотрите на Темы программирования взаимодействия с документами для iOS: Регистрация типов файлов, поддерживаемых вашим приложением .

Пока вы предоставляете свои типы документов в своем Info.plist, другие приложения, которые распознают этот тип документа, будут перечислять ваше приложение в их вариантах "открыть в". Конечно, это предполагает, что ваше приложение создает документы, которые могут открывать другие приложения.

19 голосов
/ 20 августа 2013

Этот - отличный урок, который мне помог.

Я добавил поддержку *.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;
}
4 голосов
/ 14 октября 2014

Чтобы быть видимым в списке «открыть в ...» для всех файлов, вам нужно добавить это в свой список

<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>

Как только ваше приложение отобразится в «открыть в ..»", вам нужно загрузить этот файл.Большинство веб-сайтов показывают, как реализовать эту функцию:

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!)
}
2 голосов
/ 15 февраля 2016

Я успешно добавляю свое приложение в список «Открыть в» следующим образом:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...