AppleScript — AppleScript

AppleScript
Paradygmat Programowanie w języku naturalnym , Skrypty
Deweloper Apple Inc.
Po raz pierwszy pojawiły się 1993 ; 28 lat temu ( 1993 )
Wersja stabilna
2.5 / 16 października 2014 ; 6 lat temu ( 2014-10-16 )
Dyscyplina pisania Słaby , dynamiczny
OS System 7 , Mac OS 8 , Mac OS 9 , macOS
Licencja Zastrzeżony (części dostępne pod APSL )
Rozszerzenia nazw plików .scpt, .scptd, .applescript
Strona internetowa https://developer.apple.com/applescript
Wpływem
Język naturalny , HyperTalk

AppleScript to język skryptowy stworzony przez firmę Apple Inc., który ułatwia automatyczną kontrolę nad skryptowalnymi aplikacjami dla komputerów Mac . Po raz pierwszy wprowadzony w Systemie 7 , jest obecnie zawarty we wszystkich wersjach systemu macOS jako część pakietu narzędzi do automatyzacji systemu. Termin „AppleScript” może odnosić się do samego języka, do pojedynczego skryptu napisanego w tym języku lub, nieformalnie, do architektury macOS Open Scripting Architecture, na której opiera się język.

Przegląd

AppleScript to przede wszystkim język skryptowy opracowany przez firmę Apple do komunikacji między aplikacjami (IAC) przy użyciu zdarzeń firmy Apple . AppleScript jest powiązany z wydarzeniami Apple, ale różni się od nich. Zdarzenia Apple mają na celu wymianę danych między innymi aplikacjami i kontrolowanie ich w celu zautomatyzowania powtarzających się zadań.

AppleScript ma pewne własne możliwości przetwarzania, oprócz wysyłania i odbierania zdarzeń Apple do aplikacji. AppleScript może wykonywać podstawowe obliczenia i przetwarzanie tekstu, a także jest rozszerzalny, umożliwiając korzystanie z dodatków skryptowych, które dodają nowe funkcje do języka. Głównie jednak AppleScript opiera się na funkcjonalności aplikacji i procesów do obsługi złożonych zadań. Jako ustrukturyzowany język poleceń AppleScript można porównać do powłok Unix , Microsoft Windows Script Host lub IBM REXX w swoim przeznaczeniu, ale różni się od wszystkich trzech. Niezbędne dla jego funkcjonalności jest fakt, że aplikacje Macintosh publikują „słowniki” adresowalnych obiektów i operacji.

AppleScript ma pewne elementy programowania proceduralnego , programowania obiektowego (szczególnie przy budowie obiektów script) oraz język programowania naturalne tendencje w jego składni, ale nie całkowicie zgodne z któregokolwiek z tych paradygmatów programowania .

Historia

Pod koniec 1980 Jabłko uważane za pomocą HyperCard „s HyperTalk języka skryptowego jako standardowy język dla rozwoju użytkownika końcowego całej firmy oraz w jej klasycznym Mac OS systemu operacyjnego i dla międzyprocesowej komunikacji pomiędzy Apple i produktów innych niż Apple. HyperTalk może być używany przez nowicjuszy do programowania stosu HyperCard. Inżynierowie Apple uznali, że podobny, ale bardziej zorientowany obiektowo język skryptowy można zaprojektować do użytku z dowolną aplikacją , a projekt AppleScript narodził się jako efekt uboczny wysiłków badawczych mających na celu zmodernizowanie Macintosha jako całości i ostatecznie stał się jego częścią. z system 7 .

AppleScript został wydany w październiku 1993 roku jako część Systemu 7.1.1 (System 7 Pro, pierwsza poważna aktualizacja do Systemu 7). QuarkXPress (wersja 3.2) był jedną z pierwszych głównych aplikacji obsługujących AppleScript. To z kolei doprowadziło do tego, że AppleScript został szeroko zaadoptowany w świecie wydawniczym i prepress, często wiążąc złożone przepływy pracy. Był to kluczowy czynnik w utrzymaniu dominującej pozycji Macintosha w publikowaniu i przygotowaniu do druku, nawet po przeniesieniu QuarkXpress i innych aplikacji do publikowania na Microsoft Windows.

Po pewnej niepewności co do przyszłości AppleScript w systemie operacyjnym nowej generacji firmy Apple, przejście na Mac OS X (około 2002 r.) i jego frameworki Cocoa znacznie zwiększyły użyteczność i elastyczność AppleScript. Aplikacje Cocoa pozwalają programistom aplikacji zaimplementować podstawowe skrypty w swoich aplikacjach przy minimalnym wysiłku, zwiększając liczbę aplikacji, które są bezpośrednio skryptowalne. W tym samym czasie przejście na podstawy Uniksa i zdolność AppleScript do bezpośredniego uruchamiania poleceń Uniksa za pomocą do shell scriptpolecenia, pozwoliły AppleScripts na znacznie większą kontrolę nad samym systemem operacyjnym. AppleScript Studio , wydany z systemem Mac OS X 10.2 jako część Xcode , a później framework AppleScriptObjC , wydany w systemie Mac OS X 10.6 , umożliwił użytkownikom tworzenie aplikacji Cocoa przy użyciu AppleScript.

W artykule z 2006 roku Macworld umieścił AppleScript w swoim rankingu 30 najważniejszych do tej pory produktów Apple, umieszczając go na 17. miejscu.

W artykule dla Macworld z 2013 roku , doświadczony programista i komentator dla komputerów Mac, John Gruber, podsumował swoją refleksję na temat „nieprawdopodobnej trwałości AppleScript”: „Teoretycznie AppleScript mógłby być znacznie lepszy; w praktyce jest to jednak najlepsza rzecz, jaką mamy to działa. Stanowi przykład przewagi Maca nad iOS dla majsterkowiczów i zaawansowanych użytkowników”.

