Zugriff auf Photos mit mdfind

Hallo Freund!
erst einmal ein frohes neues 2023!!!
Mein System Ventura 13.1
Xojo 2022 4.1
Ich möchte gerne den Zugriff mit meiner App auf die Photomediathek einrichten.

mit der Terminal funktioniert es:
*mdfind -onlyin /Users/michaeldinse/Pictures '((kMDItemPhysicalSize > 1000000) && (kMDItemFSOwnerUserID==501) && InRange(kMDItemContentCreationDate,$time.today(-200d),$time.today(+1d)) && (kMDItemDisplayName != "*icns"cd) && (kMDItemDisplayName != "png"cd) && ((_kMDItemGroupId = 7) || (_kMDItemGroupId = 13)))’

mit meiner App leider nicht!

Wie kann ich die App (oder geht auch das Xojo-Projekt) in Ventura anmelden?

Vielen Dank im Voraus
Micha

See example project: mdFind

Hat dein Programm eine Info.plist Datei?

aus Apple’s Dokumentation:

Your app’s Info.plist file must provide a value for the NSPhotoLibraryUsageDescription key that explains to the user why your app is requesting Photos access. Apps linked on or after iOS 10.0 will crash if this key is not present.

Ohne so einen Eintrag kommt nicht mal die Frage, ob der Benutzer es erlauben will.

Und statt mdfind im Terminal kann man auch MDItemMBS und MDQueryMBS in den MBS Xojo Plugins verwenden.

Hallo Horst
vielen Dank für den Super-Servis!!!
Leider zeigt die App auch nur den Inhalt des Bilder-Ordners, aber nicht den Inhalt von Fotos.
Früher hat das wunderbar geklappt. Irgendwie hat Apple was dagegen.

Hallo Christian!
Auch Dir lieben Dank!
Zu deiner Frage: ja ich habe eine Info.plist Datei.
Aber: davon habe ich nicht geringste Ahnung.
Übrigens: meine App findet alle übrigen Dateien, leider nicht die Daten von Fotos!

Was muss ich tun, dass eine Nachfrage erscheint?

die MDItemMBS und MDQueryMBS werde ich mir noch ansehen.

Spotlight will “neuerdings” the Inhalte der Photos-Lib verbergen. Probiere als Suchpfad mal den photoslibrary-Ordner oder sogar einen da drin. Vielleicht kriegst du dann die Pfade.

Hallo Thomas,
Ja, das habe ich getestet.
Leider ohne Erfolg.
Komischerweise geht’s im Terminal, aber in meiner App nicht.

Ich nutze die Shell folgendermassen:

var sh as new shell
sh.Execute(“Mdfind ‘(InRange(kMDItemContentCreationDate,$time.today(-1d),$time.today(+1d)) && ((_kMDItemGroupId = 13) || (_kMDItemGroupId = 7)))’”)

if sh.Result=“” then
redim window1.Imagebrowser.files(-1)
window1.Imagebrowser.reloadData
window1.status.text="Keine gefunden! "+find
return
end if

Alle anderen Ordner funktionieren Einwand frei. Wenn ich z.B. die originals in einem anderen Ordner. kopiere dann gehts!

Gibt es vielleicht einen besseren Weg?

Wenn es im Terminal geht, dann fehlen die lediglich die Zugriffsrechte in der App für den Photolib-Ordner.
Das kannst du z.B. mit AppWrapper lösen, oder dich da selbst reinlesen oder andere im Forum um Hilfe fragen.
Du könntest auch den User deiner App auffordern, daß der deiner App in den Security-Settings den “Full Disk Access” gibt. Das löst das auch.

Hallo Thomas!
Ich muss mich nocheinmal melden.
Vielen Dank für Deinen Beitrag. Ich habe den Full Disk Access freigegeben, aber ohne Erfolg.
Im Terminal zeigt der MDFIND-Befehl die Pfade zwar an, ABER die Dateien lassen sich nicht öffnen!
Offensichtlich hat Apple einen Riegel vorgeschoben!!
Das finde ich sehr schade!!!

So funktioniert Full Disk Access nicht.

Wenn Dateien mit Full Disk Access geschützt sind, kannst Du sie nicht sehen. Sobald der FDA gesetzt wurde, sind die Dateien sichtbar und dann solltest Du auf die Dateien zugreifen können.

Was genau bedeutet " die Dateien lassen sich nicht öffnen"?

Hallo Beatrix!
Schön, dass Du dich meldest.
Also ich habe es noch einmal getestet, die Dateien lassen sich doch öffnen. Sorry !

Leider funktioniert es nicht mit der Shell in meiner App. Hier wird nichts mit den gleichen MDFIND-Befehl gefunden?

Was, oder wie muss ich mit Full Disk Access in Ventura anklicken?
Gruss Micha

Erst einmal brauchst Du eine gebaute App. Ansonsten kann es im Debugger nicht funktionieren. macOS denkt dann, die App wäre wieder weg, wenn der Debugger beendet wird.

Dann gibst Du dieser App den Full Disk Access in den Settings.

Der letzte Teil ist der Codesign im Debugger. Das kannst Du entweder über den Sign-Step machen oder mit einem eigenen Script, das auch für Debug gemacht wird:

Hallo Beatrix!
Erst einmal Danke für die prompte Meldung!
Also: ich bin zwar schon recht lange dabei, aber ich habe mich nur mit reiner Hobby-Programmiererrei die Zeit vertrieben.
Meine Frage: was soll in der ID eingetragen werden?

Jeder von uns ist Experte in anderen Gebieten. Und Du willst nicht wissen, wie lange ich dafür gebraucht habe.

In das Feld kommt der Name Deiner Code-Signatur rein: “Beatrix Willius (xxxxxxxxx)”. Bist Du bei Apple als Entwickler registriert?

1 Like

Nein, bin ich nicht.
Also: in der Code-Signatur “Mein Name+(mein Test)”?

Ohne Registrierung bei Apple bekommst Du kein Zertifikat und ohne Zertifikat kann Dein Programm kein Full Disk Access bekommen.

Ok, DANKE
Letzte Fragen: wie und wo muss man sich registrieren?
Muss jede App registriert werden?
Und was kostet es?

Das Registrieren geht irgendwo auf der Developer-Seite, glaube ich. Das ist zu lange her: https://developer.apple.com/. Am einfachsten ist es, die Zertifikate mit XCode zu verwalten.

Nein, Du mußt Dich nur einmal registrieren. Dann kannst Du so viele Programme machen wie Du willst.

Die Kosten betragen 100 Euronen pro Jahr.