Zugriffsberechtigung Kamera

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zugriffsberechtigung Kamera

    Hallo!

    Aktuell schreibe ich ein C-Tool, das auf die Kamera zugreifen soll. Solange ich dieses Tool direkt starte erscheint vor dem Zugriff auf die Kamera die Berechtigungsabfrage, so wie es sein soll. Wird das Tool aus einem anderen Programm heraus gestartet, erscheint keine Abfrage und das Tool wird zwangsbeendet. Die Abfrage des authorizationStatus besagt, dass noch keine Erlaubnis abgefragt wurde.
    Kann mir jemand sagen, wie man das hinbekommt ?

    Thomas
  • Das Beenden erfolgt direkt im
    +AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:
    wie es laut Beschreibung auch sein soll, falls die Abfrage nicht ausgeführt werden kann. Eine Fehlermeldung erscheint nicht. Darum gehe ich davon aus, dass es Probleme beim Aufruf der Abfrage gibt. Schließlich muss eine Zuordnung der Anwendung mit dem Abfrageeintrag stattfinden. Dazu soll man das Info.plist um zwei Einträge für Camera und Micro erweitern. Soweit so gut. Aber da das Tool ohne Info.plist daherkommt muss ich ein Info.plist manuell erstellen und einpflegen. Dabei scheint etwas nicht zu stimmen.
    Kann mir jemand sagen, wie man ein Info.plist richtig in ein Project inkludiert ?
  • OK, Info.plist ist drin. Ich hab in den BuildSettings das "Create Info.plist Section in Binary" auf Yes gesetzt und eine BundleID vergeben. Jetzt kann ich festellen, dass mein mainBundle dieses InfoDictionary enthält und auch die angeblich benötigten Text-Keys für die Kamera- und Microabfrage.
    Ändert nix. Der completion handler vom requestAccessForMediaType wird nicht aufgerufen. Die Anwendung wird sofort und ohne Meldung beendet.
    Und jetzt ?
  • Wenn ich die App separat starte z.B. von der Kommandozeile dann klappt alles. Auch wenn ich sie im XCode starte.

    Das Problem ist eben, dass der Effekt nur auftritt wenn die App NICHT selbst gestartet wird sondern von meinem Hauptprogramm aus aktiviert wird. Dort wird bei einem Click auf ein Objekt das dazu gehörende Hilfsprogramm gestartet. Das ist auch prinzipiell kien Problem. So gibt es z.B. ein Hilfsprogramm, das Daten ladet und beim Zugriff auf die Disk sehrwohl per Dialog nachfragt ob ich das erlaube. Wenn ich das Kamera-Hilfsprogramm von sich aus starte dann erscheint ebenfalls der Abfragedialog. Sobald dieses Hilfsprogramm aber aus dem Hauptprogramm gestartet wird beendet es sich beim Aufruf des Berechtigungsdialoges.

    Ich bilde mir ein, ein kurzes dunkles Aufblitzen zu erkennen, so als ob der Dialog kurz eingeblendet wird aber gleich wieder verschwindet. Kann mich natürlich auch täuschen.

    Ich vermute derzeit, dass es doch Probleme mit dem Info.plist gibt. Wenn das Info.plist nicht so geladen wird, wie beim normalen Start, dann killt das System den Prozess ganz regulär. Könnte ich natürlich prüfen wenn ich wüßte wie das System auf das Info.plist zugreift. Vielleicht sucht das gar nicht im mainBundle.
    Hat jemand eine Idee wie man das prüfen kann ?
  • Nachdem ich das Projekt in XCode 13 nochmal neu aufgesetzt habe zeigt sich, dass mein Info.plist jetzt nicht mehr verwendet wird. D.h. das InfoDictionary des mainBundles in Runtime enthält keinen Eintrag für den Key namens "NSCameraUsageDescription" obwohl es in meinem Info.plist in der Datei drinsteht. Dieser key ist eigentlich irrelevant und liefert nur den Ergänzungstext für den Autorisierungsdialog damit der User weiß warum der Zugriff erfolgen soll. Weiß Gott warum es dafür kein default gibt. Ohne diesen key wird die App beendet.
    Auch hat das mainBundle keinen bundleIdentifier mehr. Also wird mein Info.plist scheinbar nicht geladen oder wieder überschieben. Keine Ahnung. Es lässt sich ja gar nix nachvollziehen.

    Weiß jemand zufällig wie man ein Info.plist richtig in ein Projekt integriert ?
  • Problem gelöst:
    Wie schon erwähnt tritt das Problem nur auf, wenn ich die App indirekt, also aus einer anderen Hauptanwendung heraus starte. Eher zufällig hab ich beim Editieren des Info.plist das Info.plist der Hauptanwendung editiert und dort die NSCameraUsageDescription und die NSMicrophoneUsageDescription eingebaut. Und siehe da, jetzt gehts.
    Mit Gegenprobe bestätigt.
    Heureka!