W październiku 2016 roku, wieloletni menedżer produktu AppleScript i ewangelista automatyzacji Sal Soghoian opuścił Apple, gdy jego stanowisko zostało wyeliminowane „z powodów biznesowych”. Weterani społeczności komputerów Mac, tacy jak John Gruber i Andy Ihnatko, ogólnie odpowiedzieli z niepokojem, kwestionując zaangażowanie Apple w społeczność programistów i profesjonalnych użytkowników. Starszy wiceprezes Apple ds. inżynierii oprogramowania, Craig Federighi, odpowiedział w e-mailu, mówiąc, że „Mamy wszelkie zamiary, aby kontynuować nasze wsparcie dla wspaniałych technologii automatyzacji w macOS!”, chociaż Jeff Gamet z The Mac Observer stwierdził, że niewiele to rozwiało jego wątpliwości o przyszłości automatyzacji Apple w ogóle, a AppleScript w szczególności. Na razie AppleScript pozostaje jednym ze składników technologii automatyzacji macOS, obok Automator , Shortcuts , Services i shell scripting .

Podstawowe koncepcje

AppleScript został zaprojektowany do użytku jako dostępny język skryptowy dla użytkowników końcowych, oferujący użytkownikom inteligentny mechanizm kontroli aplikacji oraz uzyskiwania dostępu do danych i dokumentów oraz ich modyfikowania. AppleScript wykorzystuje zdarzenia Apple , zestaw standardowych formatów danych, których system operacyjny Macintosh używa do wysyłania informacji do aplikacji, mniej więcej analogicznie do wysyłania zapytań XPath przez XML-RPC w świecie usług internetowych . Zdarzenia Apple pozwalają skryptowi pracować z wieloma aplikacjami jednocześnie, przekazując dane między nimi, dzięki czemu złożone zadania mogą być wykonywane bez interakcji człowieka. Na przykład AppleScript do tworzenia prostej galerii internetowej może wykonać następujące czynności:

  1. Otwórz zdjęcie w aplikacji do edycji zdjęć (wysyłając do tej aplikacji zdarzenie Open File Apple).
  2. Poleć aplikacji do edycji zdjęć, aby manipulowała obrazem (np. zmniejszyła jego rozdzielczość, dodała obramowanie, dodał kredyt fotograficzny)
  3. Poproś aplikację do edycji zdjęć, aby zapisała zmieniony obraz w pliku w innym folderze (wysyłając do tej aplikacji zdarzenie Zapisz i/lub Zamknij Apple).
  4. Wyślij nową ścieżkę pliku (za pośrednictwem innego zdarzenia Apple) do edytora tekstu lub aplikacji edytora internetowego
  5. Powiedz tej aplikacji edytora, aby zapisała łącze do zdjęcia w pliku HTML.
  6. Powtórz powyższe kroki dla całego folderu obrazów (setki, a nawet tysiące zdjęć).
  7. Prześlij plik HTML i folder z poprawionymi zdjęciami do witryny internetowej, wysyłając zdarzenia Apple do graficznego klienta FTP , używając wbudowanych poleceń AppleScript lub wysyłając zdarzenia Apple do narzędzi FTP systemu Unix.

Dla użytkownika setki lub tysiące kroków w wielu aplikacjach zostały zredukowane do jednej czynności uruchomienia skryptu, a zadanie jest wykonywane w znacznie krótszym czasie i bez możliwości przypadkowego błędu ludzkiego. Duży, złożony skrypt można opracować tylko raz, podczas gdy inne skrypty są używane wielokrotnie.

Elementy skryptowe aplikacji są widoczne w Słowniku skryptów aplikacji (dystrybuowanym jako część aplikacji), który można przeglądać w dowolnym edytorze skryptów . Elementy są zazwyczaj pogrupowane w zestawy, zgodnie z luźnymi zależnościami funkcjonalnymi między nimi. W każdym zestawie występują dwa podstawowe rodzaje elementów: klasy i polecenia.

  • Klasy to obiekty z możliwością skryptowania — na przykład aplikacja do edycji tekstu prawie na pewno będzie miała klasy dla okien, dokumentów i tekstów — a te klasy będą miały właściwości, które można zmienić (rozmiar okna, kolor tła dokumentu, rozmiar czcionki tekstu itp.) , i może zawierać inne klasy (okno będzie zawierać jeden lub więcej dokumentów, dokument będzie zawierał tekst, obiekt tekstowy będzie zawierał akapity oraz słowa i znaki).
  • Polecenia natomiast to instrukcje, które można przekazać obiektom skryptowym. Ogólnym formatem bloku AppleScript jest przekazanie skryptowi obiektu, aby uruchomił polecenie.

Wszystkie aplikacje skryptowe współdzielą kilka podstawowych poleceń i obiektów, zwykle nazywanych pakietem standardowym — polecenia otwierania, zamykania lub zapisywania pliku, drukowania, zamykania, ustawiania danych na zmienne — a także podstawowy obiekt aplikacji, który zapewnia skryptowe właściwości samej aplikacji. Wiele aplikacji ma liczne pakiety zdolne do wykonania dowolnego zadania, które może wykonać sama aplikacja. W wyjątkowych przypadkach aplikacje mogą obsługiwać wtyczki zawierające własne słowniki skryptowe.

