Ich verwende die Hintergrundaufgabe, um den Timer im Hintergrund auszuführen und den Standort des Benutzers zu aktualisieren. Es ist deklariert als:
UIBackgroundTaskIdentifier bgTask;
in der Header-Datei und initialisiert als:
bgTask = UIBackgroundTaskInvalid;
Trotzdem bekomme ich diese Nachricht in der GDB:
EndBackgroundTask kann nicht beendet werden: Es gibt keine Hintergrundaufgabe mit der Kennung 23dc, oder sie wurde möglicherweise bereits beendet. Brechen Sie UIApplicationEndBackgroundTaskError () zum Debuggen ein.
Warum? Und wie kann ich das lösen?
objective-c
ios7
xcode5
Raj
quelle
quelle
Antworten:
Ich verliere viele Tage bei der Suche nach dem Code oder Framework, das diese Warnung verursacht hat, in der Debug-Konsole. BackgroundTask kann nicht beendet werden: Es gibt keine Hintergrundaufgabe mit der Kennung 2 (0x2) oder sie wurde möglicherweise bereits beendet. Brechen Sie UIApplicationEndBackgroundTaskError () zum Debuggen ein .
Schließlich habe ich ein leeres Projekt Single View App erstellt . Nur von Xcode generierter Code, ich starte die App auf dem Simulator, stelle sie in den Hintergrund und sehe die gleiche Warnung. Ich kann also sagen, dass es sich um ein iOS 13-Problem handelt. Ich hoffe, Apple wird das Problem schnell beheben, da ich in Crashlytics einen Absturz in meiner App gefunden habe, der dadurch verursacht wurde.
quelle
Wechseln Sie in Xcode zum Haltepunktnavigator (Ansicht> Navigatoren> Haltepunktnavigator anzeigen), drücken Sie dann unten links die Taste +, wählen Sie Symbolischen Haltepunkt hinzufügen und geben Sie als Symbol „UIApplicationEndBackgroundTaskError“ ein.
quelle
Sie müssen bgTask = UIBackgroundTaskInvalid setzen
in zwei Augenblicken
Ich glaube, Sie verpassen einen dieser beiden Momente und deshalb bekommen Sie diesen Fehler.
Siehe Apple-Beispielcode:
- (void)applicationDidEnterBackground:(UIApplication *)application { bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ // Clean up any unfinished task business by marking where you // stopped or ending the task outright. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; // Start the long-running task and return immediately. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Do the work associated with the task, preferably in chunks. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }); }
Link: https://developer.apple.com/documentation/backgroundtasks/bgtask?language=objc
quelle
Verwenden Sie die Standortaktualisierung im Hintergrund?
Wenn ja, fügen Sie die folgenden Code zum Zeitpunkt des Erhaltens Standort Genehmigung vom Benutzer - Apple - verändert die Standardeinstellung für
allowsBackgroundLocationUpdates
zuNO
von iOS 9 ab.if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) { locationManager.allowsBackgroundLocationUpdates = YES; }
Bitte stellen Sie sicher, dass Sie die 'Standortaktualisierungen' für Hintergrundmodi unter Ihrem Projekt 'Signieren & Funktionen' aktiviert haben. Sonst stürzt es ab.
quelle
Reproduziert, hier ist meine gesamte App:
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { return true } }
Und wenn ich es in den Hintergrund bringe, bekomme ich die gleiche Nachricht. Kein Storyboard oder andere Geräusche.
quelle
Mit Swift 5 - IOS 13.2.2 - Xcode 11.2 Beta 2 (11B44) konnte ich diesen Fehler durch beheben
Aktivieren von Push-Benachrichtigungen in den Funktionen der App
Importieren Sie das UserNotifications-Framework
Fügen Sie dann diesen Code hinzu
let center = UNUserNotificationCenter.current() center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in // If granted comes true you can enabled features based on authorization. guard granted else { return } DispatchQueue.main.async { application.registerForRemoteNotifications() } }
quelle
In Bezug auf die Meldung "BackgroundTask kann nicht beendet werden: Es gibt keine Hintergrundaufgabe mit Kennung ..." kann dies, wie andere gesagt haben, ein roter Hering sein, der nichts mit dem zu tun hat, was Sie tun.
In Bezug auf Ihr Ziel, den Standort des Benutzers regelmäßig abzurufen, anstatt zu versuchen, Ihre App mit einem Timer im Hintergrund laufen zu lassen, sollten Sie stattdessen verschiedene Dienste zur Aktualisierung des Benutzerstandorts im Hintergrund in Anspruch nehmen , z. B. den Besuchsstandortdienst oder der Service für signifikante Änderungsorte . Mit diesen Diensten kann das Betriebssystem Ihre App aktivieren, wenn sich der Standort des Benutzers ändert.
quelle
OSLog
Kategorie mit der Zeichenfolge "Kategorie", die ich dann einfach in der Konsole filtern kann, um die Spreu vom Weizen zu trennen.Ich hatte das gleiche Problem und fand die Ursache und Lösung heraus!
Apple hat dieses Problem in iOS 13.4 GM behoben, obwohl ich eine Problemumgehung für die früheren Versionen habe.
Während Sie Szenen verwenden sollten, wenn Ihre App unter iOS 13 und höher ausgeführt wird, können Sie sich vollständig abmelden, solange Sie noch iOS 12 oder früher unterstützen.
Application Scene Manifest
Eintrag " " vollständig aus der Info.plist.var window: UIWindow?
Ihrem App-Delegaten hinzu.Viel Spaß beim Codieren!
quelle
Ich denke, es gibt einen Fehler, der mit xcode 11.2 und dem swiftUI-Framework funktioniert, weil ich immer das bekomme
Nachricht auch wenn meine App nicht mit Hintergrundaufgaben arbeitet! Die gute Nachricht ist, dass dies meine App nur stoppt, wenn sie von xcode ausgeführt wird. Verwenden Sie die Schaltfläche 'Programmausführung fortsetzen' und die App wird erneut ausgeführt.
quelle
UIApplicationEndBackgroundTaskError
.