6

Unsere App unterstützt nur den Hochformat-Modus. Das Präsentieren eines UIActivityViewControllers funktioniert.iOS: Absturz beim Teilen mit der Option "Nachricht"

*** Beenden app aufgrund nicht abgefangene Ausnahme 'UIApplicationInvalidInterfaceOrientation', Grund:

Doch mit der "Message" Option teilen die App abstürzt ‚Unterstützte Orientierungen mit der Anwendung keine gemeinsame Ausrichtung hat, und [MFMessageComposeViewController shouldAutorotate] zurückkehrt YES‘

mit einer anderen Option teilen, wie Facebook Messenger, funktioniert.

Lösungen von ähnlichen SO Fragen like this one funktionieren nicht, da sie vorschlagen, alle Orientierungen zu unterstützen. Wir wollen nur Portrait unterstützen.

1) Wie können wir die Option "Nachricht" unterstützen, während nur die Hochformat-Ausrichtung unterstützt wird, während die Hochformat-Ausrichtung nur in Info.plist unterstützt wird?

2) Warum können wir die Freigabeoption "Nachricht" in anderen Apps nur mit Hochformat in Info.plist unterstützen, aber nicht in diesem? Wo sollten wir nach Debugging-Zwecken suchen?

// Define share objects 
    let objectsToShare = ["test message"] as [Any] 

    // Configure UIActivityViewController 
    let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 
    activityViewController.excludedActivityTypes = 
     [UIActivityType.addToReadingList, 
     UIActivityType.assignToContact, 
     UIActivityType.print, 
     UIActivityType.copyToPasteboard] 

    // Define completion handler 
    activityViewController.completionWithItemsHandler = doneSharingHandler 

    // Show UIActivityViewController 
    present(activityViewController, animated: true, completion: nil) 
+0

Wie hackisch bist du bereit zu gehen? Siehe einen hashischen Vorschlag in meiner Antwort. –

+0

@LeoNatan hahaha eine Frage, die du nie auf SO hören willst ... :) wird deine Antwort überprüfen und dort kommentieren. danke für Ihre Hilfe! – Crashalot

+0

Ich habe eine kleine Beispiel-App erstellt, um zu testen, was Sie tun (unterstützt nur die Ausrichtung des Hochformat-Bildschirms), und ich kann das von Ihnen zitierte Problem nicht wirklich reproduzieren. Ich habe 2 oder 3 Apps im App Store, die es Benutzern erlauben, Dinge mit 'UIActivityViewController' zu teilen. Es handelt sich ausschließlich um Portrait-Apps, und ich habe dieses Problem noch nie mit Nachrichten, E-Mails oder anderen Freigabeoptionen gesehen. Also, mein Vorschlag an Sie wäre, weiter zu untersuchen, wo genau die App abstürzt. Ich denke, Sie sollten Ihren Code erneut prüfen und sicherstellen, dass Sie an anderer Stelle in Ihrem Code nichts tun, um dieses Problem zu verursachen. I – pranjal

Antwort

1

Ich habe eine Weile versucht diesen Fehler zu reproduzieren und konnte ihn nicht zum Absturz bringen. Endlich war es mir möglich, genau diesen Absturz zu bekommen, als ich UIInterfaceOrientationPortrait zurückgab, als ich UIInterfaceOrientationMaskPortrait für eine der Orientierungsfunktionen hätte zurückgeben sollen. Überprüfen Sie die Implementierung Ihres View Controllers supportedInterfaceOrientations und Ihre Implementierung von application:supportedInterfaceOrientationsForWindow:

+0

Danke Jon! Haben Sie versucht, es zu reproduzieren, wenn Sie etwas mit Textnachrichten teilen, oder wie haben Sie es reproduziert? Keiner der View-Controller gibt Wertorientierungswerte zurück. Wir verlassen uns darauf, dass die Anwendung die Werte global für die gesamte App festlegt, was für andere Apps funktioniert, die wir erstellt haben, aber aus irgendeinem Grund nicht für diese. – Crashalot

+0

Dies ist ein Kommentar, keine Antwort. –

+0

@LeoNatan er half tatsächlich bei der Lösung (siehe unten), indem er vorschlug, überall nach 'supportedInterfaceOrientations' zu suchen ... kurz gesagt, es war ein blöder, dummer, dummer Dev-Fehler. – Crashalot

1

Alle Ihre einzelnen View-Controller kann nur Porträt unterstützen, indem supportedInterfaceOrientations Umsetzung UIInterfaceOrientationPortrait zurückzukehren.

Aber Ihre App, also die Info.plist oder die application(_:supportedInterfaceOrientationsFor:) App delegieren, sollte alle Orientierungen unterstützen.

Dies ermöglicht der Laufzeit, diese MFMessageComposeViewController wie gewünscht darzustellen, aber alle Ihre View Controller wird immer noch im Hochformat, was Sie wollen.

+0

Dies ist die richtige Lösung. –

+0

@ LeoNatan Frage wurde geklärt, um speziell zu fragen, wie das Ziel erreicht werden kann, ohne andere Orientierungen in Info.plist – Crashalot

+0

@Crashalot zu unterstützen. Okay, dann unterstütze keine andere Orientierung in der _Info.plist_. Unterstützen Sie sie stattdessen in der Anwendung des Anwendungsdelegaten (_: supportedInterfaceOrientationsFor:) '. – matt

1

Hier ist eine sehr haschische Lösung, die für eine App funktionieren sollte, die nur im Hochformat präsentiert.

Erstellen Sie eine Kategorie über MFMessageComposeViewController und überschreiben Sie supportedInterfaceOrientations und shouldAutorotate, um nur Porträt zu unterstützen.

Möglicherweise müssen Sie diese Kategorie in Objective C erstellen, damit sie tatsächlich kompiliert wird, aber es funktioniert.

+0

Nochmals vielen Dank für Ihre Hilfe. aufgewertet! Was verwirrend ist, ist, dass wir in anderen Apps nur Portraits in info.plist unterstützen können und keine Probleme mit 'MFMessageComposeViewController' haben, so dass es möglich ist, das Ziel zu erreichen, ohne' MFMessageComposeViewController' zu überschreiben oder info.plist zu ändern. versuchen, die möglichen Ursachen zu verstehen, um die Ursache in unserer App zu debuggen. – Crashalot

+1

danke für Ihre Hilfe! endlich die Ursache aufgespürt, was ein peinlich dummer Fehler war. sehen Sie unten, wenn Sie sich interessieren, aber upvoted Ihre Antwort trotzdem. Danke noch einmal! BTW ... 45.K ... beeindruckende Wiederholung! – Crashalot

0

Streufehler (schlechter Entwickler, schlechter Entwickler, schlechter Entwickler!) An anderer Stelle in der App verursachte den Fehler.

Eine Erweiterung von UINavigationController an anderer Stelle im Code überschrieb supportedInterfaceOrientations und verursachte jeden hier, Zeit über einen dummen Fehler zu verschwenden. Es tut uns leid! Hoffentlich kommt unsere Schlampigkeit einigen zukünftigen Benutzern zugute.

Durch Entfernen der Erweiterung wurde der Fehler behoben.

Wenn SO sich jemals entscheidet, die schlechtesten Entwickler zu erkennen und zu prämieren, stehen wir gerne für die Nominierung. :)

Verwandte Themen