Warum werden Script Editor .scpt-Dateien nicht als reine Textdateien gespeichert?

15

Der Skript-Editor (früher AppleScript Editor vor Yosemite 10.10) speichert .scptDateien als Binärdateien und nicht als reine Textdateien.

Es macht die Arbeit mit ihnen in Quellcode-Kontrollsystemen etwas umständlich.

Weiß jemand, warum das so ist? Gibt es eine langjährige Geschichte, die es erforderlich machte, dass dieses Dateiformat etwas anderes als reine Textdateien ist?

Ian C.
quelle
Ich weiß nicht warum, aber wie hier kommentiert , können Sie stattdessen ein Hotkey- / Skript-Makro schreiben, um es als Text zu speichern. Es ist ein Schmerz, aber machbar ...
Vic
2
Im Bereich "Speichern" können Sie Skripts in verschiedenen Formaten speichern, einschließlich einfachem Text.
Chris Seite
"Skript als Text aus scpt-Dateien abrufen?": Lists.apple.com/archives/applescript-users/2007/Mar/…
pkamb

Antworten:

19

Die Arbeit von William R. Cook enthält eine hervorragende Geschichte und Einblicke von denjenigen, die 1989 mit AppleScript zu tun hatten.

Was folgt, ist lustig und spekulativ.

Platzersparnis und Verarbeitung

AppleScript wurde zu einer Zeit geschrieben, als jedes Byte und Bit wertvoll war. Die verzögerte Codierung von OS X als Eigenschaftenlistenformate wäre für diese frühen Entwickler eine Verschwendung.

Das Binärformat lieferte ein vorgefertigtes Formular, mit dem das Duplizieren des komplexen, fehleranfälligen und zeitaufwendigen Analyseprozesses bei jedem Laden von der Festplatte vermieden wurde. Besser direkt in den Speicher laden und ausführen.

Adaptiv

Durch das Speichern in einem Binärformat konnten AppleScripts an die zugrunde liegenden AppleEvent-Codes und nicht an das Wörterbuch mit der Langform-Terminologie gebunden werden.

Auf diese Weise kann ein AppleScript, das für eine Version einer Anwendung geschrieben und gespeichert wurde, automatisch auf Terminologieänderungen zwischen Versionen der Zielanwendungen aktualisiert werden.

Ein Integer-Objekt kann im Skript als "Integer" bezeichnet int , in der Binärdarstellung jedoch als vierstelliger Code " " gespeichert werden . Der vierstellige Code aus dem vom Betriebssystem bereitgestellten AppleScript-Wörterbuch.

Wenn eine zukünftige AppleScript-Terminologie beschließt, das dem Benutzer zugewandte Wort für Ganzzahl zu ändern, kann die Binärdarstellung dem neueren Namen zugeordnet werden.

Eine Kehrseite dazu ist heute zu sehen. Schreiben Sie ein AppleScript gegen das Wörterbuch einer Anwendung. Entfernen Sie dann die Anwendung vollständig von Ihrem Mac. Was sehen Sie im Skript-Editor beim Öffnen des Skripts?

Zumindest in neueren Versionen zeigte der AppleScript-Editor den vierstelligen Code mit Pfeilen . Der Code wurde gespeichert und hervorgehoben. Nicht die Terminologie des Benutzers.

Dies ist wahrscheinlich nicht der Hauptnutzen, sondern ein möglicher Nutzen.

Moderner Bias

Es lohnt sich, unsere moderne Ausrichtung auf Textdokumente zu würdigen. Die Erfahrung hat viele von uns gelehrt, dass das Speichern wertvoller Inhalte in einem Binärformat ein Risiko birgt. Binärformate sind häufig schlecht dokumentiert, für den Endbenutzer undurchsichtig und können nur schwer geöffnet werden, wenn die zugehörige Software nicht gewartet wird.

Bei der Erstellung von AppleScript und seines Binärformats wurde diese Verzerrung noch nicht gebildet. Speicher- und Rechenbeschränkungen waren sehr real und jedes Kilobyte oder Tausende von Zyklen, die eingespart wurden, waren lohnenswert.

Geschichte und Herkunft

