Wie kann ich berechtigungsbezogene Fehler beim Importieren in Photos.app über AppleScript vermeiden?

Die neue Photos.app wird nicht mit Automator-Unterstützung geliefert (obwohl Aktionen von Drittanbietern verfügbar sind ) . Es hat jedoch einige grundlegende AppleScript-Unterstützung, einschließlich der Unterstützung für das Importieren einer Liste von Dateien.

AppleScript-Wörterbuch

Ich kann diese Aktion jedoch nicht richtig ausführen. Alle Versuche, es zu verwenden, z. B. über das folgende einfache Skript

tell application "Photos"
    set theList to {"/Full/Path/To/Some/Photo.jpg"}
    import theList
end tell

bewirkt, dass Photos.app meldet, dass „keine Metadaten“ aus der Datei abgerufen werden konnten, da es sich möglicherweise nicht um ein Foto handelt (dieselbe Datei kann jedoch manuell importiert werden ). Weitere Untersuchungen zeigen, dass der automatisierte Ansatz an der fehlenden Berechtigung zum Lesen der Datei scheitert .

Aus der Console.app:

4/11/15 9:07:49.333 AM sandboxd[253]: ([3934]) Photos(3934) deny file-read-data /Full/Path/To/Some/Photo.jpg

(gefolgt von einer Vielzahl ähnlicher Fehlermeldungen). Die oben verlinkten Automator-Aktionen von Drittanbietern haben das gleiche Problem, für das, was es wert ist.

Wie kann ich Photos.app oder dem ausführenden AppleScript/Automation-Workflow die entsprechende Berechtigung erteilen, um diesen Import durchzuführen? Beachten Sie, dass die "Berechtigung" etwas anderes als (oder zusätzlich zu) den üblichen Dateiberechtigungen zu sein scheint, da das Festlegen der Datei und des Ordners auf "Lesen/Schreiben von allen" (die nukleare Option) das Verhalten nicht ändert .

nicht meine Stärke, aber das sieht nicht nach einem Perms-Fehler aus, sondern nach einem Sandboxing-Fehler
Ja, ich denke, das ist absolut der Fall, aber ich habe keine Ahnung, was ich optimieren oder umgehen soll.
aus Applescript-Dokumentation - Beim Senden von Befehlen an eine Sandbox-Anwendung wie TextEdit in OS X Mountain Lion müssen Parameter, die sich auf Dateien beziehen, einen expliziten dateiähnlichen Typ und keine bloße Zeichenfolge haben, oder die Zielanwendung kann dies nicht auf die Datei zugreifen. Beispielsweise wären die Datei „Macintosh HD:Users:me:sample.txt“, die POSIX-Datei „/Users/me/sample.txt“ oder das Ergebnis der Dateiauswahl akzeptabel, aber die Zeichenfolge „/Users/me/ sample.txt" nicht.
Scheint, als würde das Hinzufügen einer POSIX-Datei das Problem beheben
Klingt vielversprechend, aber AppleScript sagt mir, dass es "Datei 'path:to:file' nicht in den erwarteten Typ bringen kann", wenn die Ausführung die Zeile "import" erreicht. :(
setze theList auf {POSIX file "/path/to/file.png"} <- es kommt in die Klammern

Antworten (2)

Basierend auf einem alten Applescript Release Notes zum Sandboxing…

Beim Senden von Befehlen an eine Sandbox-Anwendung, wie z. B. TextEdit in OS X Mountain Lion, müssen Parameter, die sich auf Dateien beziehen, einen expliziten dateiähnlichen Typ und keine bloße Zeichenfolge haben, oder die Zielanwendung kann nicht auf die Datei zugreifen. Beispielsweise wären die Datei „Macintosh HD:Users:me:sample.txt“, die POSIX-Datei „/Users/me/sample.txt“ oder das Ergebnis der Dateiauswahl akzeptabel, aber die Zeichenfolge „/Users/me/ sample.txt" nicht.

&

Hinweis: Wie oben unter Kompatibilität erwähnt, können Sandbox-Anwendungen nicht auf Dateien zugreifen, auf die in Befehlen verwiesen wird, die einen Zeichenfolgenpfad verwenden. Alle Parameter oder Eigenschaften in Ihrer Anwendung, die auf Dateien verweisen, sollten als Typdatei und nicht als Typtext deklariert werden. Apple Event Manager fügt Sandbox-Erweiterungen zu Ereignissen hinzu, die dateiähnliche Parameter haben, aber nur, wenn der Parameter einen erkannten dateiähnlichen Typ hat: typeAlias, typeFileURL, cFile und so weiter. Ohne diese Erweiterungen ist die Datei nicht über die Sandbox der Zielanwendung zugänglich und der Befehl schlägt wahrscheinlich fehl.

Es scheint, dass der „Fix“ verwendet werden soll, POSIX fileum das Sandbox-Problem zu verhindern

Nachdem ich einiges darüber gehämmert hatte, wie man Applescript mit POISIX fileeiner Liste zum Laufen bringt, kam ich auf Folgendes…

optimiert

set theList to {"/Volumes/Downloads/ScreenShot.png", "/Volumes/Downloads/ScreenShot2.png", "/Volumes/Downloads/ScreenShot3.png"}
set l to {}
repeat with f in theList
    set l to l & (POSIX file f)
end repeat
tell application "Photos" to import l

Es ist nicht perfekt, da jeder Import neu ist, aber es funktioniert.
Funktioniert jetzt in einem Import.

optimiert - besser, ein Import
Was ist da dein äußerstes „Tell“? Ich kann weder Finder noch System Events anweisen, dies zu tun; beide geben mir das gleiche "kann die POSIX-Datei <...> nicht aus der Datei <...> abrufen" :(
Okay, verstanden: Was Sie gepostet haben, muss vollständig außerhalb eines Tells stehen (ich hatte es in einem, weil ich System Events mitteilen muss, dass es jede Datei in einem Ordner abrufen soll; ich habe vergessen, dass Sie tatsächlich Anweisungen außerhalb eines Tells/einer Funktion haben können, also das ist warum ich immer noch eine Fehlermeldung bekomme).
Ich bin froh, dass Sie es bekommen haben. Ich ging davon aus, dass Ihre ursprüngliche Liste anders aufgebaut wäre, konnte aber nicht genau wissen, wie.
@Tetsujin Irgendeine Idee, wie man mit dieser Frage umgeht? Das sieht nach dem gleichen Problem aus, aber ich kann es nicht auf mein Problem anwenden. apple.stackexchange.com/questions/269539/…

Sie können diese Zeile auch an einer beliebigen Stelle vor der Exportzeile in Ihren Code einfügen:

open for access file f

Dies schien für mich der Trick zu sein.