49 Stimmen

Hinzufügen der Option "Öffnen in..." zur iOS-App

Auf iOS-Geräten bietet die Mail-App die Option "Öffnen in..." für Anhänge. Die aufgeführten Apps haben ihre CFBundleDocumentTypes beim Betriebssystem registriert. Ich frage mich, wie meine App es Benutzern ermöglichen könnte, von meiner App generierte Dateien in anderen Apps zu öffnen. Ist Mail die einzige Anwendung, die diese Funktion bietet?

38voto

Jay O'Conor Punkte 2475

Werfen Sie einen Blick auf die Dokument Interaktionsprogrammierungsthemen für iOS: Registrieren der von der App unterstützten Dateitypen .

Solange Sie Ihre Dokumenttypen in Ihrer Info.plist angeben, werden andere Anwendungen, die diesen Dokumenttyp erkennen, Ihre Anwendung in der Auswahl "Öffnen in" aufführen. Das setzt natürlich voraus, dass Ihre Anwendung Dokumente erstellt, die andere Anwendungen öffnen können.

23voto

Denis Kutlubaev Punkte 13957

Este ist ein tolles Tutorial, das mir geholfen hat.

Ich habe Unterstützung hinzugefügt für *.xdxf Dateien in meiner Anwendung. Kurz gesagt, Sie müssen zwei Dinge tun. Erstens - fügen Sie Einträge wie den folgenden zu Ihrer App hinzu Plist Datei:

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

Hier sollten Sie Folgendes hinzufügen UTExportedTypeDeclarations nur, wenn Ihr Dateityp eindeutig ist. Oder mit anderen Worten ist nicht aquí .

Zweitens - Behandlung der delegierten Methode in 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;
}

6voto

user2962499 Punkte 476

Um in der Liste der "Öffnen in..." für alle Dateien sichtbar zu sein, müssen Sie Folgendes zu Ihrer Liste hinzufügen

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

Sobald Ihre App in "Öffnen in..." angezeigt wird, müssen Sie diese Datei laden. Die meisten Websites zeigen, dass sie diese Funktion implementieren:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool
{
   println("Open URL "+url.path!)
}

Aber diese Funktion, die in IOS 7 gut funktionierte, stürzt in IOS 8 ab. Ich musste stattdessen die folgende Funktion implementieren, um sie zum Laufen zu bringen.

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool 
{
   println("Open URL "+url.path!)
}

2voto

Yvonne Punkte 179

Ich füge meine Anwendung wie folgt erfolgreich in die Liste "Öffnen in" ein,

Select info in YourAppName.target Fügen Sie einen neuen Dokumenttyp-Filter hinzu, dessen Name beliebig ist und dessen Typ definiert ist in https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

Ich hoffe, dass auch Sie Erfolg haben werden!!

Allerdings ist die Funktion, die ich implementieren möchte "Share" wie Facebook oder Slack zu tun, kann ich nicht machen es immer noch ... jemand kann mir eine große Hilfe geben :(

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X