AppleScript gibt beim Öffnen der Datei keinen Berechtigungsfehler aus, aber die Datei kann manuell geöffnet werden

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, auf mehrere Dateien in einem AppleScript zuzugreifen. Ich kann diese Dateien jedoch ohne Probleme manuell öffnen.

Das Dokument [Dateiname] konnte nicht geöffnet werden. Sie haben keine Berechtigung.

Folgendes habe ich versucht:

  • Manuell geänderte Berechtigung über Datei → Informationen abrufen
  • Benutzte das Festplatten-Dienstprogramm zum „Verifizieren“ und „Reparieren von Berechtigungen“
  • Im Wiederherstellungsmodus neu gestartet, um die Berechtigungen und ACLs des Basisverzeichnisses zurückzusetzen

Ich habe weiterhin das Problem.

Um weitere Frustration hinzuzufügen, melden die Dateien den Fehler nicht konsequent. Manchmal erhalte ich den Fehler in einer Datei, wenn ich das Skript ausführe, aber nicht beim nächsten Mal!

Warum erhalte ich möglicherweise diesen Berechtigungsfehler, und wie kann ich ihn sonst beheben?

AppleScript unten, falls es hilft:

-- prompt for source directory
set srcDirectory to (choose folder)

-- get list of all files in source directory
set allFiles to (list folder srcDirectory without invisibles)

tell application "OmniGraffle"
    -- create a new document
    set newDocument to (make new document with properties {template:"Single Pixel Grid"})

    -- added for debug purposes
    delay 5

    -- get a reference to the first layer
    set destinationLayer to first layer in first canvas of newDocument

    -- step through each of the file
    repeat with currentFile in allFiles
        -- get a reference to the next file
        set srcFileString to (srcDirectory as string) & currentFile
        set srcFileRef to (open srcFileString)

        -- get a reference to the icon
        set srcGraphic to first graphic in first layer in first canvas of srcFileRef

        -- flip the icon (they're all upside down)
        flip srcGraphic over vertically

        -- copy the updated source to destination canvas
        duplicate srcGraphic to destinationLayer

        -- close the source file
        close srcFileRef saving no

        -- added for debug purposes
        delay 5
    end repeat

end tell

Antworten (1)

Dieses Problem wird durch Apples Sandboxing von Anwendungen (in diesem Fall OmniGraffle) verursacht. Preview erhält keine Berechtigung zum Zugriff auf das PDF, wenn Sie ihm nur einen String zum Öffnen übergeben. Aus den Versionshinweisen von Apple :

Kompatibilitätshinweise

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.

Warum funktioniert das manchmal? Wenn Sie eine Datei manuell öffnen, behält die Anwendung die Berechtigung zum Öffnen (z. B. in Recents). Wenn Sie also eine Datei ausprobieren, die Sie bereits geöffnet haben, funktioniert es wahrscheinlich, aber es funktioniert nicht bei neuen Dateien.

Um das Problem zu beheben, ändern Sie Ihren Code wie folgt:

...
    set srcFileRef to (open POSIX file srcFileString)
...