2012-10-10 4 views
44

Ich habe eine App, die das Adressbuch verwendet. Wenn er in iOS 6 ausgeführt wird, führt er diesen Code aus, wenn der Benutzer etwas tut, das den Adressbuchzugriff erfordert.App in iOS 6 abgestürzt, wenn Benutzer Kontakte Zugriffsberechtigungen ändert

Das funktioniert perfekt: Ich kann die Kontaktinformationen lesen und wenn der Benutzer den Zugriff verweigert, reagiert die App entsprechend.

Wenn jedoch der Benutzer:

  1. Ermöglicht Kontakte Zugang in der App,
  2. die App beendet wird,
  3. geht> Einstellungen- Privacy-> Kontakte und deaktiviert den Zugriff Kontakte für die App,
  4. läuft die App,
  5. Während die App im Hintergrund läuft, um die Einstellungen geht und ermöglicht Kontakt Zugang für die App,

die App stürzt sofort innerhalb main() ohne Ausnahme Informationen oder eine sinnvolle Stack-Trace. Ich habe versucht, die "alle Ausnahmen" und [NSException raise] Breakpoint einzuschalten, aber das gab mir keine weiteren Informationen.

Der Absturz kann reproduziert werden, selbst wenn die App den obigen Code während des Starts nicht ausführt.

Was passiert hier? Gibt es einen Rückruf, den ich abonnieren sollte?

+0

Laut rmaddy's Antwort unten ist das kein Absturz, es ist iOS, das die App beendet. –

+0

Das gleiche Problem für mich auch, aber es ist für Location Permission für meine app :( –

Antwort

72

Ich habe das in meiner eigenen App gesehen. Und ich habe andere gesehen, die das auch berichten. Ich bin mir ziemlich sicher, dass dies absichtliches Verhalten ist. Das Betriebssystem beendet alle Hintergrund-Apps, die auf Änderungen der Datenschutzberechtigungen reagieren. Apple scheint dies mit einem Vorschlaghammer getan zu haben. Es ist kein Absturz (obwohl es beim Ausführen im Debugger möglicherweise so aussieht). Apps werden aus verschiedenen anderen Gründen beendet. Fügen Sie dies zur Liste der Gründe hinzu. Dies gibt uns mehr Grund, den App-Zustand nach einem vollständigen Neustart unserer Apps wiederherzustellen.

Beachten Sie, dass dieses Verhalten für alle verschiedenen Datenschutzeinstellungen wie Kontakte, Fotos, Mikrofon, Kalender und Kamera gilt.

+2

Verifiziert das passiert auch mit Fotosicherheitseinstellungen auf iOS 7.0.3 Scheint logisch im Namen von Apple, hier keine Beschwerden! Kennt jemand eine Möglichkeit, Hintergrundcode auszuführen, um einige Daten zu speichern, bevor die App aufgrund von Sicherheitsupdates abstürzt? –

+2

Verifiziert, das passiert auch mit dem microphone security settings in iOS 7.0.3 – Pavan

+1

Funktioniert in Apps für iOS 7 mit Kalender.Wenn Sie die App auf dem Gerät ausführen, NICHT über Xcode-Debugging oder Simulator, sehen Sie, dass die App neu gestartet wird und für den Benutzer unsichtbar ist So, wie rmaddy sagt, stellen Sie einfach sicher, dass Ihre App "einen guten Job macht, den App-Zustand nach einem vollständigen Neustart wiederherzustellen ..." – leanne

-1

In der Regel, wenn eine Anwendung von der Aussetzung zurückkommt, sollte sie Anwendung aufrufen: didEnterForeground von Ihrem AppDelegate. Meiner Meinung nach wäre dies ein guter Platz für Sie, um Ihre Adressbuchberechtigungen neu anzupassen.

+0

) Best Practice ist meiner Meinung nach Berechtigungen zu verlangen, sobald die App diese Daten verwenden muss (z. B. bei der Eingabe eines bestimmten Bildschirms) –