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.
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 .
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 file
um das Sandbox-Problem zu verhindern
Nachdem ich einiges darüber gehämmert hatte, wie man Applescript mit POISIX file
einer 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.
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.
Tetsujin
Benutzer3259
Tetsujin
Tetsujin
Benutzer3259
Tetsujin
IconDaemon