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?
Antworten
Zu viele Anzeigen?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.
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;
}
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!)
}
Ich füge meine Anwendung wie folgt erfolgreich in die Liste "Öffnen in" ein,
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 :(