AppleScript został zaprojektowany z możliwością intuicyjnego budowania skryptów poprzez rejestrowanie działań użytkownika. Taka możliwość nagrywania AppleScript musi być wbudowana w aplikację — aplikacja musi obsługiwać zdarzenia Apple i nagrywanie AppleScript; ponieważ Finder obsługuje nagrywanie AppleScript, może być przydatny w celach informacyjnych. Gdy Edytor AppleScript ( Edytor skryptów) jest otwarty i kliknięto przycisk Rejestruj, działania użytkownika dotyczące aplikacji do nagrywania są konwertowane na odpowiadające im polecenia AppleScript i wyświetlane w oknie Edytora skryptów. Powstały skrypt można zapisać i ponownie uruchomić, aby powielić oryginalne działania, lub zmodyfikować, aby był bardziej użyteczny.

Uwagi

Komentarze można zgłaszać na wiele sposobów. Jednowierszowy komentarz może zaczynać się od 2 myślników ( -- ). W AppleScript 2.0, wydanym po raz pierwszy w systemie Mac OS X Leopard , może również zaczynać się od znaku cyfry (#). Pozwala to na przechowywanie samodzielnego skryptu AppleScript jako wykonywalnego pliku tekstowego zaczynającego się od linii shebang #!/usr/bin/osascript Przykład:

--This is a one line comment
# So is this! (in Mac OS X Leopard or later)

W przypadku komentarzy zajmujących wiele wierszy AppleScript używa nawiasów z gwiazdkami w środku. Przykład:

(* This is a
multiple
line
comment *)

Witaj świecie!

W AppleScript tradycyjne „Hello, World!” program może być napisany w wielu różnych formach, w tym:

display dialog "Hello, world!" -- a modal window with "OK" and "Cancel" buttons
-- or
display alert "Hello, world!" -- a modal window with a single "OK" button and an icon representing the app displaying the alert
-- or
say "Hello, world!" -- an audio message using a synthesized computer voice

AppleScript ma kilka opcji interfejsu użytkownika, w tym okna dialogowe, alerty i listę opcji do wyboru. (Znak ¬, utworzony przez wpisanie ⌥ Option+ returnw Edytorze skryptów, oznacza kontynuację pojedynczej instrukcji w wielu wierszach).

-- Dialog
set dialogReply to display dialog "Dialog Text" ¬
	default answer "Text Answer" ¬
	hidden answer false ¬
	buttons {"Skip", "Okay", "Cancel"} ¬
	default button "Okay" ¬
	cancel button "Skip" ¬
	with title "Dialog Window Title" ¬
	with icon note ¬
	giving up after 15
-- Choose from list
set chosenListItem to choose from list {"A", "B", "3"} ¬
	with title "List Title" ¬
	with prompt "Prompt Text" ¬
	default items "B" ¬
	OK button name "Looks Good!" ¬
	cancel button name "Nope, try again" ¬
	multiple selections allowed false ¬
	with empty selection allowed
 
-- Alert
set resultAlertReply to display alert "Alert Text" ¬
	as warning ¬
	buttons {"Skip", "Okay", "Cancel"} ¬
	default button 2 ¬
	cancel button 1 ¬
	giving up after 2

Każda metoda interakcji z użytkownikiem może zwrócić wartości klikniętych przycisków, wybranych pozycji lub wprowadzonego tekstu do dalszego przetwarzania. Na przykład:

display alert "Hello, world!" buttons {"Rudely decline", "Happily accept"}
set theAnswer to button returned of the result
if theAnswer is "Happily accept" then
	beep 5
else
	say "Piffle!"
end if

Metafora języka naturalnego

Podczas gdy zdarzenia Apple są sposobem na wysyłanie wiadomości do aplikacji, AppleScript to szczególny język przeznaczony do wysyłania zdarzeń Apple. Zgodnie z celem, jakim jest łatwość użycia dla początkujących, język AppleScript został zaprojektowany w oparciu o metaforę języka naturalnego , podobnie jak graficzny interfejs użytkownika został zaprojektowany w oparciu o metaforę pulpitu . Dobrze napisany AppleScript powinien być wystarczająco jasny, aby każdy mógł go przeczytać i zrozumieć, a także łatwo edytować. Język jest oparty w dużej mierze na języku HyperTalk HyperCard, rozszerzonym tak, aby odnosił się nie tylko do świata kart i stosów HyperCard, ale także teoretycznie do dowolnego dokumentu. W tym celu zespół AppleScript wprowadził model obiektowy AppleEvent (AEOM), który określa obiekty, które „znaje” każda konkretna aplikacja.

Sercem języka AppleScript jest użycie terminów, które działają jak rzeczowniki i czasowniki, które można łączyć. Na przykład zamiast innego czasownika do drukowania strony, dokumentu lub zakresu stron (takiego jak printPage, printDocument, printRange), AppleScript używa pojedynczego czasownika „print”, który można połączyć z obiektem, takim jak strona, dokument lub zakres stron.

print page 1

print document 2

print pages 1 thru 5 of document 2

Ogólnie rzecz biorąc, AEOM definiuje pewną liczbę obiektów — takich jak „dokument” lub „akapit” — oraz odpowiadające im działania — takie jak „wytnij” i „zamknij”. System definiuje również sposoby odwoływania się do właściwości obiektów, a więc można odwołać się do „trzeciego akapitu dokumentu „Dzień dobry””, czy „koloru ostatniego słowa przedniej szyby”. AEOM używa słownika aplikacji do powiązania zdarzeń Apple z terminami czytelnymi dla człowieka, umożliwiając tłumaczenie tam i z powrotem między czytelnymi dla człowieka zdarzeniami AppleScript i kodem bajtowym Apple. Aby dowiedzieć się, które elementy programu są skryptowalne, można przeglądać słowniki obsługiwanych aplikacji. (W aplikacjach Xcode i Script Editor znajduje się to w Plik → Otwórz słownik .)

Aby określić, która aplikacja ma być celem takiej wiadomości, AppleScript używa konstrukcji „tell”:

tell application "Microsoft Word"
  quit
end tell

Alternatywnie, tell może być wyrażony w jednym wierszu za pomocą bezokolicznika :

tell application "Microsoft Word" to quit

W przypadku zdarzeń z pakietu „Core Suite” (aktywacja, otwieranie, ponowne otwieranie, zamykanie, drukowanie i zamykanie) aplikacja może być dostarczana jako bezpośredni obiekt poleceń przechodnich:

quit application "Microsoft Word"

Pojęcie hierarchii obiektów można wyrazić za pomocą zagnieżdżonych bloków:

tell application "QuarkXPress"
  tell document 1
    tell page 2
      tell text box 1
        set word 5 to "Apple"
      end tell
    end tell
  end tell
end tell

Pojęcie hierarchii obiektów można również wyrazić za pomocą zagnieżdżonych fraz przyimkowych :

pixel 7 of row 3 of TIFF image "my bitmap"

które w innym języku programowania mogą być wyrażone jako sekwencyjne wywołania metod , tak jak w tym pseudokodzie :

getTIFF("my bitmap").getRow(3).getPixel(7);

AppleScript zawiera składnię liczenia porządkowego „pierwszy akapit”, a także kardynalnego „akapit pierwszy”. Podobnie, same liczby mogą być określane jako tekst lub numerycznie, wszystkie „pięć”, „piąty” i „5” są obsługiwane; są synonimami w AppleScript. Ponadto słowo „the” może być legalnie użyte w dowolnym miejscu w skrypcie w celu zwiększenia czytelności: nie ma to wpływu na funkcjonalność skryptu.

Przykłady skryptów

Kalkulator bezpieczeństwa:

tell application "Finder"
	-- Set variables
	set the1 to text returned of (display dialog "1st" default answer "Number here" buttons {"Continue"} default button 1)
	set the2 to text returned of (display dialog "2nd" default answer "Number here" buttons {"Continue"} default button 1)
	try
		set the1 to the1 as integer
		set the2 to the2 as integer
	on error
		display dialog "You may only input numbers into a calculator." with title "ERROR" buttons {"OK"} default button 1
		return
	end try
	
	-- Add?
	if the button returned of (display dialog "Add?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 + the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	-- Subtract?	
	else if the button returned of (display dialog "Subtract?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 - the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	-- Multiply?	
	else if the button returned of (display dialog "Multiply?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 * the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	-- Divide?	
	else if the button returned of (display dialog "Divide?" buttons {"No", "Yes"} default button 2) is "Yes" then
		set ans to (the1 / the2)
		display dialog ans with title "Answer" buttons {"OK"} default button 1
		say ans
	else
		delay 1
		say "You haven't selected a function. The operation has cancelled."
	end if
	
end tell

Prosta sekwencja okna dialogowego z nazwą użytkownika i hasłem . Tutaj nazwa użytkownika to John, a hasło to app123:

tell application "Finder"
	set passAns to "app123"
	set userAns to "John"
	if the text returned of (display dialog "Username" default answer "") is userAns then
		display dialog "Correct" buttons {"Continue"} default button 1
		if the text returned of (display dialog "Username : John" & return & "Password" default answer "" buttons {"Continue"} default button 1 with hidden answer) is passAns then
			display dialog "Access granted" buttons {"OK"} default button 1
		else
			display dialog "Incorrect password" buttons {"OK"} default button 1
		end if
	else
		display dialog "Incorrect username" buttons {"OK"} default button 1
	end if
end tell

Narzędzia programistyczne

Edytory skryptów

Edytory skryptów zapewniają ujednolicone środowisko programistyczne dla AppleScripts, w tym narzędzia do komponowania, sprawdzania, kompilowania, uruchamiania i debugowania skryptów. Zapewniają również mechanizmy otwierania i przeglądania słowników AppleScript z aplikacji skryptowych, zapisywania skryptów w wielu formatach (skompilowane pliki skryptów, pakiety aplikacji, pakiety skryptów i zwykłe pliki tekstowe) i zwykle zapewniają funkcje, takie jak podświetlanie składni i wstępnie napisane fragmenty kodu .

Od Apple

Edytor AppleScript (Edytor skryptów)
Edytor AppleScript spakowany z systemem macOS, zwany Edytorem AppleScript w systemie Mac OS X Snow Leopard (10.6) do systemu OS X Mavericks (10.9) oraz Edytor skryptów we wszystkich wcześniejszych i nowszych wersjach systemu macOS. Skrypty są pisane w oknach edycji dokumentów, w których można je kompilować i uruchamiać, a okna te zawierają różne panele, w których rejestrowane informacje, wyniki wykonywania i inne informacje są dostępne do celów debugowania. Dostęp do słowników skryptów i gotowych fragmentów kodu jest możliwy za pośrednictwem menu aplikacji. Od OS X Yosemite (10.10), Script Editor umożliwia pisanie zarówno w AppleScript, jak i JavaScript .
Xkod
Zestaw narzędzi do tworzenia aplikacji z funkcjami edycji AppleScripts lub tworzenia pełnoprawnych aplikacji napisanych w AppleScript.

Od stron trzecich

Debuger skryptów , z Late Night Software
Komercyjne IDE innej firmy dla AppleScript. Script Debugger to bardziej zaawansowane środowisko AppleScript, które umożliwia piszącemu skrypty debugowanie skryptów AppleScript za pomocą pojedynczych kroków , punktów przerwania , wchodzenia i wychodzenia z funkcji/podprogramów, śledzenia zmiennych itp. Script Debugger zawiera również zaawansowaną przeglądarkę słowników, która pozwala użytkownikowi zobaczyć słownik w akcji w rzeczywistych sytuacjach. Oznacza to, że zamiast tylko listy tego, co obejmuje słownik, można na przykład otworzyć dokument w Pages i zobaczyć, jak terminy słownika odnoszą się do tego dokumentu, co ułatwia określenie, których części słownika użyć. Script Debugger nie jest przeznaczony do tworzenia skryptów z GUI, innych niż podstawowe alerty i okna dialogowe, ale koncentruje się bardziej na kodowaniu i debugowaniu skryptów.
Uśmiech i SmileLab
Darmowe/komercyjne IDE innej firmy dla AppleScript, napisane w całości w AppleScript. Smile jest darmowy i przeznaczony głównie do programowania w AppleScript. SmileLab to komercyjne oprogramowanie z rozbudowanymi dodatkami do analizy numerycznej, tworzenia wykresów, automatyzacji maszyn i produkcji internetowej. Smile i SmileLab używają asortymentu różnych okien — okien AppleScript do uruchamiania i zapisywania pełnych skryptów, terminali AppleScript do testowania kodu linia po linii, okien Unicode do pracy z tekstem i XML. Użytkownicy mogą tworzyć złożone interfejsy — zwane oknami dialogowymi — w sytuacjach, w których wbudowane okna dialogowe w AppleScript są niewystarczające.
ASObjC Explorer 4, od Shane Stanley
Wycofane komercyjne IDE innej firmy dla AppleScript, zwłaszcza dla AppleScriptObjC . Główną funkcją jest rejestrowanie obiektów/zdarzeń Cocoa , debugowanie i uzupełnianie kodu. Użytkownicy mogą odczytywać zdarzenia i obiekty Cocoa, podobnie jak inne aplikacje ze skryptami. To narzędzie zostało pierwotnie zbudowane dla bibliotek AppleScript (dostępne w OS X Mavericks ). Biblioteki AppleScript są przeznaczone do wielokrotnego użytku składników AppleScript i obsługują wbudowany słownik AppleScript (sdef). ASObjC Explorer 4 może być również zewnętrznym edytorem skryptów Xcode.
FaceSpan, z oprogramowania Late Night
Wycofane komercyjne środowisko IDE innej firmy do tworzenia aplikacji AppleScript z graficznym interfejsem użytkownika.

Wyrzutnie skryptów

AppleScripts można uruchomić z edytora skryptów, ale zwykle wygodniej jest uruchamiać skrypty bezpośrednio, bez otwierania aplikacji edytora skryptów. Można to zrobić na kilka sposobów:

Aplety
Skrypty AppleScript można zapisać z edytora skryptów jako aplikacje (nazywane apletami lub dropletami, gdy akceptują dane wejściowe metodą przeciągania i upuszczania ). Aplety można uruchamiać z Docka , z paska narzędzi okien Findera , z Spotlight , z programów uruchamiających aplikacje innych firm lub z dowolnego innego miejsca, w którym można uruchamiać aplikacje.
Działania dotyczące folderów
Korzystając z akcji folderów AppleScript, skrypty można uruchamiać, gdy w folderach wystąpią określone zmiany (takie jak dodawanie lub usuwanie plików). Akcje folderu można przypisać, klikając folder i wybierając opcję Ustawienia akcji folderu... z menu kontekstowego; lokalizacja tego polecenia różni się nieznacznie w systemie Mac OS X 10.6.x od wcześniejszych wersji. To samo działanie można osiągnąć za pomocą narzędzi innych firm, takich jak Hazel.
Wyrzutnie skrótów
Skróty klawiaturowe można przypisywać do skryptów AppleScript w menu skryptów za pomocą panelu preferencji Ustawienia klawiatury i myszy w Preferencjach systemowych . Ponadto dostępne są różne narzędzia innych firm — Alfred , FastScripts, Keyboard Maestro , QuicKeys, Quicksilver , TextExpander — które mogą uruchamiać AppleScripts na żądanie przy użyciu kombinacji klawiszy.
Menu skryptów
To ogólnosystemowe menu zapewnia dostęp do skryptów AppleScript z paska menu systemu macOS, widocznego niezależnie od uruchomionej aplikacji. (Ponadto wiele aplikacji Apple, niektóre aplikacje innych firm i niektóre dodatki udostępniają własne menu skryptów. Można je aktywować na różne sposoby, ale wszystkie działają zasadniczo w ten sam sposób). Wybranie skryptu w menu skryptów powoduje uruchomienie to. Począwszy od systemu Mac OS X 10.6.x, ogólnosystemowe menu skryptów można włączyć w preferencjach Edytora skryptów ; we wcześniejszych wersjach systemu Mac OS X można go było włączyć za pomocą aplikacji AppleScript Utility. Po pierwszym włączeniu menu skryptów wyświetla domyślną bibliotekę dość ogólnych, funkcjonalnych skryptów AppleScript, które można również otworzyć w Edytorze skryptów i wykorzystać jako przykłady do nauki AppleScript. Skrypty można zorganizować w taki sposób, aby pojawiały się w menu tylko wtedy, gdy na pierwszym planie znajdują się określone aplikacje.
Wiersz poleceń Unix i launchd
AppleScripts można uruchamiać z wiersza poleceń systemu Unix lub z programu launchd w przypadku zaplanowanych zadań za pomocą narzędzia wiersza poleceń osascript. Narzędzie osascript może uruchamiać skompilowane skrypty (pliki .scpt) i zwykłe pliki tekstowe (pliki .applescript — są one kompilowane przez narzędzie w czasie wykonywania). Aplikacje skryptowe można uruchamiać za pomocą polecenia otwartego systemu Unix.

Powiązane problemy ze skryptami

Biblioteki AppleScript
Moduły AppleScript wielokrotnego użytku (dostępne od OS X Mavericks ), napisane w AppleScript lub AppleScriptObjC i zapisane jako pliki skryptów lub pakiety w określonych lokalizacjach, które można wywołać z innych skryptów. Po zapisaniu jako pakiet, biblioteka może zawierać plik słownika AppleScript (sdef), działając w ten sposób jak dodatek do skryptów, ale napisany w AppleScript lub AppleScriptObjC.
Studio AppleScript
Framework do dołączania interfejsów Cocoa do aplikacji AppleScript, część pakietu Xcode w systemie Mac OS X 10.4 i 10.5, obecnie przestarzały na rzecz AppleScriptObjC.
AppleScriptObjC
Cocoa rozwój ram oprogramowanie , zwane także AppleScript / Objective-C lub Asoc, część pakietu Xcode od Mac OS X Snow Leopard . AppleScriptObjC umożliwia AppleScripts bezpośrednie używanie klas i metod Cocoa. Poniższa tabela przedstawia dostępność AppleScriptObjC w różnych wersjach systemu macOS:
Gdzie AppleScriptObjC może być używany w każdej wersji macOS
W Xcode W apletach W bibliotekach AppleScript
W edytorze skryptów
10,6 tak
10,7 tak tak
10,8 tak tak
10,9 tak tak tak
10.10 tak tak tak tak
Automatyzator
Graficzne, modułowe środowisko edycyjne, w którym przepływy pracy są budowane z akcji. Ma na celu powielenie wielu funkcji AppleScript bez konieczności posiadania wiedzy programistycznej. Automator posiada akcję zaprojektowaną specjalnie do przechowywania i uruchamiania skryptów AppleScript dla zadań, które są zbyt złożone dla uproszczonej struktury Automatora.
Skryptowalne aplikacje systemowe
Te aplikacje działające tylko w tle, spakowane z systemem macOS, są używane, aby umożliwić AppleScript dostęp do funkcji, które normalnie nie byłyby skryptami. Począwszy od systemu Mac OS X 10.6.3 obejmują one skryptowe aplikacje VoiceOver (pakiet skryptów do obsługi słuchu i czytnika ekranu Braille'a), zdarzenia systemowe (kontrola aplikacji nie obsługujących skryptów oraz dostęp do niektórych funkcji systemowych i podstawowych operacji na plikach), narzędzie konfiguracji drukarki ( skryptowe narzędzie do obsługi zadań drukowania), Image Events (podstawowa obróbka obrazu), HelpViewer (skryptowalne narzędzie do wyświetlania ekranów pomocy), Database Events (minimalny interfejs bazy danych SQLite3) i AppleScript Utility (do tworzenia skryptów kilku preferencji związanych z AppleScript), a także jako kilka aplikacji użytkowych używanych przez system.
Dodatki do skryptów (OSAX)
Wtyczki do AppleScript opracowane przez firmę Apple lub strony trzecie. Zostały zaprojektowane w celu rozszerzenia wbudowanego zestawu poleceń, rozszerzenia funkcji AppleScript i uczynienia go nieco mniej zależnym od funkcjonalności zapewnianej przez aplikacje. macOS zawiera zbiór dodatków do skryptów nazywanych dodatkami standardowymi ( StandardAdditions.osax ), które dodają zestaw poleceń i klas, które nie są częścią podstawowych funkcji AppleScript, w tym okna dialogowe interakcji użytkownika, odczytywanie i zapisywanie plików, polecenia systemu plików, funkcje daty oraz operacje tekstowe i matematyczne; bez tego OSAX, AppleScript nie miałby możliwości wykonywania wielu podstawowych czynności, które nie są bezpośrednio zapewniane przez aplikację.

Podstawy językowe

Klasy (typy danych)

Chociaż aplikacje mogą definiować wyspecjalizowane klasy (lub typy danych), AppleScript ma również szereg klas wbudowanych. Te podstawowe klasy danych są bezpośrednio obsługiwane przez język i są powszechnie rozpoznawane przez aplikacje skryptowe. Najczęstsze z nich to:

  • Obiekty podstawowe
    • application : obiekt aplikacji, używany głównie jako specyfikator dla instrukcji tell ( tell application "Finder" …).
    • skrypt : obiekt skryptu. Obiekty skryptów to kontenery na skrypty. Każdy AppleScript tworzy obiekt skryptu po uruchomieniu, a obiekty skryptu mogą być tworzone w ramach AppleScripts.
    • class : metaobiekt określający typ innych obiektów.
    • reference : obiekt, który zawiera nieoceniony specyfikator obiektu, który może, ale nie musi wskazywać na prawidłowy obiekt. Może być oceniany na żądanie, uzyskując dostęp do jego contentswłaściwości.
  • Standardowe obiekty danych
    • stała : stała wartość. Istnieje szereg stałych językowych zdefiniowane, takich jak pi, tabi linefeed.
    • boolean : wartość logiczna prawda/fałsz. Faktycznie podklasa od constant.
    • Numer : a rzadko używane streszczenie nadklasą z integeri real.
    • liczba całkowita : liczba całkowita . Można nimi manipulować za pomocą wbudowanych operatorów matematycznych.
    • real : liczba zmiennoprzecinkowa ( rzeczywista ). Można nimi manipulować za pomocą wbudowanych operatorów matematycznych.
    • data : data i godzina.
    • tekst : tekst. W wersjach AppleScript wcześniejszych niż 2.0 (Mac OS X 10.4 i starsze) textklasa różniła się od stringi Unicode text, a trzy zachowywały się nieco inaczej; w wersji 2.0 (10.5) i nowszych wszystkie są synonimami, a cały tekst jest obsługiwany jako zakodowany w UTF-16 („ Unicode ”).
  • Kontenery
    • list : uporządkowana lista obiektów. Może zawierać dowolną klasę, w tym inne listy i klasy zdefiniowane przez aplikacje.
    • rekord : lista obiektów z kluczami. Jak lista, z wyjątkiem ustrukturyzowanych jako pary klucz-wartość . Dostęp kluczowany w czasie wykonywania nie jest obsługiwany; wszystkie klucze muszą być stałymi identyfikatorami czasu kompilacji.
  • System plików
    • alias : odniesienie do obiektu systemu plików (pliku lub folderu). Alias ​​zachowa swoje łącze do obiektu, jeśli obiekt zostanie przeniesiony lub zmieniona nazwa.
    • file : odniesienie do obiektu systemu plików (pliku lub folderu). Jest to odwołanie statyczne i może wskazywać na obiekt, który aktualnie nie istnieje.
    • Plik POSIX : odwołanie do obiektu systemu plików (pliku lub folderu), w postaci zwykłego tekstu, przy użyciu notacji w stylu Unix ( POSIX ) z ukośnikiem (/). Nie jest to prawdziwy typ danych, ponieważ AppleScript automatycznie konwertuje pliki POSIX na zwykłe pliki za każdym razem, gdy są używane.
  • Różnorodny
    • Kolor RGB : określa trójkę RGB (w 16-bitowym formacie z wysokimi kolorami ) do użycia w poleceniach i obiektach, które pracują z kolorami.
    • typy jednostek : klasa, która konwertuje jednostki standardowe. Na przykład wartość można zdefiniować jako square yards, a następnie przekonwertować na square feetprzez rzutowanie między typami jednostek (za pomocą asoperatora).

Struktury językowe

Wiele procesów AppleScript jest zarządzanych przez bloki kodu, gdzie blok zaczyna się poleceniem polecenia, a kończy instrukcją end polecenia . Najważniejsze struktury zostały opisane poniżej.

Warunkowe

AppleScript oferuje dwa rodzaje warunków.

-- Simple conditional
if x < 1000 then set x to x + 1

-- Compound conditional
if x is greater than 3 then
     -- commands
else
     -- other commands
end if

Pętle

Pętla powtarzania AppleScript występuje w kilku nieco innych odmianach. Wszystkie one wykonują kilka razy blok między powtórzonymi i końcowymi liniami powtórzeń . Pętla może zostać przedwcześnie zatrzymana komendą exit repeat .

Powtarzaj w nieskończoność.

repeat
     -- commands to be repeated
end repeat

Powtórz daną liczbę razy.

repeat 10 times
     -- commands to be repeated
end repeat

Pętle warunkowe. Blok wewnątrz powtarzaj while pętla jest wykonywana, dopóki warunek ma wartość true. Warunek jest ponownie oceniany po każdym wykonaniu bloku. Powtarzać aż do pętli jest inaczej identyczne, ale blok jest wykonywany tak długo, jak analizuje schemat stan false.

set x to 5
repeat while x > 0
     set x to x - 1
end repeat

set x to 5
repeat until x  0
     set x to x - 1
end repeat

Pętla ze zmienną. Podczas uruchamiania pętli zmienna jest przypisywana do wartości początkowej. Po każdym wykonaniu bloku do zmiennej dodawana jest opcjonalna wartość kroku. Wartość domyślna kroku to 1.

-- repeat the block 2000 times, i gets all values from 1 to 2000
repeat with i from 1 to 2000
     -- commands to be repeated
end repeat

-- repeat the block 4 times, i gets values 100, 75, 50 and 25
repeat with i from 100 to 25 by -25
    -- commands to be repeated 
end repeat

Wymień listę. W każdej iteracji ustaw loopVariable na nowy element na podanej liście

set total to 0
repeat with loopVariable in {1, 2, 3, 4, 5}
	set total to total + loopVariable
end repeat
Kierowanie aplikacji Obsługa błędów
-- Simple form
tell application "Safari" to activate

-- Compound
tell application "MyApp"
     -- commands for app
end tell
try
     -- commands to be tested
on error
     -- error commands 
end try

Jedna ważna odmiana tej struktury bloków ma postać bloków onend ... , które są używane do definiowania programów obsługi (podprogramów podobnych do funkcji). Programy obsługi zaczynają się od on functionName() i kończą na end functionName i nie są wykonywane jako część normalnego przepływu skryptu, chyba że zostaną wywołane z jakiegoś miejsca w skrypcie.

Obsługa funkcji Blokowanie akcji folderu Uruchom obsługę
on myFunction(parameters...)
     -- subroutine commands 
end myFunction
on adding folder items to thisFolder after receiving theseItems
     -- commands to apply to the folder or items 	
end adding folder items to
on run
     -- commands
end run

Programy obsługi mogą być również definiowane przy użyciu "to" zamiast "on" i mogą być napisane tak, aby akceptować parametry etykietowane, nieujęte w nawiasy.

Handler z oznaczonymi parametrami Handler używający "to" i oznaczonych parametrów
on rock around the clock
	display dialog (clock as string)
end rock
-- called with:
rock around the current date
to check for yourNumber from bottom thru top
	if bottom  yourNumber and yourNumber  top then
		display dialog "Congratulations! You scored."
	end if
end check
--called with:
check for 8 from 7 thru 10

Istnieją cztery typy predefiniowanych programów obsługi w AppleScript — uruchom, otwórz, bezczynność i zakończ — z których każdy jest tworzony w taki sam sposób, jak procedura obsługi pokazana powyżej.

Uruchom obsługę
Definiuje główny kod skryptu, który jest wywoływany po uruchomieniu skryptu. Bloki obsługi uruchamiania są opcjonalne, chyba że do skryptu są przekazywane argumenty. Jeśli jawny blok obsługi uruchomienia zostanie pominięty, cały kod, który nie jest zawarty w blokach obsługi, jest wykonywany tak, jakby znajdował się w niejawnej procedurze obsługi.
Otwórz obsługę
Zdefiniowane za pomocą "przy otwarciu elementów".
on open theItems
     repeat with thisItem in theItems
         tell application "Finder" to update thisItem
     end repeat 
end open

Kiedy skrypt zawierający „otwartą procedurę obsługi” jest zapisywany jako aplet, staje się on dropletem. Droplet można rozpoznać w Finderze po jego ikonie, która zawiera strzałkę, wskazującą, że elementy mogą zostać upuszczone na ikonę. handler jest wykonywany, gdy pliki lub foldery są upuszczane na ikonę dropletu, referencje do elementów upuszczanych na ikonę dropletu są przekazywane do skryptu dropletu jako parametr otwartego handlera, droplet może być również uruchamiany w taki sam sposób jak zwykły aplet, wykonywanie procedury obsługi uruchomienia.

Obsługa bezczynności
Podprogram uruchamiany okresowo przez system, gdy aplikacja jest bezczynna.
on idle
     --code to execute when the script's execution has completed
  return 60 -- number of seconds to pause before executing idle handler again
end idle

Procedura obsługi bezczynności może być używana w apletach lub dropletach zapisanych jako aplety pozostające otwarte i jest przydatna w przypadku skryptów, które obserwują określone dane lub zdarzenia. Długość czasu bezczynności domyślnie wynosi 30 sekund, ale można ją zmienić, dołączając instrukcję „return x” na końcu podprogramu, gdzie x to liczba sekund, przez które system powinien odczekać przed ponownym uruchomieniem procedury obsługi.

Zakończ obsługę
Procedura obsługi, która jest uruchamiana, gdy aplet otrzymuje żądanie Quit. Może to służyć do zapisywania danych lub wykonywania innych końcowych zadań przed zakończeniem.
on quit
     --commands to execute before the script quits
  continue quit -- required for the script to actually quit
end quit
Obiekty skryptów

Obiekty skryptów można zdefiniować jawnie za pomocą składni:

script scriptName
     -- commands and handlers specific to the script
end script

Obiekty skryptów mogą korzystać z tych samych struktur „tell”, które są używane w obiektach aplikacji i mogą być ładowane z plików i zapisywane w nich. W niektórych przypadkach czas wykonywania w środowisku wykonawczym można skrócić, korzystając z obiektów skryptów.

Różne informacje

  • Zmienne nie są ściśle typowane i nie muszą być deklarowane. Zmienne mogą przyjmować dowolny typ danych (w tym skrypty i funkcje). Poniższe polecenia są przykładami tworzenia zmiennych:
    set variable1 to 1 -- create an integer variable called variable1
    set variable2 to "Hello" -- create a text variable called variable2
    copy {17, "doubleday"} to variable3 -- create a list variable called variable3
    set {variable4, variable5} to variable3 -- copy the list items of variable3 into separate variables variable4 and variable5
    set variable6 to script myScript -- set a variable to an instance of a script
    
  • Obiekty skryptów są obiektami pełnymi — mogą hermetyzować metody i dane oraz dziedziczyć dane i zachowanie ze skryptu nadrzędnego.
  • Podprogramów nie można wywoływać bezpośrednio z bloków tell aplikacji. W tym celu użyj słów kluczowych „mój” lub „mnie”.
tell application "Finder"
    set x to my myHandler()
    -- or
    set x to myHandler() of me
end tell

on myHandler()
    --commands
end myHandler

Użycie tej samej techniki do skryptów poleceń dodawania może zmniejszyć liczbę błędów i poprawić wydajność.

tell application "Finder"
	set anyNumber to my (random number from 5 to 50)
end tell

Otwarta architektura skryptów

Ważnym aspektem implementacji AppleScript jest architektura Open Scripting Architecture ( OSA ). Firma Apple zapewnia OSA dla innych języków skryptowych i produktów do obsługi skryptów/automatyzacji innych firm, takich jak QuicKeys i UserLand Frontier, aby działały na równym poziomie z AppleScript. AppleScript został zaimplementowany jako komponent skryptowy , a podstawowe specyfikacje dotyczące łączenia takich komponentów z OSA były publiczne, umożliwiając innym programistom dodawanie własnych komponentów skryptowych do systemu. Publiczne interfejsy API klienta służące do ładowania, zapisywania i kompilowania skryptów działałyby tak samo dla wszystkich takich komponentów, co oznaczało również, że aplety i droplety mogłyby przechowywać skrypty w dowolnym z tych języków skryptowych.

Jedną z funkcji OSA są dodatki do skryptów lub OSAX for Open Scripting Architecture eXtension , które zostały zainspirowane poleceniami zewnętrznymi HyperCard . Dodatki do skryptów to biblioteki, które umożliwiają programistom rozszerzenie funkcji AppleScript. Polecenia zawarte jako dodatki do skryptów są dostępne w całym systemie i nie są zależne od aplikacji (zobacz także § Biblioteki AppleScript ). Edytor AppleScript może również bezpośrednio edytować i uruchamiać niektóre języki OSA.

JavaScript do automatyzacji

W systemie OS X Yosemite i nowszych wersjach macOS składnik JavaScript for Automation ( JXA ) pozostaje jedyną poważną alternatywą dla języka OSA dla AppleScript, chociaż wersje dla komputerów Macintosh Perl , Python , Ruby i Tcl obsługują natywne sposoby pracy ze zdarzeniami Apple bez bycia komponentami OSA.

JXA zapewnia również interfejs w języku obcym Objective-C (i C). Będąc środowiskiem opartym na silniku JavaScriptCore WebKit, zestaw funkcji JavaScript jest zsynchronizowany z systemowym silnikiem przeglądarki Safari. JXA zapewnia modułowy system JavaScript i możliwe jest również użycie CommonJS moduły poprzez browserify.

Zobacz też

  • BBEdit — wysoce skryptowalny edytor tekstu

Bibliografia

Dalsza lektura

Zewnętrzne linki