Die Geschichten über die Entstehung von AppleScript sind wundervoll, aber heutzutage schwer aufzuspüren. AppleScript versuchte, eine freundliche, englische Sprache zu sein, und war atemberaubend in seiner Vision. Die eigentliche Implementierung war schwieriger zu erreichen!

Graham Miln
quelle
16

Kurz gesagt, .scptermöglicht die Abwärtskompatibilität. Außerdem kann AppleScript / Javascript (usw.) mit der gleichen Erweiterung gespeichert werden, vorausgesetzt, es wird Script Editorjetzt Javascript unterstützt.

So dekompilieren Sie .scptin der Shell:

https://github.com/rupa/applescript/blob/master/decompile.sh

Der relevanteste Teil:

osadecompile

Textmate ist ein Drittanbieter-Editor, der Folgendes lesen kann .scpt:

https://github.com/textmate/textmate/blob/master/Applications/decompile_as/src/decompile_as.mm

Der relevanteste Teil:

[[OSAScript alloc] initWithCompiledData:];

Diese Funktion kommt OSAScript.h, abgesehen von OS X SDK. In OSAScript.hgibt es diesen langen Kommentar:

Erstellen Sie unter Angabe einer URL, die ein kompiliertes Skript, eine Skriptanwendung oder eine Skriptquelle findet, einen automatisch freigegebenen Skriptdaten-Deskriptor und geben Sie ihn mit seinem Inhalt zurück. Sie können den Deskriptor verwenden, um ein Skript mit - [OSAScript initWithScriptDataDescriptor: ...] zu erstellen. Auf diese Weise können Sie ein Skript mit einer bestimmten OSALanguageInstance erstellen. Sie können + [OSALanguage languageForScriptDataDescriptor:] verwenden, um die Sprache für die Skriptdaten abzurufen, die dann zum Erstellen oder Auswählen einer geeigneten Sprachinstanz für ein OSAScript verwendet werden können. Skriptquelldaten können mit - [OSAScript initWithScriptDataDescriptor: ...] kompiliert werden, oder Sie können den Deskriptor in eine Zeichenfolge umwandeln (mithilfe von NSAppleEventDescriptor-Methoden) und explizit ein OSAScript mit der Quelle erstellen. + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

Grundsätzlich wird beim Speichern .scptauch ein OSALanguageInstanceDeskriptor in der Datei gespeichert.

Wenn eine Datei als .applescript/ text gespeichert ist , kompiliert das System sie mit der neuesten Version der Applescript-Sprache. Ein Skript, das beispielsweise für eine ältere Version von OS X geschrieben wurde, funktioniert möglicherweise nicht mehr mit einer neuen Version, da einige Funktionen veraltet sind. Mit .scptkann das System / die App herausfinden, für welche Version von Applescipt es bestimmt ist.

Ab 10.10 kann Javascript gespeichert .scptund korrekt ausgeführt werden.

weiter weg
quelle
Got `errOSASourceNotAvailable (-1756) .` Was bedeutet das?
TCB13
1
+1 für dekompilieren Link. @ TCB13 Das passiert, wenn Ihre .scpt-Datei nicht binär ist und es sollte so sein, dass der Editor Probleme damit hat, das Fenster zu schließen, in dem Sie aufgefordert werden, eine Kopie zu erstellen. In der Kopie werden die Informationen dann in einem kompilierten Format gespeichert. Dies alles wird jedoch in der Antwort gelöst, die ich in Kürze veröffentlichen werde und die ich aus dieser weiteren Antwort mit dem Dekompilierungsbefehl erhalten habe.
Michael Dimmitt
Um das noch zu ergänzen, gibt es auch asprint< hasseg.org/asprint >, mit dem Sie .scpt-Dateien "schön drucken" können. Der einzige Nachteil ist, dass es nicht für JavaScript-SCPT-Dateien funktioniert, sondern nur für AppleScript-Dateien.
TJ Luoma
1

Nachdem ich den Dekompilierungsbefehl von Fartheraway gesehen hatte, entdeckte ich die Lösung. Wenn Sie möchten, dass die Applescript-Datei (.scpt) nicht binär ist.

@fartheraway erwähnt es auch im unteren Teil seiner Antwort.

machen Sie einfach die gesamte Entwicklung mit der Erweiterung .applescript.

Der Skript-Editor kann den Code ausführen und nicht in einem kompilierten Format speichern.

Michael Dimmitt
quelle