Merhaba AppleScript

Elimizin altındaki gizli güç

İlk olarak 1993 yılında ortaya çıkan, tamamen Apple’a, Apple’ın işletim sistemlerine uygun olarak hazırlanan bir programlama dili ve otomasyon aracıdır AppleScript. Aslında o kadar çok değişik ve komplike işleri yapmak mümkündür ki! Sadece programcıklar geliştirmek dışında diğer bir amacı da, varolan uygulamaları da kontrol edip programlamaktır.

Bu ne anlama geliyor? Asıl amaç, işletim sisteminde bulunan derlenmiş, paketlenmiş executable uygulamanın kaynak kodunu değiştirmeden ek özellikler getirebilmek. Örneğin işletim sistemi ilen gelen uygulamalardan biri, Notes uygulaması:

Notes uygulaması

Normal şartlar altında bu uygulamanın ne yazıkki kaynak kodu ortada yok. Keza, olduğunu bile varsaysak, bu tip bir uygulamaya ekleme çıkartma yapmak için çok ciddi Swift ya da Objective-C bilmemiz gerektiğini düşünüyorum. Bu kadar zahmete girmeden AppleScript ile Note uygulamasında pek çok şey yapmak mümkün.

Gençliğimde Amiga OS’da da benzer bir mantık vardı ve ben bunun eksikliğini hep hissettim. Unix tabanlı Amiga OS’un 1987 yılında ARexx adında, Rexx dilinden türettiği bir dil. Eğer kullandığınız uygulamanın ARexx port’u varsa, o uygulamayı istediğiniz gibi kontrol edebiliyordunuz. Bugünkü tabirle varolan uygulamaya Plugin yazmak gibi birşey. Ben bu yöntemle efsane BBS sunucusu Amiexpress /X için tonlarca DOOR yazmıştım.

Yaklaşık 20 yılını Apple’e vermiş ve saçma bir şekilde, geçtiğimiz yıl (2016) Kasım ayında Apple’dan işten çıkartılmış efsane insan Sal Soghoian, AppleScript ve otomasyon işlerinin arkasındaki isim. Bu yazıyı hazırlarken öğrendim ne yazıkki Sal geçen Kasım ayında işten çıkartılmış.

İşin düşündürücü tarafı, Sal, John Gruber’a anlatırken; Kapatılan The macOS user automation technologies departmanına bağlı olan projelerin içinde UNIX CLI (shell, ruby, python vs…), System Servisleri, Apple Events (JavaScript, AppleScript, AppleScriptObj-C, Scripting Bridge), Automator, AppleScript, Photos, iWork, Finder, Mail ve macOS ile gelen tüm Apple uygulamarının bulunduğunu söylüyor. Umarım, ileriki sürümlerde AppleScript’ten vazgeçmezler…

Ben, 2008’lerde tanıştım AppleScript ile. Zamanının macOS için ilk Twitter client’larından Twitterrific’e otomatik olarak bir mesaj nasıl gönderebileceğimi araştırırken komut satırından şunu yapabileceğimi bulmuştum:

osascript -e 'tell app "Twitterrific" to post update "karnım acıktı"'

Tek tırnak içinde yazanlara baktığımızda;

tell app "Twitterrific" to post update "karnım acıktı"

karşımızda ciddi ciddi İngilizce konuşan birşey görüyoruz. Diyorki; Twitterrific adlı uygulamaya şunu söyle: “karnım acıktı” diye bir güncelleme post et. tell app ya da tell application konuşacağımız uygulama oluyor. Bu noktadan itibaren, Twitterrific bize scriptable ne sunmuşsa kullanbiliyoruz1.

osascript, Open Scripting Architecture yani script ile programlamaya açık mimari anlamıda. Peki neler var sistem buna uygun?

osalang -l

ascr appl cgxervdh  AppleScript
jscr appl cgxe-v-h  JavaScript
scpt appl cgxervdh  Generic Scripting System

Çıktıda yazan cgxervdh aslında her harfin bir anlamı var:

c     compiling scripts.
g     getting source data.
x     coercing script values.
e     manipulating the event create and send functions.
r     recording scripts.
v     ``convenience'' APIs to execute scripts in one step.
d     manipulating dialects.
h     using scripts to handle Apple Events.

JavaScript’de r ve d yok. 3 tane dil ile osascript çalıştırabiliyoruz. Bunlar: AppleScript, JavaScript ve Jenerik Script. Şimdi, komut satırından argüman alan minik bir script yazalım:

on run argv
    return "merhaba, ilk gelen argüman: " & item 1 of argv & "."
end run

Bu yazdığımız script’, first_script.scpt olarak kaydedelim. Çalıştırmak için;

osascript first_script.scpt dünya

# çıktısı:
# merhaba, ilk gelen argüman: dünya.

Geçtiğimiz argüman, on run anında argv adlı değişkende saklanıyor. Daha sonra item 1 of argv diyerek listenin ilk elemanını alıyoruz. İngilizce gibi dedik ya… O halde item 1 of argv yerine first item of argv da yazabilirdik!

macOS, içinde Script Editor adında orta-şekerli bir editörle beraber geliyor. Bu editör yardımıyla AppleScript yazmak ve anında çalıştırmak mümkün. Keza, hangi uygulamada AppleScript kullanmanın mümkün olduğunu da yine bu editörün Library menüsünden tespit ediyoruz.

Script Editor ekran görüntüsü

Yazıya son verirken, Notes uygulamasında kaç tane not bulunduğunu gösteren script’i yazsak nasıl olurdu sizce ? Aşağıdaki kodu notes_count.applescript olarak kaydedin ve;

tell application "Notes"
    set notes_count to (count of notes)
    return notes_count
end tell

osascript notes_count.applescript şeklinde çalıştırın. Bende 138 geldi! Son olarak osacompile’dan da bahsetmek istiyorum. Yazılan script’i aynı C kodunu derler gibi derlemek mümkün. Duruma göre executable duruma göre aynı native macOS uygulaması gibi çalıştırmak da mümkün. İleriki yazılarda benzer örnekler yapacağız. Neticde yazdığımız kod düz bir metin/text. Şimdi bunu sanki gerçek bir macOS app’i haline getirelim:

tell application "Notes"
    activate
    set notes_count to (count of notes)
    display alert "You have " & notes_count & " notes"
    return notes_count
end tell

Bu kodu ~/Desktop/notes_count.applescript kaydedin. Sonra komut satırından;

osacompile -o ~/Desktop/my_first_executable.app ~/Desktop/notes_count.applescript

Şimdi ~/Desktop/’a baktığınızda my_first_executable.app adlı tıklanabilir bir uygulama göreceksiniz!

Örnek uygulama ikonu

Önümüzdeki yazılarda, AppleScript’in veri tiplerini yani değişken, dizi ve benzeri özellikleri diğer programlama dilleri ile karşılaştırarak yazmaya çalışacağım. Çok merak edenler ufaktan Apple dökümanına göz atabilirler.


  1. Ne yazıkki artık Twitterrific, AppleScript desteğini kaldırmış.