Come posso evitare errori relativi ai permessi durante l'importazione in Photos.app tramite AppleScript?

3

Il nuovo Photos.app non viene fornito con il supporto di Automator (anche se sono disponibili azioni di terze parti) . Tuttavia, ha un supporto AppleScript di base, incluso il supporto per l'importazione di un elenco di file.

Tuttavia,nonriescoafarfunzionarecorrettamentequestaazione.Qualsiasitentativodiusarlo,adesempiotramiteilseguentesemplicescript

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

farà in modo che Photos.app riporti che "nessun metadata" potrebbe essere recuperato dal file perché potrebbe non essere una foto (tuttavia, lo stesso file può essere manualmente importato). Ulteriori indagini rivelano che l'approccio automatico non funziona a causa della mancanza di autorizzazione a leggere il file .

Da 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

(seguito da un host di messaggi di errore simili). Le azioni di Automator di terze parti di cui sopra hanno lo stesso problema, per quello che vale.

Come posso fornire l'autorizzazione appropriata a Photos.app o al flusso di lavoro di esecuzione AppleScript / Automation per eseguire questa importazione? Si noti che il "permesso" sembra essere qualcosa diverso da (o in aggiunta a) le solite autorizzazioni di file, perché l'impostazione del file e della cartella su "legge / scrive da tutti" (l'opzione nucleare) non cambia il comportamento.

    
posta 11.04.2015 - 18:20
fonte

2 risposte

2

Basato su questo da una vecchia Note sulla versione di Applescript su sandboxing ...

When sending commands to a sandboxed application, such as TextEdit in OS X Mountain Lion, parameters that refer to files must be of an explicit file-like type and not a bare string, or the target application will not be able to access the file. For example, file "Macintosh HD:Users:me:sample.txt", POSIX file "/Users/me/sample.txt", or the result of choose file would all be acceptable, but the string "/Users/me/sample.txt" would not.

&

Note: As mentioned under Compatibility above, sandboxed applications will not be able to access files referred to in commands using a string path. Any parameters or properties in your application that refer to files should be declared as type file, and not type text. Apple Event Manager will add sandbox extensions to events that have file-like parameters, but only if the parameter is of a recognized file-like type: typeAlias, typeFileURL, cFile, and so on. Without these extensions, the file will not be accessible from the target application’s sandbox, and the command will probably fail.

Sembrerebbe che la 'correzione' sia quella di usare POSIX file per prevenire il problema del sandbox

Dopo un po 'di battute su come far funzionare Applescript con POISIX file di una lista, sono arrivato a questo ...

ottimizzato

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

Non è perfetto, poiché ogni importazione è nuova, ma funziona.
Ora funziona in un'unica importazione.

    
risposta data 11.04.2015 - 19:39
fonte
0

Puoi anche inserire questa linea ovunque prima della riga di esportazione nel tuo codice:

open for access file f

Questo sembrava fare il trucco per me.

    
risposta data 21.02.2017 - 19:43
fonte

Leggi altre domande sui tag