맨위로가기

애플스크립트

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

애플스크립트는 1993년 시스템 7.1.1의 일부로 출시된 macOS의 스크립트 언어이다. 하이퍼카드 프로젝트에서 파생되었으며, 자연어에 가까운 구문을 사용하여 응용 프로그램 제어 및 데이터 조작을 자동화한다. 오픈 스크립팅 아키텍처(OSA)를 기반으로 하며, 다른 스크립팅 언어와도 연동된다. 스크립트 편집기를 비롯한 다양한 개발 도구를 지원하며, 핫키, 폴더 액션, 스크립트 메뉴 등을 통해 실행할 수 있다. AppleScriptObjC를 통해 Cocoa 프레임워크를 직접 사용할 수 있으며, JavaScript for Automation(JXA)도 지원한다. 다양한 실행 환경과 제한된 기능이 있으며, Hello World 프로그램을 비롯한 다양한 예제를 통해 스크립트 작성이 가능하다.

더 읽어볼만한 페이지

  • MacOS 개발 - 번들 (macOS)
    macOS에서 번들은 응용 프로그램, 프레임워크, 플러그인 등 다양한 형태로 존재하며 실행에 필요한 코드, 리소스, 설정 파일 등을 포함하는 특수한 디렉터리 형식이다.
  • MacOS 개발 - Mach-O
  • 동적 프로그래밍 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
  • 동적 프로그래밍 언어 -
    펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
  • 고급 프로그래밍 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 고급 프로그래밍 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
애플스크립트 - [IT 관련 정보]에 관한 문서
기본 정보
개발사애플
개발 시작 연도1993년
최신 버전2.8
최신 릴리스 날짜2014년 10월 16일
운영 체제시스템 7, macOS
라이선스사유 소프트웨어 (APSL 하에 일부 사용 가능)
웹사이트AppleScript 언어 가이드
영향을 받은 언어자연어 프로그래밍, HyperTalk
파일 확장자.scpt, .scptd, .applescript
개요
프로그래밍 패러다임자연어 프로그래밍, 스크립팅
자료형약한 동적 타이핑
객체 지향객체 지향

2. 역사

1980년대 후반, 애플은 회사 전체와 자사의 클래식 Mac OS 운영 체제 내에서, 그리고 애플 제품과 비 애플 제품 간의 프로세스 간 통신을 위해 HyperCard의 HyperTalk 스크립트 언어를 표준 언어로 사용하는 것을 고려했다.[5] HyperTalk는 초보자도 HyperCard 스택을 프로그래밍하는 데 사용할 수 있었다. 애플의 엔지니어들은 유사하지만 더욱 객체 지향적인 스크립트 언어를 설계하여 모든 응용 소프트웨어와 함께 사용할 수 있다는 것을 인식했고, 애플스크립트 프로젝트는 매킨토시를 전체적으로 현대화하려는 연구의 파생 상품으로 탄생하여 마침내 System 7의 일부가 되었다.[6]

애플스크립트는 1993년 10월 System 7.1.1(System 7 Pro, System 7의 첫 번째 주요 업그레이드)의 일부로 출시되었다.[6] QuarkXPress (버전 3.2)는 애플스크립트를 지원하는 최초의 주요 소프트웨어 응용 프로그램 중 하나였다. 이는 애플스크립트가 출판 및 사전 인쇄 분야에서 널리 채택되도록 이끌었고, 복잡한 워크플로를 함께 묶는 경우가 많았다. 이는 QuarkXpress 및 기타 출판 응용 프로그램이 마이크로소프트 윈도우로 포팅된 후에도 매킨토시가 출판 및 사전 인쇄 분야에서 지배적인 위치를 유지하는 데 핵심적인 요소였다.

Mac OS X로의 전환(약 2002년)과 Cocoa 프레임워크는 애플스크립트의 유용성과 유연성을 크게 향상시켰다. Cocoa 응용 프로그램은 응용 프로그램 개발자가 최소한의 노력으로 앱에 대한 기본 스크립트 기능을 구현할 수 있도록 하여 직접 스크립트 가능한 응용 프로그램의 수를 늘렸다. 동시에 Unix 기반으로의 전환과 `do shell script` 명령을 사용하여 Unix 명령을 직접 실행하는 애플스크립트의 기능[7]은 애플스크립트가 운영 체제 자체를 훨씬 더 잘 제어할 수 있도록 했다.[4] AppleScript Studio는 Mac OS X 10.2와 함께 Xcode의 일부로 출시되었고, 이후 AppleScriptObjC 프레임워크는 Mac OS X 10.6에서 출시되어 사용자가 애플스크립트를 사용하여 Cocoa 응용 프로그램을 구축할 수 있게 했다.[4]

2006년 ''Macworld''는 애플스크립트를 현재까지 애플의 30대 주요 제품 순위에 포함시켜 17위에 올렸다.[8]

2013년 ''Macworld'' 기사에서, 베테랑 Mac 소프트웨어 개발자이자 해설가인 John Gruber는 "애플스크립트의 놀라운 지속성"에 대한 자신의 고찰을 결론 내리면서 다음과 같이 언급했다. "이론적으로는 애플스크립트가 훨씬 더 나아질 수 있지만, 실제로는 우리가 가지고 있는 것 중 가장 잘 작동하는 것입니다. 이는 수리공과 고급 사용자를 위한 iOS보다 Mac의 장점을 보여줍니다."[9]

2016년 10월, 오랫동안 애플스크립트 제품 관리자이자 자동화 전도사였던 Sal Soghoian은 "사업상의 이유"로 그의 직책이 폐지되면서 애플을 떠났다.[10] John Gruber와 Andy Ihnatko와 같은 Mac 커뮤니티의 베테랑들은 일반적으로 우려를 표명하며 애플의 개발자 커뮤니티와 프로 사용자들에 대한 헌신에 의문을 제기했다.[11] 애플 소프트웨어 엔지니어링 수석 부사장 Craig Federighi는 이메일을 통해 "우리는 macOS의 훌륭한 자동화 기술에 대한 지원을 계속할 의지가 있습니다!"라고 답했지만, ''The Mac Observer''의 Jeff Gamet은 이것이 애플 자동화의 미래, 특히 애플스크립트에 대한 그의 의구심을 달래는 데 거의 도움이 되지 않았다고 의견을 밝혔다.[12]

애플스크립트 문서의 형식은 유지되므로 기본적으로 호환성이 확보되어 있다. 인텔 CPU로의 이행(Mac OS X v10.4), 64비트로의 이행(Mac OS X v10.7), Apple Silicon(ARM) 이행(macOS 11.0) 등 OS의 기반이 크게 변혁하는 시기가 있었지만, 애플스크립트 자체에 대해서는 거의 영향이 없었다.

macOS 표준 첨부 응용 프로그램의 기능은 OS 버전마다 다르기 때문에 이러한 기능을 호출하는 처리를 하고 있는 경우에는 확인이 필요하다. 특히, 애플스크립트에 OS의 기능을 제공하기 위해 마련된 보조 응용 프로그램은 OS 버전에 따라 변경될 수 있으므로, 그 존재 및 대체 기능을 확인할 필요가 있다.

GUI 스크립팅을 이용하고 있는 경우에는, 메뉴 구성이나 버튼의 문자를 변경하는 것만으로도 동작하지 않게 될 가능성이 있다.

OS X v10.10 이후부터는 애플스크립트 측이 예상하는 애플스크립트 처리계의 버전(≒ macOS 그 자체의 버전)을 use 명령어를 사용하여 표기할 수 있게 되었다.

애플스크립트 버전macOS 버전use 명령어 기술
2.410.10use AppleScript version "2.4"
2.510.11, 10.12use AppleScript version "2.5"
2.710.13, 10.14 , 10.15, 11.0use AppleScript version "2.7"
2.812.0, 13.0, 14.0, 15.0use AppleScript version "2.8"



macOS 10.14 이후에는 서드파티(third-party) OSAX를 사용할 수 없게 되었으므로, 이를 사용하고 있는 스크립트를 macOS 10.14 이후에서 동작시키려면 대체 기능을 찾아야 한다.

2. 1. 개발 배경

애플스크립트 프로젝트는 개발이 중단된 하이퍼카드 프로젝트의 결과물이다. 하이퍼카드는 하이퍼토크라는 영어 기반의 스크립트 언어를 포함하였는데, 이는 하이퍼카드 스택 프로그램을 짜는 데 이용되었다. 애플 공학자들은 이와 비슷한 스크립트 언어가 어떠한 응용 프로그램에도 쓰일 수 있다는 것을 알았으며, 애플스크립트 프로젝트는 시스템 7의 일부로 탄생하였다.[5]

애플스크립트는 1993년 10월에 시스템 7.1.1 (시스템 7 프로, 시스템 7의 첫 주요 업그레이드판)의 일부로 출시되었다.[6] 쿼크익스프레스 (버전 3.2)는 애플스크립트를 지원한 최초의 주 응용 소프트웨어 가운데 하나였다. 이로 인해 출판 업계에 널리 채용될 수 있었다.

Mac OS X로의 전환(약 2002년)과 Cocoa 프레임워크는 애플스크립트의 유용성과 유연성을 크게 향상시켰다. Cocoa 응용 프로그램은 응용 프로그램 개발자가 최소한의 노력으로 앱에 대한 기본 스크립트 기능을 구현할 수 있도록 하여 직접 스크립트 가능한 응용 프로그램의 수를 늘렸다. 동시에 Unix 기반으로의 전환과 `do shell script` 명령을 사용하여 Unix 명령을 직접 실행하는 애플스크립트의 기능은[7] 애플스크립트가 운영 체제 자체를 훨씬 더 잘 제어할 수 있도록 했다.[4]

2. 2. 출시 및 발전

애플스크립트 프로젝트는 지금은 개발이 중단된 하이퍼카드 프로젝트의 결과물이다. 하이퍼카드는 하이퍼토크라는 영어 기반의 스크립트 언어를 포함하였는데, 이는 하이퍼카드 스택 프로그램을 짜는 데 이용되었다. 애플 공학자들은 이와 비슷한 스크립트 언어가 어떠한 응용 프로그램에도 쓰일 수 있다는 것을 알았으며, 애플스크립트 프로젝트는 시스템 7의 일부로 탄생하였다.[5][6]

애플스크립트는 1993년 10월에 시스템 7.1.1 (시스템 7 프로, 시스템 7의 첫 주요 업그레이드판)의 일부로 출시되었다.[6] 쿼크익스프레스 (버전 3.2)는 애플스크립트를 지원한 최초의 주 응용 소프트웨어 가운데 하나였다. 이로 인해 출판 업계에 널리 채용될 수 있었으며, 마이크로소프트 윈도우로 포팅된 후에도 매킨토시가 출판 및 사전 인쇄 분야에서 지배적인 위치를 유지하는 데 핵심적인 요소였다.

Mac OS X로의 전환(약 2002년)과 Cocoa 프레임워크는 애플스크립트의 유용성과 유연성을 크게 향상시켰다. Cocoa 응용 프로그램은 응용 프로그램 개발자가 최소한의 노력으로 앱에 대한 기본 스크립트 기능을 구현할 수 있도록 하여 직접 스크립트 가능한 응용 프로그램의 수를 늘렸다. 동시에 Unix 기반으로의 전환과 `do shell script` 명령을 사용하여 Unix 명령을 직접 실행하는 애플스크립트의 기능[7]은 애플스크립트가 운영 체제 자체를 훨씬 더 잘 제어할 수 있도록 했다.[4] AppleScript Studio는 Mac OS X 10.2와 함께 Xcode의 일부로 출시되었고, 이후 AppleScriptObjC 프레임워크는 Mac OS X 10.6에서 출시되어 사용자가 애플스크립트를 사용하여 Cocoa 응용 프로그램을 구축할 수 있게 했다.[4]

2006년 ''Macworld''는 애플스크립트를 현재까지 애플의 30대 주요 제품 순위에 포함시켜 17위에 올렸다.[8]

2016년 10월, 오랫동안 애플스크립트 제품 관리자이자 자동화 전도사인 Sal Soghoian은 "사업상의 이유"로 그의 직책이 폐지되면서 애플을 떠났다.[10]

현재 애플스크립트는 Automator, 단축어, 서비스 메뉴, shell script와 함께 macOS 자동화 기술의 한 구성 요소로 남아 있다.

2. 3. 주요 개발자 및 관련 인물

Sal Soghoian는 오랫동안 애플스크립트 제품 관리자이자 자동화 전도사였으나, 2016년 10월 "사업상의 이유"로 그의 직책이 폐지되면서 애플을 떠났다.[10]

2. 4. 현재

애플스크립트는 현재 서비스 메뉴, 오토메이터와 함께 맥 OS X 자동화 기술의 구성 요소이다.[4]

Mac OS X로의 전환(약 2002년)과 Cocoa 프레임워크는 애플스크립트의 유용성과 유연성을 크게 향상시켰다. Cocoa 응용 프로그램은 응용 프로그램 개발자가 최소한의 노력으로 앱에 대한 기본 스크립트 기능을 구현할 수 있도록 하여 직접 스크립트 가능한 응용 프로그램의 수를 늘렸다. 동시에 Unix 기반으로의 전환과 `do shell script` 명령을 사용하여 Unix 명령을 직접 실행하는 애플스크립트의 기능[7]은 애플스크립트가 운영 체제 자체를 훨씬 더 잘 제어할 수 있도록 했다.[4] AppleScript Studio는 Mac OS X 10.2와 함께 Xcode의 일부로 출시되었고, 이후 AppleScriptObjC 프레임워크는 Mac OS X 10.6에서 출시되어 사용자가 애플스크립트를 사용하여 Cocoa 응용 프로그램을 구축할 수 있게 했다.[4]

2016년 10월, 오랫동안 애플스크립트 제품 관리자이자 자동화 전도사였던 Sal Soghoian은 "사업상의 이유"로 그의 직책이 폐지되면서 애플을 떠났다.[10] John Gruber와 Andy Ihnatko와 같은 Mac 커뮤니티의 베테랑들은 일반적으로 우려를 표명하며 애플의 개발자 커뮤니티와 프로 사용자들에 대한 헌신에 의문을 제기했다.[11] 애플 소프트웨어 엔지니어링 수석 부사장 Craig Federighi는 이메일을 통해 "우리는 macOS의 훌륭한 자동화 기술에 대한 지원을 계속할 의지가 있습니다!"라고 답했지만, ''The Mac Observer''의 Jeff Gamet은 이것이 애플 자동화의 미래, 특히 애플스크립트에 대한 그의 의구심을 달래는 데 거의 도움이 되지 않았다고 의견을 밝혔다.[12] 당분간 애플스크립트는 Automator, 단축어, 서비스 메뉴, shell script와 함께 macOS 자동화 기술의 한 구성 요소로 남아 있다.

애플스크립트 문서의 형식은 유지되므로 기본적으로 호환성이 확보되어 있다. 지금까지 Mac OS X v10.4의 인텔 CPU로의 이행이나, Mac OS X v10.7의 64비트로의 이행, macOS 11.0의 Apple Silicon(ARM) 이행 등 OS의 기반이 크게 변혁하는 시기가 있었지만, 애플스크립트 자체에 대해서는 거의 영향이 없었다. 애플스크립트의 처리계 자체의 변경이 미세하게 이루어졌기 때문에, 15년 전에 만들어진 정렬 루틴이 그대로 사용되기도 한다.

macOS 표준 첨부 응용 프로그램의 기능은 OS 버전마다 다르기 때문에 이러한 기능을 호출하는 처리를 하고 있는 경우에는 확인이 필요하다. 특히, 애플스크립트에 OS의 기능을 제공하기 위해 마련된 보조 응용 프로그램은 OS 버전에 따라 변경될 수 있으므로, 그 존재 및 대체 기능을 확인할 필요가 있다. 일반적으로 구 버전에서 신 버전으로의 이행은 그만큼 수고가 들지만 확인 작업 레벨에서 끝난다. 반대로, 새로운 버전의 OS에서 구 버전의 OS로 스크립트를 이식하는 경우에는 작업량이 대폭 증가한다.

GUI 스크립팅을 이용하고 있는 경우에는, 메뉴 구성이나 버튼의 문자를 변경하는 것만으로도 동작하지 않게 될 가능성이 있으므로, 애초에 다른 OS 버전 간에 그대로 동작할 가능성은 낮다(단순한 수정으로 대응할 수 있다).

OS X v10.10 이후부터는 애플스크립트 측이 예상하는 애플스크립트 처리계의 버전(≒ macOS 그 자체의 버전)을 use 명령어를 사용하여 표기할 수 있게 되었다.

애플스크립트 버전macOS 버전use 명령어 기술
2.410.10use AppleScript version "2.4"
2.510.11, 10.12use AppleScript version "2.5"
2.710.13, 10.14 , 10.15, 11.0use AppleScript version "2.7"
2.812.0, 13.0, 14.0, 15.0use AppleScript version "2.8"



macOS 10.14 이후에는 서드파티(third-party) OSAX를 사용할 수 없게 되었으므로, 이를 사용하고 있는 스크립트를 macOS 10.14 이후에서 동작시키려면 대체 기능을 찾아야 한다.

3. 특징

애플스크립트는 응용 프로그램 간 통신(IAC)을 위해 애플이 개발한 애플 이벤트를 사용하는 스크립트 언어이다.[3][4] 애플 이벤트는 반복적인 작업을 자동화하기 위해 여러 응용 프로그램 간에 데이터를 교환하고 제어하는 데 사용된다.

애플스크립트는 응용 프로그램으로 애플 이벤트를 보내고 받는 기능 외에도 자체적인 처리 능력을 갖추고 있다. 기본적인 계산 및 텍스트 처리가 가능하며, 스크립팅 추가 기능을 통해 기능을 확장할 수 있다. 그러나 복잡한 작업을 처리하기 위해 응용 프로그램과 프로세스의 기능에 의존하는 경향이 있다. 구조화된 명령 언어인 애플스크립트는 유닉스 셸, 마이크로소프트 윈도우 스크립트 호스트, IBM REXX와 비교되지만, 이들과는 다른 특징을 가진다. 애플스크립트 기능의 핵심은 매킨토시 응용 프로그램이 주소 지정 가능한 객체와 연산의 "사전"을 게시한다는 점에 있다.

애플스크립트는 절차적 프로그래밍, 객체 지향 프로그래밍 (특히 스크립트 객체 구성 시), 자연어 프로그래밍의 요소를 일부 포함하고 있지만, 특정 프로그래밍 패러다임에 얽매이지 않는다.[4] 사용자가 응용 프로그램을 제어하고, 데이터와 문서를 접근 및 수정할 수 있는 메커니즘을 제공하며, 접근성이 뛰어난 최종 사용자 스크립팅 언어로 설계되었다. 애플스크립트는 애플 이벤트를 사용하며, 이는 매킨토시 운영 체제가 응용 프로그램에 정보를 보내는 데 사용하는 표준화된 데이터 형식 집합이다. 이는 웹 서비스에서 XML-RPC를 통해 XPath 쿼리를 보내는 것과 유사하다.[4] 애플 이벤트는 스크립트가 여러 응용 프로그램과 동시에 작동하여 복잡한 작업을 사용자의 개입 없이 수행할 수 있도록 데이터를 전달한다.[3]

사용자 작업을 기록하여 스크립트를 직관적으로 구축할 수 있도록 설계되었으며, 이를 위해 앱은 애플 이벤트와 AppleScript 기록을 지원해야 한다.[13] AppleScript 편집기(스크립트 편집기)에서 기록 버튼을 클릭하면 기록 가능한 앱에 대한 사용자 작업이 해당 AppleScript 명령으로 변환되어 스크립트 편집기 창에 출력된다. 결과 스크립트는 저장 후 다시 실행하여 원래 작업을 복제하거나, 수정하여 더 일반적으로 사용할 수 있다.

응용 프로그램 조작 자동화, 및 명령어 호출, 화면 부품 강제 조작, 웹 콘텐츠 강제 제어, Cocoa 프레임워크 호출, iCloud를 통한 콘텐츠 갱신 등 매크로 언어로서 광범위한 기능을 제공한다. GUI 기반 응용 프로그램 개발도 가능하여 Mac 작업 생산성을 향상시킬 수 있다. 단, 다른 컴퓨터의 응용 프로그램도 조작할 수 있으므로 보안을 고려한 다양한 억제 기능이 운영 체제에 마련되어 있다.

Classic Mac OS에서 macOS로 계승된 유일한 기술이며,[43] 해외를 중심으로 오래전부터 개발자 커뮤니티가 형성되어[44] GUI 기반 응용 프로그램 제어에 대한 지식이 축적되어 있다.

간단한 대화 상자(display dialog, display alert), 알림 센터 알림(display notification), 팝업 메뉴 선택(choose from list), 파일/폴더 선택(choose file, choose folder), 새 파일 저장 위치 선택(choose file name), 프로그레스 바 표시(Mac OS X v10.10 이후, 애플릿 동작 시) 등 특정 목적에 맞는 간단한 사용자 인터페이스를 제공한다.

이 외 사용자 인터페이스를 위해 현재 가장 쉬운 방법은 Mac OS X에 기본 탑재된 "스위치 컨트롤"로 패널을 생성하고, 패널 내 버튼에 "AppleScript" 액션을 할당하는 것이다. Adobe InDesign 등 일부 응용 프로그램은 AppleScript 프로그램에서 동적으로 간단한 사용자 인터페이스를 생성하는 기능을 제공한다.

자유도 높은 자체 인터페이스를 갖추려면 Xcode에서 "AppleScript App" 프로젝트를 생성하고 AppleScript 코드(AppleScriptObjC)를 기술한다. Xcode에서 일반적인 응용 프로그램 개발과 같이 사용자 인터페이스를 생성하고, 컨트롤(GUI 부품) 조작 시 AppleScript 코드 내 해당 이벤트 핸들러가 호출된다.

OS X Mavericks부터 사용 가능한 재사용 애플스크립트 모듈은 애플스크립트 또는 AppleScriptObjC로 작성되며, 특정 위치에 스크립트 파일이나 번들로 저장되어 다른 스크립트에서 호출할 수 있다.[27] 번들로 저장되면 라이브러리는 애플스크립트 사전(sdef) 파일을 포함할 수 있어,[28] 스크립팅 추가 기능처럼 작동하지만 애플스크립트 또는 AppleScriptObjC로 작성된다. Mac OS X v10.9 이후부터는 AppleScript 자체를 라이브러리화하여 재사용할 수 있게 되었으며, 이 라이브러리는 AppleScript 용어 사전을 가질 수 있으므로, AppleScript 명령어를 AppleScript로 작성된 라이브러리를 통해 확장할 수 있다.

3. 1. 프로세스 간 통신 (IAC)

애플스크립트는 주로 응용 프로그램 간 통신(IAC)을 위해 애플이 개발한 애플 이벤트를 사용하는 스크립트 언어이다.[3][4] 애플 이벤트는 반복적인 작업을 자동화하기 위해 다른 응용 프로그램 간에 데이터를 교환하고 제어하도록 설계되었다.

애플스크립트는 OSA(Open Scripting Architecture)를 준수하는 스크립트 언어 중 하나로, 애플리케이션 등의 프로세스에 애플 이벤트를 전송하여 자동 조작을 실현한다. 일반적으로 컴파일바이트코드가 저장되어 실행된다. OS 버전이나 CPU 형식(68000, PowerPC, x86, x64, Apple 실리콘) , 기술된 언어(AppleScript 영어, AppleScript 프랑스어, AppleScript 일본어) 등에 의존하지 않는 코드가 생성된다.

AppleScript 언어 자체의 예약어는 수십 개 정도로 적고[45], 표준으로는 절대값이나 삼각 함수 기능조차 없지만, Scripting Additions/OSAX(Open Scripting Architecture eXtension)[46]라는 기능 확장 문서, 또는 AppleScript 자체로 기술한 AppleScript Libraries로 명령을 늘릴 수 있다(서드 파티 OSAX는 macOS 10.14에서 폐지[47]).

AppleScript는 Mac OS 상 애플리케이션 간 통신을 기초 기술로 사용하므로, 애플리케이션이 Apple event에 대응하면 해당 애플리케이션에 처리를 위임하고, 그 처리 결과를 다른 애플리케이션에 사용할 수 있다. 현재 버전에서는 User Interface Scripting[48], GUI Scripting[49][50], UI Element Scripting[51] 기능을 사용하여, 스크립트에서 애플리케이션에 메뉴 조작이나 키 입력을 전달할 수 있다. 애플리케이션은 시스템을 통해 전송된 Apple event 메시지를 해석하여 대응하는 처리를 수행하고, 처리 결과를 다시 시스템을 거쳐 Apple event 메시지로 반환한다.

바이트코드 인터프리터형으로 순차 실행되므로 네이티브 코드보다 실행 속도는 떨어지지만, 애플리케이션 기능 호출을 하지 않는 경우 스크립트 언어로서 충분한 속도로 실행된다. 애플리케이션 기능 호출은 비용이 높고, GUI Scripting을 사용한 메뉴 등의 강제 조작은 처리 비용이 증가하고 시간이 더 걸린다.

3. 2. 스크립팅 추가 기능 (OSAX)

macOS에는 사용자 상호 작용 대화 상자, 파일 읽기 및 쓰기, 파일 시스템 명령, 날짜 함수, 텍스트 및 수학 연산을 포함하여 애플스크립트의 핵심 기능의 일부가 아닌 명령 및 클래스 집합을 추가하는 "표준 추가 기능"(''StandardAdditions.osax'')이라고 하는 스크립트 추가 기능 모음이 포함되어 있다.[35] 이 OSAX가 없으면 애플스크립트는 애플리케이션에서 직접 제공하지 않는 많은 기본 작업을 수행할 수 없다.

애플스크립트는 OSA를 준수하는 스크립트 언어 중 하나로, 애플 또는 타사에서 개발한 애플스크립트 플러그인이다.[35] 이 플러그인은 내장된 명령 집합을 확장하여 애플스크립트의 기능을 확장하고 애플리케이션에서 제공하는 기능에 대한 의존도를 다소 줄이도록 설계되었다.

표준으로는 절대값을 구하는 기능이나 삼각 함수 기능조차 없지만, Scripting Additions/OSAX(Open Scripting Architecture eXtension)[46]라고 불리는 기능 확장 문서, 또는 애플스크립트 자체로 기술한 AppleScript Libraries에 의해 명령을 늘릴 수 있게 되어 있다 (서드 파티의 OSAX는 macOS 10.14에서 폐지되었다[47]).

3. 3. 자연어 처리 (NLP)

애플 이벤트는 자연어 은유를 기반으로 설계되었으며, 이는 그래픽 사용자 인터페이스가 데스크톱 은유를 기반으로 설계된 것과 유사하다. 잘 작성된 애플스크립트는 누구나 읽고 이해하고 쉽게 편집할 수 있을 정도로 명확해야 한다. 이 언어는 주로 HyperCard의 HyperTalk 언어를 기반으로 하며, 카드와 스택의 HyperCard 세계뿐만 아니라 이론적으로 모든 문서까지 참조하도록 확장되었다. 이를 위해 애플스크립트 팀은 특정 애플리케이션이 "알고 있는" 객체를 지정하는 AppleEvent Object Model (AEOM)을 도입했다.[4]

애플스크립트 언어의 핵심은 결합될 수 있는 명사와 동사 역할을 하는 용어의 사용이다. 예를 들어 페이지, 문서 또는 페이지 범위(예: printPage, printDocument, printRange)를 인쇄하기 위한 다른 동사 대신 애플스크립트는 페이지, 문서 또는 페이지 범위와 같은 객체와 결합될 수 있는 단일 "print" 동사를 사용한다.

```applescript

print page 1

print document 2

print pages 1 thru 5 of document 2

```

일반적으로 AEOM은 "document" 또는 "paragraph"와 같은 여러 객체와 "cut" 및 "close"와 같은 해당 작업을 정의한다. 또한 시스템은 객체의 속성을 참조하는 방법을 정의하므로 "Good Day" 문서의 "세 번째 단락" 또는 "앞쪽 창의 마지막 단어의 색상"을 참조할 수 있다. AEOM은 애플 이벤트를 사람이 읽을 수 있는 용어와 연결하기 위해 애플리케이션 ''사전''을 사용하여 사람이 읽을 수 있는 애플스크립트와 바이트코드 애플 이벤트 간의 변환을 허용한다. 프로그램의 어떤 요소가 스크립팅 가능한지 알려면 지원되는 애플리케이션의 사전을 볼 수 있다. (Xcode 및 스크립트 편집기 응용 프로그램에서 ''파일 → 사전 열기''를 선택하면 된다.)

이러한 메시지의 대상을 지정하기 위해 애플스크립트는 "tell" 구문을 사용한다.

```applescript

tell application "Microsoft Word"

quit

end tell

```

또는 tell은 부정사를 사용하여 한 줄로 표현할 수 있다.

```applescript

tell application "Microsoft Word" to quit

```

"Core Suite"(activate, open, reopen, close, print 및 quit)의 경우 애플리케이션은 타동사 명령에 대한 직접 객체로 제공될 수 있다.

```applescript

quit application "Microsoft Word"

```

객체 계층 구조의 개념은 중첩된 블록을 사용하여 표현할 수 있다.

```applescript

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

```

객체 계층 구조의 개념은 중첩된 전치사구 또는 일련의 소유격을 사용하여 표현할 수도 있다.

```applescript

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

TIFF image "my bitmap"'s 3rd row's 7th pixel

```

이는 다른 프로그래밍 언어에서 다음과 같은 순차적인 메서드 호출로 표현될 수 있다. 의사 코드:

```javascript

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

```

애플스크립트는 "첫 번째 단락"과 같은 서수 계산 구문과 "단락 1"과 같은 기수 계산 구문을 포함한다. 마찬가지로 숫자 자체를 텍스트 또는 숫자로 참조할 수 있다. "five", "fifth" 및 "5"가 모두 지원된다. 애플스크립트에서는 이들은 동의어이다. 또한 스크립트의 가독성을 높이기 위해 스크립트의 아무 곳에나 단어 "the"를 사용할 수 있다. 이는 스크립트의 기능에는 아무런 영향을 미치지 않는다.

3. 4. 다양한 개발 도구

스크립트 편집기는 AppleScript를 작성, 유효성 검사, 컴파일, 실행 및 디버깅할 수 있는 도구를 제공하는 통합 프로그래밍 환경(IDE)이다. 스크립트 가능한 응용 프로그램의 AppleScript 사전을 열람하고, 다양한 형식(컴파일된 스크립트 파일, 응용 프로그램 패키지, 스크립트 번들, 일반 텍스트 파일)으로 스크립트를 저장할 수 있다. 또한, 구문 강조 및 미리 작성된 코드 조각과 같은 기능도 제공한다.[40]

  • '''AppleScript 편집기(스크립트 편집기):''' macOS에 포함된 AppleScript 편집기이다. Mac OS X Snow Leopard(10.6)부터 OS X Mavericks(10.9)까지는 ''AppleScript 편집기''로, 그 이전과 이후 버전에서는 ''스크립트 편집기''로 불렸다. 스크립트는 문서 편집 창에서 작성, 컴파일 및 실행할 수 있다. 디버깅을 위한 정보, 실행 결과 등을 표시하는 다양한 창과 스크립트 사전 및 코드 조각에 접근할 수 있는 메뉴를 제공한다. OS X Yosemite(10.10)부터는 AppleScript와 JavaScript 모두로 작성할 수 있다.[40]

  • '''Xcode:''' AppleScript로 작성된 응용 프로그램을 편집하거나 생성할 수 있는 기능을 갖춘 응용 프로그램 개발 도구 모음이다.

  • '''스크립트 디버거(Script Debugger):''' 레이트 나이트 소프트웨어(Late Night Software)에서 제작한 상용 써드파티 IDE이다. 단일 스텝 실행, 중단점 설정, 함수/서브루틴 단계별 실행, 변수 추적 등 고급 디버깅 기능을 제공한다. 또한, 실제 상황에서 딕셔너리를 확인할 수 있는 고급 딕셔너리 브라우저를 포함한다. 예를 들어, 페이지스에서 문서를 열어 딕셔너리 용어가 해당 문서에 어떻게 적용되는지 확인할 수 있다. 스크립트 디버거는 GUI를 가진 스크립트 제작보다는 코드 작성 및 디버깅에 중점을 둔다.

  • '''스마일(Smile) 및 SmileLab:''' AppleScript로 작성된 써드파티 프리웨어/상용 IDE이다.[14] 스마일은 무료이며 AppleScript 개발용으로 설계되었다. SmileLab은 수치 분석, 그래프 작성, 머신 자동화 및 웹 제작을 위한 추가 기능을 갖춘 상용 소프트웨어이다. AppleScript 창, AppleScript 터미널, 유니코드 창 등 다양한 종류의 창을 사용하며, 복잡한 인터페이스(대화 상자)를 만들 수 있다.

  • '''ASObjC Explorer 4:''' 셰인 스탠리(Shane Stanley)가 제작한 AppleScriptObjC를 위한 단종된 상용 써드파티 IDE이다.[15] 코코아 객체/이벤트 로깅, 디버깅 및 코드 완성이 주요 기능이다. 코코아 이벤트와 객체를 읽을 수 있으며, AppleScript 라이브러리(OS X 매버릭스)용으로 제작되었다. 외부 Xcode 스크립트 편집기로도 사용할 수 있다.

  • '''페이스팬(FaceSpan):''' 레이트 나이트 소프트웨어(Late Night Software)에서 제작한, 그래픽 사용자 인터페이스가 있는 AppleScript 응용 프로그램 개발을 위한 단종된 상용 써드파티 IDE이다.[16]

3. 5. 실행 환경

애플스크립트는 스크립트 편집기에서 실행할 수 있지만, 일반적으로 스크립트 편집기 응용 프로그램을 열지 않고 스크립트를 직접 실행하는 것이 더 편리하다. 이를 위한 몇 가지 옵션이 있다.

  • 애플릿: 애플스크립트는 스크립트 편집기에서 응용 프로그램으로 저장할 수 있다 (입력을 드래그 앤 드롭을 통해 허용하는 경우 ''애플릿'' 또는 ''드롭릿''이라고 한다).[4] 애플릿은 Dock, Finder 윈도우의 툴바, Spotlight, 타사 응용 프로그램 실행기 또는 응용 프로그램을 실행할 수 있는 다른 모든 위치에서 실행할 수 있다.
  • 폴더 액션: 애플스크립트 폴더 액션을 사용하면 폴더에서 특정 변경 사항(예: 파일 추가 또는 제거)이 발생할 때 스크립트를 실행할 수 있다.[17] 폴더를 클릭하고 상황에 맞는 메뉴에서 ''폴더 액션 설정...''을 선택하여 폴더 액션을 할당할 수 있다.
  • 핫키 실행기: 키보드 단축키는 시스템 환경설정의 ''키보드 및 마우스 설정'' 환경설정 패널을 사용하여 스크립트 메뉴에서 애플스크립트에 할당할 수 있다. 또한, Alfred,[19] FastScripts,[20] Keyboard Maestro,[21] QuicKeys,[22] Quicksilver,[23] TextExpander[24]와 같은 다양한 타사 유틸리티를 사용하여 키 조합으로 애플스크립트를 필요에 따라 실행할 수 있다.
  • 스크립트 메뉴: 이 시스템 전체 메뉴는 실행 중인 응용 프로그램에 관계없이 macOS 메뉴 막대에서 애플스크립트에 접근할 수 있도록 한다.[25] Mac OS X 10.6.x부터 시스템 전체 스크립트 메뉴는 스크립트 편집기의 환경 설정에서 활성화할 수 있다.
  • Unix 명령줄 및 launchd: 애플스크립트는 Unix 명령줄에서 실행하거나 `osascript` 명령줄 도구를 사용하여 예약된 작업을 위해 launchd에서 실행할 수 있다.[4][26] `osascript` 도구는 컴파일된 스크립트(.scpt 파일)와 일반 텍스트 파일(.applescript 파일)을 실행할 수 있다.


애플스크립트는 중간 코드로 번역되어 순차적으로 실행되지만, 다양한 저장 및 실행 환경(런타임 환경)을 가지므로, 실행 환경에 따라 동작이 달라 예상대로 작동하지 않는 경우가 있다. 실행 중 로그 표시는 스크립트 편집기에서 열어 실행한 경우와 Xcode에서 생성하여 디버그 빌드를 수행하고 있는 경우에만 가능하다.

다음은 주요 실행 환경에 대한 개요이다.

실행 환경설명특징
스크립트 편집기스크립트 편집기에서 작성 및 실행실행 중지, 로그 확인 가능, 보안 제약 적음
애플릿스크립트 편집기에서 응용 프로그램으로 저장/내보낸 것`on idle` 타이머 인터럽트, 드래그 앤 드롭 수신, 핸들러 실행 후 종료되지 않음, 프로그레스 바 표시 기능(macOS X v10.10부터) 등
AutomatorAutomator 워크플로우의 일부로 사용스크립트 편집기와 유사한 기능(로그 표시, 결과 표시)
Cocoa-AppleScript AppletMac OS X v10.7에서 도입, 스크립트 편집기에서 생성AppleScriptObjC로 작성, 애플릿 형식으로만 실행 가능
XcodeXcode에서 "AppleScript 앱" 프로젝트로 생성Mac App Store 판매 가능, 일반 Cocoa 애플리케이션 개발 지식 필요
스크립트 메뉴macOS 표준 기능, 지정된 폴더 내 AppleScript 실행macOS 버전에 따라 동작 변경, 스크립트 중지 가능 (macOS v10.14부터 독립 앱)
폴더 액션지정 폴더 변경 감지 후 AppleScript 실행macOS v10.11에서 FSEvents를 통해 변경 이벤트 수신하도록 개선
스위치 제어macOS 접근성 기능, 버튼으로 AppleScript 실행운영상 제약 존재
FileMaker ProFileMaker Pro 스크립트 내 "AppleScript 실행" 단계고속 실행 기능
Microsoft Office VBAVBA 스크립트 내 AppleScript 호출Excel 버전에 따라 다른 명령어 사용 (MacScript, AppleScriptTask)
Adobe InDesign"스크립트" 팔레트에서 AppleScript 호출화면 재그리기 억제로 고속 실행 (약 2배), 대량 데이터 처리 시 안정성 고려


3. 6. AppleScript 리소스

OS X Mavericks부터 사용 가능한 재사용 애플스크립트 모듈은 애플스크립트 또는 AppleScriptObjC로 작성되며, 특정 위치에 스크립트 파일이나 번들로 저장되어 다른 스크립트에서 호출할 수 있다.[27] 번들로 저장되면 라이브러리는 애플스크립트 사전(sdef) 파일을 포함할 수 있어,[28] 스크립팅 추가 기능처럼 작동하지만 애플스크립트 또는 AppleScriptObjC로 작성된다.

Mac OS X v10.9 이후부터는 AppleScript 자체를 라이브러리화하여 재사용할 수 있게 되었다. 또한, 이 라이브러리는 AppleScript 용어 사전을 가질 수 있으므로, AppleScript 명령어를 AppleScript로 작성된 라이브러리를 통해 확장할 수 있다.

4. 기본 개념

애플스크립트는 애플이 개발한 스크립트 언어로, 주로 응용 프로그램 간 통신(IAC)에 애플 이벤트를 사용한다.[3][4] 애플 이벤트는 반복적인 작업을 자동화하기 위해 다른 응용 프로그램 간에 데이터를 교환하고 제어하는 데 사용된다.

애플스크립트는 절차적 프로그래밍, 객체 지향 프로그래밍(스크립트 객체 구성 시), 자연어 프로그래밍의 일부 요소를 포함하지만, 이러한 프로그래밍 패러다임에 엄격하게 부합하지는 않는다.[4]

AppleScript는 사용자가 응용 프로그램을 제어하고, 데이터와 문서를 접근 및 수정할 수 있게 한다. 애플 이벤트는 매킨토시 운영 체제가 응용 프로그램에 정보를 보내는 표준화된 데이터 형식 집합으로, 웹 서비스에서 XML-RPC를 통해 XPath 쿼리를 보내는 것과 유사하다.[4] 이를 통해 여러 응용 프로그램이 동시에 작동하여 복잡한 작업을 사용자의 개입 없이 수행할 수 있다.[3]

간단한 웹 갤러리를 만드는 AppleScript의 예시는 다음과 같다.

# 사진 편집 응용 프로그램에서 사진 열기 (''파일 열기'' 애플 이벤트 전송).

# 이미지 조작 (해상도 감소, 테두리 추가 등).

# 변경된 이미지를 다른 폴더에 저장 (''저장'' 및/또는 ''닫기'' 애플 이벤트 전송).

# 새 파일 경로를 텍스트 편집기나 웹 편집기 응용 프로그램으로 전송.

# 편집기 응용 프로그램에 사진 링크를 HTML 파일에 쓰도록 지시.

# 이미지 전체 폴더에 대해 위의 단계 반복.

# FTP 클라이언트에 애플 이벤트를 보내거나, 내장된 AppleScript 명령, 또는 Unix FTP 유틸리티를 통해 HTML 파일과 수정된 사진 폴더를 웹사이트에 업로드.

이러한 작업은 스크립트 실행이라는 단일 작업으로 단축되어, 시간 단축 및 사람의 실수를 방지한다.

응용 프로그램의 스크립트 가능 요소는 응용 프로그램 스크립팅 사전에 표시되며, 스크립트 편집기에서 볼 수 있다. 요소는 ''스위트''로 그룹화되며, ''클래스''와 ''명령'' 두 가지 기본 요소가 있다.


  • ''클래스'': 스크립트 가능한 객체 (예: 텍스트 편집 응용 프로그램의 창, 문서, 텍스트).
  • ''명령'': 스크립트 가능한 객체에 내리는 지시.


모든 스크립트 가능한 응용 프로그램은 표준 스위트(파일 열기, 닫기, 저장, 인쇄, 종료 등)를 공유하며, 많은 응용 프로그램은 자체 기능에 해당하는 다양한 스위트를 포함한다.

AppleScript는 사용자 작업을 기록하여 스크립트를 직관적으로 구축할 수 있다. AppleScript 편집기(스크립트 편집기)에서 기록 버튼을 클릭하면 기록 가능한 앱에 대한 사용자 작업이 AppleScript 명령으로 변환되어 출력된다.

애플스크립트는 간단한 대화 상자, 알림, 팝업 메뉴, 파일 및 폴더 선택 등 간단한 사용자 인터페이스를 제공한다. 더 복잡한 인터페이스는 스위치 컨트롤, Adobe InDesign 스크립팅, 또는 Xcode를 통해 만들 수 있다.

4. 1. 클래스 (데이터 유형)

애플스크립트는 응용 프로그램으로 애플 이벤트를 보내고 받는 것 외에도 자체적인 처리 능력을 가지고 있다. 애플스크립트는 기본적인 계산 및 텍스트 처리를 수행할 수 있으며, 언어에 새로운 기능을 추가하는 스크립팅 추가 기능을 사용할 수 있도록 확장 가능하다. 그러나 애플스크립트는 주로 복잡한 작업을 처리하기 위해 응용 프로그램과 프로세스의 기능에 의존한다.[3]

응용 프로그램이 특수 클래스(또는 데이터 유형)를 정의할 수 있지만, 애플스크립트에도 여러 가지 내장 클래스가 있다. 이러한 기본 데이터 클래스는 언어에서 직접 지원되며, 스크립트 가능한 응용 프로그램에서 일반적으로 인식되는 경향이 있다. 가장 일반적인 클래스는 다음과 같다.

  • 기본 객체
  • '''application''': 응용 프로그램 객체로, 주로 tell 문에 대한 지정자로 사용된다. ( `tell application "Finder" …` ).
  • '''script''': 스크립트 객체이다. 스크립트 객체는 스크립트의 컨테이너이다. 모든 애플스크립트는 실행될 때 스크립트 객체를 생성하며, 스크립트 객체는 애플스크립트 내에서 생성될 수 있다.
  • '''class''': 다른 객체의 유형을 지정하는 메타 객체이다.
  • '''reference''': 유효한 객체를 가리킬 수도 있고, 그렇지 않을 수도 있는 평가되지 않은 객체 지정자를 캡슐화하는 객체이다. `contents` 속성에 접근하여 필요에 따라 평가할 수 있다.
  • 표준 데이터 객체
  • '''constant''': 상수 값이다. `pi`, `tab`, `linefeed`와 같이 언어에서 정의된 여러 상수가 있다.
  • '''boolean''': 불린 참/거짓 값이다. 실제로 `constant`의 서브클래스이다.
  • '''number''': `integer`와 `real`의 드물게 사용되는 추상 슈퍼클래스이다.
  • '''integer''': 정수이다. 내장된 수학 연산자를 사용하여 조작할 수 있다.
  • '''real''': 부동 소수점 (실수) 숫자이다. 내장된 수학 연산자를 사용하여 조작할 수 있다.
  • '''date''': 날짜와 시간이다.
  • '''text''': 텍스트이다. 애플스크립트 2.0 이전 버전(Mac OS X 10.4 이하)에서 `text` 클래스는 `string` 및 `Unicode text`와 구별되었으며, 세 가지는 다소 다르게 동작했다. 2.0(10.5) 이상에서는 모두 동의어이며 모든 텍스트는 UTF-16 (“유니코드”)으로 인코딩되어 처리된다.[36]
  • 컨테이너
  • '''list''': 객체의 정렬된 목록이다. 다른 목록과 응용 프로그램에서 정의된 클래스를 포함하여 모든 클래스를 포함할 수 있다.
  • '''record''': 객체의 키가 지정된 목록이다. 목록과 유사하지만 키-값 쌍으로 구조화된다. 런타임 키 접근은 지원되지 않으며, 모든 키는 컴파일 타임 상수 식별자여야 한다.
  • 파일 시스템
  • '''alias''': 파일 시스템 객체(파일 또는 폴더)에 대한 참조이다. 객체가 이동하거나 이름이 변경된 경우에도 별칭은 객체에 대한 링크를 유지한다.
  • '''file''': 파일 시스템 객체(파일 또는 폴더)에 대한 참조이다. 이는 정적 참조이며, 현재 존재하지 않는 객체를 가리킬 수 있다.
  • '''POSIX file''': 유닉스(POSIX) 스타일 슬래시(/) 표기법을 사용하여 일반 텍스트로 파일 시스템 객체(파일 또는 폴더)에 대한 참조이다. 애플스크립트가 POSIX 파일을 사용할 때마다 일반 파일로 자동 변환하므로, 진정한 데이터 유형은 아니다.[37]
  • 기타
  • '''RGB color''': 색상과 함께 작동하는 명령 및 객체에서 사용하기 위해 RGB 삼중항(16비트 하이 컬러 형식)을 지정한다.
  • '''unit types''': 표준 단위를 변환하는 클래스이다. 예를 들어, 값을 `square yards`로 정의한 다음 단위 유형 간에 캐스팅하여( `as` 연산자 사용) `square feet`로 변환할 수 있다.

4. 2. 언어 구조

AppleScript는 사용자가 응용 프로그램을 제어하고, 데이터와 문서를 접근하고 수정할 수 있는 메커니즘을 제공하는 스크립팅 언어로, 애플 이벤트를 사용한다. 애플 이벤트는 매킨토시 운영 체제가 응용 프로그램에 정보를 보내는 데 사용하는 표준화된 데이터 형식 집합으로, 웹 서비스 세계에서 XML-RPC를 통해 XPath 쿼리를 보내는 것과 유사하다.[4] 이를 통해 여러 응용 프로그램이 동시에 작동하여 복잡한 작업을 사용자의 개입 없이 수행할 수 있다.[3]

예를 들어, 웹 갤러리를 만드는 AppleScript는 다음과 같은 작업을 수행할 수 있다.

# 사진 편집 응용 프로그램에서 사진 열기 (''파일 열기'' 애플 이벤트 전송).

# 이미지 조작 (해상도 감소, 테두리 추가 등).

# 변경된 이미지를 다른 폴더에 저장 (''저장'' 및/또는 ''닫기'' 애플 이벤트 전송).

# 새 파일 경로를 텍스트 편집기나 웹 편집기 응용 프로그램으로 전송.

# 편집기 응용 프로그램에 사진 링크를 HTML 파일에 쓰도록 지시.

# 이미지 전체 폴더에 대해 위의 단계 반복.

# 그래픽 FTP 클라이언트에 애플 이벤트를 보내거나, 내장된 AppleScript 명령을 사용하거나, Unix FTP 유틸리티에 애플 이벤트를 보내는 방식으로 HTML 파일과 수정된 사진 폴더를 웹사이트에 업로드.

이러한 작업은 스크립트를 통해 단일 작업으로 줄어들고, 훨씬 짧은 시간에 완료되며, 사람의 실수가 발생할 가능성이 없다.

응용 프로그램의 스크립트 가능 요소는 응용 프로그램의 스크립팅 사전에 표시되며, 스크립트 편집기에서 볼 수 있다. 요소는 ''스위트''로 그룹화되며, ''클래스''와 ''명령'' 두 가지 기본 요소가 있다.

  • ''클래스'': 스크립트 가능한 객체 (예: 텍스트 편집 응용 프로그램의 창, 문서, 텍스트).
  • ''명령'': 스크립트 가능한 객체에 제공할 수 있는 지침.


모든 스크립트 가능한 응용 프로그램은 표준 스위트(파일 열기, 닫기, 저장, 인쇄, 종료 등)를 공유한다. 많은 응용 프로그램은 응용 프로그램 자체가 수행할 수 있는 모든 작업을 수행할 수 있는 수많은 스위트를 가지고 있다.

AppleScript는 사용자 작업을 기록하여 스크립트를 직관적으로 구축할 수 있도록 설계되었다. AppleScript 편집기(스크립트 편집기)에서 기록 버튼을 클릭하면 기록 가능한 앱에 대한 사용자 작업이 AppleScript 명령으로 변환되어 출력된다.

애플 이벤트가 애플리케이션으로 메시지를 보내는 방식인 반면, 애플스크립트는 애플 이벤트를 보내도록 설계된 특정 언어이다. 자연어 은유를 기반으로 설계되었으며, 잘 작성된 애플스크립트는 누구나 읽고 이해하고 쉽게 편집할 수 있을 정도로 명확해야 한다.

애플스크립트 언어의 핵심은 결합될 수 있는 명사와 동사 역할을 하는 용어의 사용이다. 예를 들어, "print" 동사는 페이지, 문서, 페이지 범위와 같은 객체와 결합될 수 있다.

```applescript

print page 1

print document 2

print pages 1 thru 5 of document 2

```

AppleEvent Object Model (AEOM)은 "document" 또는 "paragraph"와 같은 여러 객체와 "cut" 및 "close"와 같은 해당 작업을 정의한다. 또한 "Good Day" 문서의 "세 번째 단락" 또는 "앞쪽 창의 마지막 단어의 색상"과 같이 객체의 속성을 참조하는 방법을 정의한다. AEOM은 애플 이벤트를 사람이 읽을 수 있는 용어와 연결하기 위해 애플리케이션 ''사전''을 사용한다.

"tell" 구문을 사용하여 메시지의 대상을 지정할 수 있다.

```applescript

tell application "Microsoft Word"

quit

end tell

```

또는 tell은 부정사를 사용하여 한 줄로 표현할 수 있다.

```applescript

tell application "Microsoft Word" to quit

```

"Core Suite"의 경우 애플리케이션은 타동사 명령에 대한 직접 객체로 제공될 수 있다.

```applescript

quit application "Microsoft Word"

```

객체 계층 구조는 중첩된 블록이나 전치사구를 사용하여 표현할 수 있다.

```applescript

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

```

```applescript

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

TIFF image "my bitmap"'s 3rd row's 7th pixel

```

이는 다른 프로그래밍 언어에서 다음과 같은 메서드 호출로 표현될 수 있다. 의사 코드:

```javascript

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

```

애플스크립트는 "첫 번째 단락"과 같은 서수 계산 구문과 "단락 1"과 같은 기수 계산 구문을 포함한다. 또한 "five", "fifth", "5"와 같이 숫자를 텍스트 또는 숫자로 참조할 수 있으며, 단어 "the"는 스크립트의 가독성을 높이기 위해 사용할 수 있다.

AppleScript는 ''command'' 명령으로 시작하여 ''end command'' 구문으로 끝나는 코드 블록으로 많은 프로세스를 관리한다. 주요 구조는 다음과 같다.

AppleScript는 두 종류의 조건문을 제공한다.

```applescript

  • - 단순 조건문

if x < 1000 then set x to x + 1

  • - 복합 조건문

if x is greater than 3 then

  • - 명령문

else

  • - 다른 명령문

end if

```

AppleScript의 repeat 루프는 여러 가지 형태로 제공된다.

  • 영원히 반복:

```applescript

repeat

  • - 반복할 명령

end repeat

```

  • 주어진 횟수만큼 반복:

```applescript

repeat 10 times

  • - 반복할 명령

end repeat

```

  • 조건부 루프 ('''repeat while''' 또는 '''repeat until'''):

```applescript

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

```

  • 변수를 사용한 루프:

```applescript

  • - 블록을 2000번 반복하고, i는 1부터 2000까지의 모든 값을 얻습니다.

repeat with i from 1 to 2000

  • - 반복할 명령

end repeat

  • - 블록을 4번 반복하고, i는 값 100, 75, 50, 25를 얻습니다.

repeat with i from 100 to 25 by -25

  • - 반복할 명령

end repeat

```

  • 목록 열거:

```applescript

set total to 0

repeat with loopVariable in {1, 2, 3, 4, 5}

set total to total + loopVariable

end repeat

```

대상 응용 프로그램오류 처리



''핸들러''(함수와 유사한 서브루틴)는 블록을 사용하여 정의한다.

함수 핸들러폴더 작업 블록실행 핸들러



핸들러는 "on" 대신 "to"를 사용하여 정의할 수도 있으며, 레이블이 지정된 매개변수를 허용하도록 작성할 수도 있다.

레이블이 지정된 매개변수가 있는 핸들러"to" 및 레이블이 지정된 매개변수를 사용하는 핸들러
on rock around the clock



AppleScript에는 run, open, idle, quit의 네 가지 사전 정의된 핸들러 유형이 있다.


  • Run 핸들러: 스크립트가 실행될 때 호출되는 주요 코드를 정의.
  • Open 핸들러: "on open theItems"를 사용하여 정의.

```applescript

on open theItems

repeat with thisItem in theItems

tell application "Finder" to update thisItem

end repeat

end open

```

"open 핸들러"를 포함하는 스크립트가 applet으로 저장되면 드롭릿이 된다.

  • Idle 핸들러: 응용 프로그램이 유휴 상태일 때 주기적으로 실행.

```applescript

on idle

  • - 스크립트 실행이 완료될 때 실행할 코드

return 60 -- idle 핸들러를 다시 실행하기 전에 일시 중지할 초 수

end idle

```

idle 핸들러는 stay-open applet에서 사용할 수 있으며, 유휴 시간은 기본적으로 30초이며,[38] 'return x' 문으로 변경할 수 있다. 여기서 x는 시스템이 핸들러를 다시 실행하기 전에 대기해야 하는 초 수이다.

  • Quit 핸들러: applet이 Quit 요청을 수신할 때 실행.

```applescript

on quit

  • - 스크립트 종료 전에 실행할 명령

continue quit -- 스크립트가 실제로 종료되도록 하는 데 필요합니다.

end quit

```

  • 스크립트 개체:

```applescript

script scriptName

  • - 스크립트 관련 명령 및 핸들러

end script

```

스크립트 개체는 'tell' 구조를 사용할 수 있으며, 파일에서 로드하고 파일에 저장할 수 있다.

  • 변수는 엄격하게 형식이 지정되지 않으며 선언할 필요가 없다.

```applescript

set variable1 to 1 -- variable1이라는 정수 변수 생성

set variable2 to "Hello" -- variable2라는 텍스트 변수 생성

copy {17, "doubleday"} to variable3 -- variable3이라는 목록 변수 생성

set {variable4, variable5} to variable3 -- variable3의 목록 항목을 별도의 변수 variable4와 variable5로 복사

set variable6 to script myScript -- 변수를 스크립트 인스턴스로 설정

```

  • 스크립트 객체는 메서드와 데이터를 캡슐화하고 상위 스크립트에서 데이터와 동작을 상속할 수 있다.
  • 서브루틴은 응용 프로그램 tell 블록에서 직접 호출할 수 없다. 'my' 또는 'of me' 키워드를 사용.

```applescript

tell application "Finder"

set x to my myHandler()

  • - or

set x to myHandler() of me

end tell

on myHandler()

  • -commands

end myHandler

```

스크립트 추가 명령에 동일한 기술을 사용하면 오류를 줄이고 성능을 향상시킬 수 있다.

```applescript

tell application "Finder"

set anyNumber to my (random number from 5 to 50)

end tell

4. 3. 기타 정보

애플스크립트는 주로 응용 프로그램 간 통신(IAC)을 위해 애플이 개발한 애플 이벤트를 사용하는 스크립트 언어이다.[3][4] 애플스크립트는 애플 이벤트와 관련이 있지만 다르다. 애플 이벤트는 반복적인 작업을 자동화하기 위해 다른 응용 프로그램 간에 데이터를 교환하고 제어하도록 설계되었다.

애플스크립트는 응용 프로그램으로 애플 이벤트를 보내고 받는 것 외에도 자체적인 처리 능력을 가지고 있다. 애플스크립트는 기본적인 계산 및 텍스트 처리를 수행할 수 있으며, 언어에 새로운 기능을 추가하는 스크립팅 추가 기능을 사용할 수 있도록 확장 가능하다. 그러나 애플스크립트는 주로 복잡한 작업을 처리하기 위해 응용 프로그램과 프로세스의 기능에 의존한다. 구조화된 명령 언어인 애플스크립트는 유닉스 셸, 마이크로소프트 윈도우 스크립트 호스트, IBM REXX와 비교할 수 있지만, 이 세 가지와는 다르다. 애플스크립트 기능의 핵심은 매킨토시 응용 프로그램이 주소 지정 가능한 객체와 연산의 "사전"을 게시한다는 사실이다.

애플스크립트는 절차적 프로그래밍, 객체 지향 프로그래밍 (특히 스크립트 객체 구성 시) 및 구문에서 자연어 프로그래밍 경향의 일부 요소를 가지고 있지만, 이러한 프로그래밍 패러다임 중 어느 것에도 엄격하게 부합하지 않는다.[4]

  • 변수는 엄격하게 형식이 지정되지 않으며 선언할 필요가 없다. 변수는 스크립트 및 함수를 포함하여 모든 데이터 형식을 가질 수 있다. 다음은 변수 생성의 예이다.

```applescript

set variable1 to 1 -- variable1이라는 정수 변수 생성

set variable2 to "Hello" -- variable2라는 텍스트 변수 생성

copy {17, "doubleday"} to variable3 -- variable3이라는 목록 변수 생성

set {variable4, variable5} to variable3 -- variable3의 목록 항목을 별도의 변수 variable4와 variable5로 복사

set variable6 to script myScript -- 변수를 스크립트 인스턴스로 설정

```

  • 스크립트 객체는 완전한 객체이다. 즉, 메서드와 데이터를 캡슐화하고 상위 스크립트에서 데이터와 동작을 상속할 수 있다.
  • 서브루틴은 응용 프로그램 tell 블록에서 직접 호출할 수 없다. 'my' 또는 'of me' 키워드를 사용하여 호출한다.

```applescript

tell application "Finder"

set x to my myHandler()

  • - or

set x to myHandler() of me

end tell

on myHandler()

  • -commands

end myHandler

```

스크립트 추가 명령에 동일한 기술을 사용하면 오류를 줄이고 성능을 향상시킬 수 있다.

```applescript

tell application "Finder"

set anyNumber to my (random number from 5 to 50)

end tell

```

AppleScript는 간단한 대화 상자(display dialog, display alert), 알림 센터에 알림(display notification), 팝업 메뉴에서 항목 선택 대화 상자(choose from list), 파일 선택(choose file), 폴더 선택(choose folder), 새 파일 저장 위치 선택(choose file name), 프로그레스 바 표시(Mac OS X v10.10 이후, 애플릿 동작 시에만) 등 목적에 특화된 간단한 사용자 인터페이스를 제공한다.

이 외의 사용자 인터페이스를 이용하기 위해 현재 사용 가능한 가장 쉬운 방법은 Mac OS X에 기본으로 탑재된 "스위치 컨트롤"로 패널을 생성하고, 패널 내 버튼에 액션 "AppleScript"를 할당하는 것이다.

Adobe InDesign 등 일부 응용 프로그램에서는 간단한 사용자 인터페이스를 AppleScript 프로그램에서 동적으로 생성하는 기능을 갖추고 있다.

본격적이고 자유도가 높은 자체 인터페이스를 갖추려면, Xcode에서 "AppleScript App" 프로젝트를 생성하고 그 안에 AppleScript 코드(AppleScriptObjC)를 기술한다. Xcode에서 일반적인 응용 프로그램 개발과 마찬가지로 사용자 인터페이스를 생성할 수 있다. 컨트롤(GUI 부품)이 조작되면 AppleScript 코드 내의 해당 이벤트 핸들러가 호출된다.

5. 오픈 스크립팅 아키텍처 (OSA)

애플스크립트 구현의 중요한 부분은 '''오픈 스크립팅 아키텍처'''('''OSA''', Open Scripting Architecture)이다.[39] OSA는 애플이 UserLand Frontier와 같은 타사 스크립팅/자동화 제품 및 다른 스크립팅 언어가 애플스크립트와 동등하게 작동할 수 있도록 제공한다.

Mac OS X 10.6.3부터는 다음과 같은 스크립트 가능 응용 프로그램이 포함되어 있다.


  • VoiceOver (스크립트 가능한 시각 장애인용 화면 판독기 및 점자 변환기 패키지)
  • System Events (스크립트 불가능한 응용 프로그램 제어 및 특정 시스템 기능, 기본 파일 작업 접근)
  • Printer Setup Utility (인쇄 작업 처리를 위한 스크립트 가능 유틸리티)
  • Image Events (핵심 이미지 조작)
  • HelpViewer (도움말 표시를 위한 스크립트 가능 유틸리티)
  • Database Events (최소한의 SQLite3 데이터베이스 인터페이스)
  • AppleScript Utility (일부 애플스크립트 관련 환경 설정을 스크립팅하기 위한 유틸리티)

5. 1. OSA 구성 요소

애플스크립트 구현의 중요한 측면은 '''오픈 스크립팅 아키텍처'''('''OSA''')이다.[39] 애플은 다른 스크립팅 언어와 QuicKeys 및 UserLand Frontier와 같은 타사 스크립팅/자동화 제품이 애플스크립트와 동등한 상태로 작동할 수 있도록 OSA를 제공한다. 애플스크립트는 스크립팅 구성 요소로 구현되었으며, 이러한 구성 요소를 OSA에 연결하기 위한 기본 사양은 공개되어 다른 개발자가 자체 스크립팅 구성 요소를 시스템에 추가할 수 있도록 했다. 스크립트를 로드, 저장 및 컴파일하기 위한 공개 클라이언트 API는 이러한 모든 구성 요소에 대해 동일하게 작동하며, 이는 앱릿과 드롭릿이 이러한 스크립팅 언어 중 하나로 스크립트를 보관할 수 있음을 의미하기도 한다.

OSA의 한 가지 기능은 스크립팅 추가 기능인데, ''Open Scripting Architecture eXtension''의 약자인 OSAX[35]이며, HyperCard의 외부 명령에서 영감을 받았다. 스크립팅 추가 기능은 프로그래머가 애플스크립트의 기능을 확장할 수 있도록 하는 라이브러리이다. 스크립팅 추가 기능으로 포함된 명령은 시스템 전체에서 사용할 수 있으며 응용 프로그램에 종속되지 않는다( 스크립팅 추가 기능 참조). 애플스크립트 편집기는 또한 일부 OSA 언어를 직접 편집하고 실행할 수 있다.

5. 2. JavaScript for Automation (JXA)

OS X 요세미티 및 이후 버전의 macOS에서 '''JavaScript for Automation''' ('''JXA''') 구성 요소는 애플스크립트의 유일한 대안인 OSA 언어로 남아있다.[40] 비록 Perl, 파이썬, 루비, Tcl의 맥킨토시 버전 모두 OSA 구성 요소 없이 Apple 이벤트를 처리하는 기본 수단을 지원한다.[29]

JXA는 Objective-C (및 C 언어) 외부 언어 인터페이스도 제공한다.[40] WebKit의 JavaScriptCore 엔진을 기반으로 하는 환경으로서, JavaScript 기능 세트는 시스템 Safari 브라우저 엔진과 동기화된다. JXA는 JavaScript 모듈 시스템을 제공하며, CommonJS 모듈을 browserify를 통해 사용하는 것도 가능하다.[41]

6. 문법

applescript


  • - 주석은 여러 가지 방법으로 만들 수 있다. 한 줄 주석은 두 개의 하이픈(--)으로 시작하거나, Mac OS X Leopard에서 처음 출시된 AppleScript 2.0부터는 숫자 기호(#)로 시작할 수 있다.
  • - 예시:
  • - -- 이것은 한 줄 주석입니다.
  • - # 이것도 마찬가지입니다! (Mac OS X Leopard 이상에서)

(*

여러 줄 주석은 별표와 괄호를 사용한다.

예시:

(* 이것은

여러 줄

주석입니다 *)

  • )

  • - HyperCard용 스크립트 언어인 HyperTalk와 유사하게 영어와 비슷한 구문을 채택하여 기본적으로 습득하기 쉽다.
  • - 다른 애플리케이션을 조작하려면 각 애플리케이션마다 다른 명령이나 객체 구조를 알아야 하며, 스크립트 편집기에 AppleScript 지원 애플리케이션의 아이콘을 드래그하여 표시되는 "AppleScript 용어 사전"을 참조해야 한다.

  • - 초기에는 일본어 표현 형식을 포함한 영어 이외의 언어로도 기술할 수 있었지만, Mac OS 8.5 이후에는 영어 표현 형식만 채택되었다. 영어 표현 형식에서도 변수 이름은 |로 묶어 일본어 등을 사용할 수 있다.

  • - Mac OS X v10.10부터 AppleScriptObjC를 Xcode뿐만 아니라 스크립트 편집기에서도 사용할 수 있게 되어 Objective-C 스타일의 표기도 표준으로 채택되었다.

  • - 애플스크립트의 많은 프로세스는 코드 블록으로 관리되며, 블록은 ''command'' 명령으로 시작하여 ''end command'' 구문으로 끝난다.

  • - '''스크립트 예''' (변수 "소지품=myItem"의 내용이 0이면 다이얼로그를 표시한다)

  • - '''영어'''
  • - if myItem = 0 then
  • - display dialog "소지품이 없습니다" buttons {"OK"} default button "OK"
  • - end if

  • - 위와 같이 기술하는 것이 일반적이지만, 더 영문에 가까운 코드로 기술할 수도 있다.
  • - 아래 코드는 비교 연산자의 "같음"을 나타내는 =가 is로 대체되었다 (is는 is equal to라고 쓸 수도 있다. 이처럼 동의어가 많은 것도 AppleScript의 특징 중 하나이다).
  • - if myItem is 0 then display dialog "소지품이 없습니다" buttons {"OK"} default button "OK"

  • - '''변수명에 일본어를 사용한 예'''
  • - if |소지품| is 0 then display dialog "소지품이 없습니다" buttons {"OK"} default button "OK"

  • - '''일본어''' (현재는 사용할 수 없음)
  • - もし「持ち物」が0ならば
  • - “持ち物がありません”をボタンリスト:{“OK”}、デフォルトボタン:“OK”で表示する
  • - 以上

6. 1. 예제

applescript

display dialog "Hello World!" -- "승인"과 "취소" 버튼이 있는 창을 띄움

  • - 또는

display alert "Hello World!" -- "승인" 버튼 하나만 있는 창을 띄움

  • - 또는

say "Hello World!" -- 음성 합성을 이용한 목소리를 냄

```

주석은 여러 가지 방법으로 만들 수 있다. 한 줄 주석은 두 개의 하이픈(--)으로 시작할 수 있다. Mac OS X Leopard에서 처음 출시된 AppleScript 2.0에서는 숫자 기호(#)로 시작할 수도 있다. 이렇게 하면 자체 포함된 AppleScript 스크립트를 shebang line `#!/usr/bin/osascript`로 시작하는 실행 가능한 텍스트 파일로 저장할 수 있다.

예시:

```applescript

  • - 이것은 한 줄 주석입니다.

# 이것도 마찬가지입니다! (Mac OS X Leopard 이상에서)

```

여러 줄을 차지하는 주석의 경우, AppleScript는 별표가 있는 괄호를 사용한다.

예시:

```applescript

(* 이것은

여러 줄

주석입니다 *)

```

애플스크립트에서 전통적인 Hello, world! 프로그램은 다음과 같은 다양한 형태로 작성될 수 있다.

```applescript

display dialog "Hello, world!" -- "OK"와 "취소" 버튼이 있는 모달 창

  • - 또는

display alert "Hello, world!" -- "OK" 버튼 하나와 경고를 표시하는 앱의 아이콘이 있는 모달 창

  • - 또는

say "Hello, world!" -- 합성된 컴퓨터 음성을 사용하여 음성 메시지 출력

```

애플스크립트는 대화 상자, 경고, 선택 목록을 포함한 여러 사용자 인터페이스 옵션을 가지고 있다. (스크립트 편집기에서 option+return을 입력하여 생성된 문자는 여러 줄에 걸쳐 단일 문장의 연속을 나타낸다.)

```applescript

  • - 대화 상자

set dialogReply to display dialog "대화 상자 텍스트" default answer "텍스트 답변" hidden answer false buttons {"건너뛰기", "확인", "취소"} default button "확인" cancel button "건너뛰기" with title "대화 상자 창 제목" with icon note giving up after 15

```

```applescript

  • - 목록에서 선택

set chosenListItem to choose from list {"A", "B", "3"} with title "목록 제목" with prompt "프롬프트 텍스트" default items "B" OK button name "좋아요!" cancel button name "아니오, 다시 시도" multiple selections allowed false with empty selection allowed

```

```applescript

  • - 경고

set resultAlertReply to display alert "경고 텍스트" as warning buttons {"건너뛰기", "확인", "취소"} default button 2 cancel button 1 giving up after 2

```

각 사용자 상호 작용 방법은 클릭된 버튼 값, 선택된 항목 또는 추가 처리를 위해 입력된 텍스트를 반환할 수 있다. 예를 들어:

```applescript

display alert "Hello, world!" buttons {"무례하게 거절", "기꺼이 수락"}

set theAnswer to button returned of the result

if theAnswer is "기꺼이 수락" then

beep 5

else

say "흥!"

end if

```

애플스크립트는 OSA(Open Scripting Architecture)를 준수하는 스크립트 언어 중 하나로, 애플리케이션 등의 프로세스에 애플 이벤트(Apple event)를 전송하여 자동 조작을 실현한다.

애플스크립트 언어의 핵심은 결합될 수 있는 명사와 동사 역할을 하는 용어의 사용이다. 예를 들어 페이지, 문서 또는 페이지 범위(예: printPage, printDocument, printRange)를 인쇄하기 위한 다른 동사 대신 애플스크립트는 페이지, 문서 또는 페이지 범위와 같은 객체와 결합될 수 있는 단일 "print" 동사를 사용한다.

```applescript

print page 1

print document 2

print pages 1 thru 5 of document 2

```

이러한 메시지의 대상을 지정하기 위해 애플스크립트는 "tell" 구문을 사용한다.

```applescript

tell application "Microsoft Word"

quit

end tell

```

또는 tell은 부정사를 사용하여 한 줄로 표현할 수 있다.

```applescript

tell application "Microsoft Word" to quit

```

"Core Suite"(activate, open, reopen, close, print 및 quit)의 경우 애플리케이션은 타동사 명령에 대한 직접 객체로 제공될 수 있다.

```applescript

quit application "Microsoft Word"

```

객체 계층 구조의 개념은 중첩된 블록을 사용하여 표현할 수 있다.

```applescript

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

```

객체 계층 구조의 개념은 중첩된 전치사구 또는 일련의 소유격을 사용하여 표현할 수도 있다.

```applescript

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

TIFF image "my bitmap"'s 3rd row's 7th pixel

```

이는 다른 프로그래밍 언어에서 다음과 같은 순차적인 메서드 호출로 표현될 수 있다. 의사 코드:

```javascript

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

```

애플스크립트는 "첫 번째 단락"과 같은 서수 계산 구문과 "단락 1"과 같은 기수 계산 구문을 포함한다. 마찬가지로 숫자 자체를 텍스트 또는 숫자로 참조할 수 있다. "five", "fifth" 및 "5"가 모두 지원된다. 애플스크립트에서는 동의어이다. 또한 스크립트의 가독성을 높이기 위해 스크립트의 아무 곳에나 단어 "the"를 사용할 수 있다. 스크립트의 기능에는 아무런 영향을 미치지 않는다.

안전장치 계산기:

```applescript

tell application "Finder"

  • - 변수 설정

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

  • - 더하기?

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

  • - 빼기?

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

  • - 곱하기?

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

  • - 나누기?

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

```

간단한 사용자 이름과 비밀번호 대화 상자 시퀀스. 여기에서 사용자 이름은 John이고 비밀번호는 app123이다.

```applescript

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

```

'''스크립트 예''' (변수 "소지품=myItem"의 내용이 0이면 다이얼로그를 표시한다)

'''영어'''

```applescript

if myItem = 0 then

display dialog "소지품이 없습니다" buttons {"OK"} default button "OK"

end if

```

일반적으로 위와 같이 기술하지만, 보다 영문에 가까운 다음과 같은 코드도 기술할 수 있다. 단, 여러 처리를 한 줄의 if문에 포함시킬 수는 없으므로 앞서의 구문을 사용하게 된다. 아래 코드는 비교 연산자의 "등가"를 나타내는 =가 is로 대체되었다 (is는 is equal to라고 쓸 수도 있다. 이와 같은 동의어가 많이 존재하는 것도 AppleScript의 특징 중 하나이다).

```applescript

if myItem is 0 then display dialog "소지품이 없습니다" buttons {"OK"} default button "OK"

```

'''변수명에 일본어를 사용한 예'''

```applescript

if |소지품| is 0 then display dialog "소지품이 없습니다" buttons {"OK"} default button "OK"

```

'''일본어''' (현재는 사용할 수 없음)

```applescript

もし「持ち物」が0ならば

“持ち物がありません”をボタンリスト:{“OK”}、デフォルトボタン:“OK”で表示する

以上

6. 2. 연산 우선순위

애플스크립트는 바이트코드 인터프리터형으로 순차 실행되기 때문에 네이티브 코드에 비해 실행 속도는 떨어진다. 하지만, 애플리케이션의 기능 호출을 하지 않는 경우에는 스크립트 언어로서 충분한 속도로 실행된다.

6. 3. 무의미 구문

AppleScript에서는 프로그램 내에서 아무런 동작을 하지 않는 "무의미 구문"을 넣을 수 있다. 대표적인 예로 "the"가 있으며, 실행 시 무시된다.

```applescript

set end of aList to 1

```

위와 같이 배열 변수 끝에 숫자를 추가하는 구문을 작성할 때,

```applescript

set the end of aList to 1

```

처럼 "the"를 추가하여 영어 문장처럼 보이게 만들 수 있다.

무의미 구문은 프로그램적 동작을 전혀 수행하지 않지만, 그 자체로 존재하며 서로 다른 것으로 인식된다. 이를 활용하여 서브루틴(핸들러)을 선언할 수도 있다.

AppleScript가 정의하는 무의미 구문은 다음과 같다.

```applescript

about, above, against, apart from, around, aside from, at, below, beneath, beside, between, by, for, from, instead of, into, on, onto, out of, over, since, thru (through도 가능), under

```

이러한 무의미 구문은 서브루틴의 매개변수를 지정하는 수식어로 사용될 수 있다.

```applescript

set a to aSub for 10 at 20

  • -> 30


on aSub for aInt at bInt

return (aInt + bInt)

end aSub

7. 응용 프로그램 조작 대상

애플스크립트를 사용하면 응용 프로그램 조작을 자동화하거나, 여러 응용 프로그램을 함께 조작하여 소프트웨어 로봇을 구축할 수 있다. 하지만 조작 대상에 따라 사용되는 기술과 방법은 다르다.

7. 1. 로컬 응용 프로그램

사파리, 연락처, 캘린더 등 macOS에 기본적으로 포함된 많은 응용 프로그램이 AppleScript를 통한 제어를 지원하며, 주요 기능에 접근할 수 있다.[43] 하지만, 지원하는 응용 프로그램이라도 모든 기능이 AppleScript로 공개되어 있는 것은 아니다. AppleScript 용어 사전에 정의된 범위 내에서만 가능하다.[44]

그렇기 때문에, 앞서 언급한 GUI Scripting을 통한 메뉴나 버튼 등의 강제 조작이 때때로 필요하게 된다. 이 강제 조작 기능은 OS의 기본 설정에서는 꺼져 있으며, 응용 프로그램/애플릿/스크립트별로 허용/금지하도록 설정되어 있다.

7. 2. UNIX 명령어

`do shell script` 명령을 사용하면 BSD(UNIX) 계층의 명령을 호출할 수 있다.[55] 단, Terminal.app과 `do shell script` 명령은 설정된 환경 변수가 다르기 때문에 Terminal.app에서 실행되던 처리가 작동하지 않을 수 있다. 특히 지정된 명령에 경로가 설정되어 있지 않거나 현재 디렉토리가 다른 경우 등이 오류의 원인이 된다. 이는 환경 변수의 내용을 명시적으로 지정하거나, 사용 명령을 전체 경로로 표기함으로써 해결할 수 있다(환경 변수 내용은 `env` 명령을 실행하여 확인할 수 있다).

7. 3. 원격 응용 프로그램

macOS에 기본으로 탑재된 "원격 Apple event" 기능을 사용하여, TCP/IP 네트워크(주로 LAN) 내의 다른 Mac 상의 응용 프로그램을 제어할 수 있다. 그러나 보안을 위해 macOS 기본 응용 프로그램의 대부분은 이 기능이 금지되어 있으며, OS의 기본 설정에서는 원격 Apple event가 꺼져 있다.[43]

1대의 Mac으로 처리가 따라가지 못하는 경우, 이 기능을 사용하여 여러 대의 Mac에 작업을 할당하여 분산 처리를 할 수 있다. 또한, Mac 상에서 가동되는 가상 환경에서 macOS를 동작시켜 가상 환경과의 분산 처리도 가능하다.[56]

7. 4. 웹 서비스

응용 프로그램 조작 자동화, , 명령어 호출, 화면상의 부품 강제 조작, 웹 콘텐츠 강제 제어, Cocoa 프레임워크 호출, iCloud를 경유한 콘텐츠 갱신 등 매크로 언어로서는 커버할 수 있는 범위가 매우 넓다.[43]

SOAP, XML-RPC를 호출하기 위한 명령어가 기본으로 갖춰져 있다(call soap, call xmlrpc).[57][58][59][60][61] Cocoa 기능을 사용하여 RESTful API를 호출하는 것도 가능하다.[62]

이러한 서비스가 존재하지 않는 사이트에도, Safari의 do JavaScript 명령어를 통해 조작하거나, GUI Scripting으로 강제적으로 조작하여 웹 서비스에 로그인하고 필요한 정보를 가져오는 등의 처리가 가능하다.

7. 5. iOS 응용 프로그램

macOS 11.0 이후, 애플 실리콘 Mac에서는 iOS용 애플리케이션이 그대로 동작한다. 이 때문에, 애플 실리콘 Mac에서 동작하는 iOS 애플리케이션을 애플스크립트에서 조작하는 것도 가능하게 되었다. 전용 용어 사전을 갖지 않은 iOS 애플리케이션에 대해서는 GUI Scripting을 통해 조작하지만, macOS 애플리케이션처럼 객체 계층을 따라갈 수 있는 구조가 아니기 때문에 새로운 노하우가 필요하다.

애플 순정 메모 등의 애플리케이션에서는 macOS용과 iOS용이 iCloud를 통해 데이터 동기화를 하기 때문에, macOS에서 데이터 갱신을 하면 iOS 측에도 그것이 반영된다. 이것을 이용하여 iOS 측에 대량의 데이터를 등록하고 싶을 때 Mac에서 애플스크립트 등으로 데이터를 추가하는 방법이 가능하다. 또한, 아이폰과 연결된 Mac에서 애플스크립트를 사용하여 전화를 걸거나 SMS 메시지를 보낼 수도 있다[63]

iOS 시뮬레이터에서 실행되는 iOS 애플리케이션도 GUI Scripting에 의해 조작 및 정보 획득 등이 가능하다. 따라서, 애플스크립트에서 시뮬레이터상의 iOS 앱을 조작하여, 조작 테스트를 실시하고 단계별로 화면 캡처를 기록하는 것도 이루어지고 있다.

7. 6. 각종 프레임워크

응용 프로그램 조작 자동화, , 명령어 호출, 화면상의 부품 강제 조작, 웹 콘텐츠 강제 제어, Cocoa 프레임워크 호출, iCloud를 경유한 콘텐츠 갱신 등 매크로 언어로서는 다룰 수 있는 범위가 매우 넓다. 또한 GUI 기반 응용 프로그램 개발도 할 수 있어, 일단 익히면 Mac을 사용한 작업 생산성이 향상된다. 다만, 다른 응용 프로그램을 다른 컴퓨터에서도 조작할 수 있기 때문에, 보안을 고려하여 다양한 억제 기능이 OS에 마련되어 있다. (자세한 내용은 #제한 기능 참조).

Classic Mac OS에서 macOS를 통해 계승된 유일한 기술이며[43], 해외를 중심으로 오래전부터 개발자 커뮤니티가 형성되어[44], GUI 기반 응용 프로그램 제어에 대한 지식이 축적되어 있다.

Mac OS X v10.10 이후부터는, 애플(Apple Inc.) 순정 및 서드파티 Cocoa 프레임워크를 애플스크립트(AppleScript)에서 직접 호출하는 것이 가능해졌다[64]。 또한, 컨택트(주소록)나 캘린더의 정보를 프레임워크를 통해 검색하고 조작할 수 있게 되었다[65]。 iTunes Library 검색도 iTunes.app 경유 또는 iTunes Music Library.xml을 검색하는 것보다 빠르게 수행할 수 있다.

7. 7. 단축어 (Shortcuts)

macOS 12 이후부터는 iOS 계열 운영체제에서 이식된 자동화 도구인 "단축어"(Shortcuts.app)를 사용할 수 있다. 이 도구 자체는 애플스크립트를 통한 조작을 지원하며, 지정된 단축어(사용자가 정의한 자동화 워크플로우)를 실행할 수 있을 뿐만 아니라, Shortcuts.app이 실행되지 않은 상태에서도 애플스크립트에서 실행 전용 백그라운드 도구인 "Shortcuts Events"를 지정하여 단축어를 실행하는 것이 가능하다.[43]

단축어 앱의 액션에는 "AppleScript 실행"이 있으며, 단축어 내에서 애플스크립트 실행이 가능하다. 이 액션은 macOS 전용이며, 다른 OS에서는 실행할 수 없다. Cocoa의 기능 호출이나, 사용자 환경에 설치된 AppleScript Libraries의 기능 호출 등이 가능하다. 이로 인해 Mac에서 시리를 통해 음성 인식/텍스트 조작으로 애플스크립트를 실행할 수 있게 되었다.[44]

7. 8. Siri

Piyomaru Software에서 제공하는 AppleScript 라이브러리 "AgentCallerLib"를 사용하면 AppleScript에서 음성 에이전트인 Siri를 호출할 수 있다. 이 라이브러리는 전자책 부록으로 제공되며, 지정된 문자열을 Siri에 전달하여 실행할 수 있게 해준다. "Hey Siri"라는 명령어를 처음에 쓸 필요는 없다. 해당 라이브러리는 macOS 12 이상을 지원한다.[43]

8. 다양한 실행 환경

AppleScript는 중간 코드로 번역되어 순차적으로 실행되지만, 저장 및 실행 환경(런타임 환경)에 따라 동작이 미묘하게 달라 예상대로 작동하지 않는 경우가 있다.

실행 중 로그 표시는 스크립트 편집기에서 열어 실행하거나, Xcode에서 생성하여 디버그 빌드를 수행하는 경우에만 가능하다. 폴더 액션으로 실행 중인 AppleScript 문서를 스크립트 편집기로 열어도, 폴더 액션 실행 중의 로그가 스크립트 편집기에 표시되지는 않는다.


  • 스크립트 편집기: 스크립트 편집기에 작성하여 실행하는 형태이다. 실행 환경은 스크립트 편집기이며, 실행 중지나 로그 표시 내용 확인이 가능하다 (로그를 표시하면 실행 속도가 현저하게 저하된다). 보안 제약이 가장 적어 다른 환경에서는 작동하지 않는 코드가 이 환경에서 작동하는 경우가 많다.
  • 애플릿 (응용 프로그램): 스크립트 편집기에서 작성하여 응용 프로그램으로 저장/내보낸 것이다. 애플릿 실행 시에는 애플릿용 런타임 환경이 준비된다. `on idle`에 의한 타이머 인터럽트, 파일/폴더 드래그 앤 드롭 수신, 핸들러 실행 후 종료되지 않는 기능, 프로그레스 바 표시 기능(macOS X v10.10부터) 등을 이용할 수 있다. 파일/폴더 드래그 앤 드롭을 허용하는 애플릿은 드롭릿이라고 부르며 구별하지만(아이콘이 다름), 런타임 환경은 동일하다. 애플릿은 로그 표시 등의 기능을 이용할 수 없어 버그 확인/수정이 어렵다.
  • Automator: Automator 워크플로우의 일부로 AppleScript를 사용할 수 있다. Automator의 "AppleScript 실행" 액션은 스크립트 편집기와 유사한 기능(로그 표시, 결과 표시)을 갖지만, 다른 AppleScript 지원 응용 프로그램의 AppleScript 용어 사전을 보거나, 실행을 중지하는 기능은 없다.
  • Cocoa-AppleScript Applet: Mac OS X v10.7에서 도입되었다. 스크립트 편집기에서 "파일" > "템플릿에서 새로 만들기" > "Cocoa-AppleScript Applet"을 선택하여 만들 수 있다. AppleScriptObjC로 작성된 프로그램을 스크립트 편집기에서 작성할 수 있지만, Interface Builder를 이용한 사용자 인터페이스 생성은 불가능하고, 디버깅 기능도 부족하다. 실행은 애플릿 형식으로만 가능하다.
  • Xcode (AppleScript 앱): Xcode에서 "파일" > "프로젝트" > "기타" > "AppleScript 앱"을 선택하면 생성된다. Mac App Store에서 애플리케이션 판매가 가능한 형식이다. 일반적인 Cocoa 애플리케이션을 AppleScript로 개발하는 환경이며, 일반적인 Cocoa 애플리케이션과 유사하게 만들 수 있지만, 이를 위해서는 Cocoa 애플리케이션 개발 지식이 필요하다. Xcode 내장 에디터에서 편집하는 AppleScript는 문법 요소에 따른 구문 색상 구분 기능을 사용할 수 없으며, 디버깅도 어렵다. 여러 스크립트 파일로 프로그램을 분할했을 경우 핸들러 호출 방식에 특징이 있다.
  • 스크립트 메뉴: macOS 메뉴 막대의 지정된 폴더 내 AppleScript를 실행하는 macOS 표준 기능인 "스크립트 메뉴"에 등록하여 실행한다. OS 버전에 따라 다양하게 변경되었다. Mac OS X v10.10부터는 `osascript` 명령으로 실행하도록 구현되었다. 스크립트 메뉴에서 여러 AppleScript를 동시에 실행할 수 있게 되었지만, 실행하는 스크립트끼리 공통된 응용 프로그램에 접근했을 때의 충돌까지는 처리해주지 않는다. 스크립트 메뉴에서 실행 중인 스크립트 중지는 가능하지만, 실행 중 로그 표시는 할 수 없다. macOS v10.14부터는 독립된 응용 프로그램으로 제공되게 되었다.
  • 폴더 액션: 지정된 폴더 내용을 수 초 간격으로 감시하고, 변경 시 AppleScript를 실행한다. 런타임 차이보다는 폴더 액션 자체가 macOS 버전에 따라 제대로 동작하지 않는 경우(Mac OS X v10.10)가 문제였다[66]。 macOS v10.11에서 FSEvents를 통해 변경 이벤트를 수신하도록 전면 재작성되어, 파일 변경 시 즉시 스크립트가 실행되게 되었다.
  • 스위치 제어: macOS 접근성 기능 중 하나인 스위치 제어는 플로팅 팔레트에 배치된 버튼에서 키보드 단축키나 AppleScript를 실행할 수 있다. 번들 형식 스크립트 읽기 불가, 스크립트 번들 내 실행 파일 호출 불가, 사용자 디렉토리 아래 AppleScript 라이브러리 인식 불가 등 운영상 제약이 있다.
  • 일본어 음성 인식: 일본어 음성 인식을 통해 AppleScript를 실행할 수 있다. 실행 가능한 형식은 AppleScript 플랫 형식(.scpt) 및 AppleScript 애플릿이다. Siri와는 별개의 음성 인식 명령이며, 미리 지정해 둔 고정 문자열을 일본어 음성 인식하여 일치하면 명령을 실행한다. macOS 12에 단축어 앱이 macOS에 탑재됨에 따라 AppleScript 실행 가능한 음성 인식 명령 실행 계통이 2개 존재한다.

9. 제한 기능

애플스크립트 스크립트 언어는 여러 응용 프로그램을 호출하는 능력은 뛰어나지만, 자체적으로 특정 작업을 수행하도록 설계되지 않았다. 예를 들어, 애플스크립트를 사용하여 집중적인 수학 연산이나 긴 텍스트 처리를 효율적으로 수행할 수 없다. 그러나 애플스크립트를 셸 스크립트, 스크립트 및 기타 스크립트 언어와 함께 사용할 수 있다. 이렇게 하면 해당 작업에 가장 효율적인 언어로 작업할 수 있다.[1]

기능이 너무 확장되어 할 수 있는 일이 너무 많아졌기 때문에, macOS에는 애플스크립트의 일부 기능을 억제하기 위한 기능이 마련되고 있다. 이러한 기능은 기본적으로 금지 상태로 되어 있지만, 관리자 암호를 입력하면 실행을 허가하도록 되어 있다.[1]

10. 헬로 월드 프로그램

applescript

display dialog "Hello World!" -- "승인"과 "취소" 버튼이 있는 창을 띄움


  • - 또는

display alert "Hello World!" -- "승인" 버튼 하나만 있는 창을 띄움

  • - 또는

say "Hello World!" -- 음성 합성을 이용한 목소리를 냄

```

애플스크립트에서 전통적인 헬로 월드 프로그램은 다음과 같은 다양한 형태로 작성될 수 있다.

```applescript

display dialog "Hello, world!" -- "OK"와 "취소" 버튼이 있는 모달 창

  • - 또는

display alert "Hello, world!" -- "OK" 버튼 하나와 경고를 표시하는 앱의 아이콘이 있는 모달 창

  • - 또는

say "Hello, world!" -- 합성된 컴퓨터 음성을 사용하여 음성 메시지 출력

```

애플스크립트는 대화 상자, 경고, 선택 목록을 포함한 여러 사용자 인터페이스 옵션을 가지고 있다.

```applescript

  • - 대화 상자

set dialogReply to display dialog "대화 상자 텍스트"

default answer "텍스트 답변"

hidden answer false

buttons {"건너뛰기", "확인", "취소"}

default button "확인"

cancel button "건너뛰기"

with title "대화 상자 창 제목"

with icon note

giving up after 15

```

```applescript

  • - 목록에서 선택

set chosenListItem to choose from list {"A", "B", "3"}

with title "목록 제목"

with prompt "프롬프트 텍스트"

default items "B"

OK button name "좋아요!"

cancel button name "아니오, 다시 시도"

multiple selections allowed false

with empty selection allowed

```

```applescript

  • - 경고

set resultAlertReply to display alert "경고 텍스트"

as warning

buttons {"건너뛰기", "확인", "취소"}

default button 2

cancel button 1

giving up after 2

```

각 사용자 상호 작용 방법은 클릭된 버튼 값, 선택된 항목 또는 추가 처리를 위해 입력된 텍스트를 반환할 수 있다. 예를 들어:

```applescript

display alert "Hello, world!" buttons {"무례하게 거절", "기꺼이 수락"}

set theAnswer to button returned of the result

if theAnswer is "기꺼이 수락" then

beep 5

else

say "흥!"

end if

참조

[1] 간행물 Script Editor Apple Inc. 2022
[2] 웹사이트 OS X 10.10 Yosemite release date https://www.theverge[...] 2014-10-16
[3] 서적 AppleScript: the missing manual https://books.google[...] O'Reilly Media 2005
[4] 서적 Learn AppleScript https://books.google[...] Apress 2009
[5] 간행물 Apple Ponders Standardizing on HyperTalk https://books.google[...] 1989-02-27
[6] 학술 AppleScript http://www.cs.utexas[...] Association for Computing Machinery 2007
[7] 웹사이트 AppleScript Language Guide commands reference: do shell script https://developer.ap[...] 2019-09-15
[8] 웹사이트 Apple's greatest hits: 30 significant products https://www.macworld[...] 2019-09-12
[9] 학술 The unlikely persistence of AppleScript http://www.macworld.[...] 2013-03
[10] 웹사이트 Sal Soghoian says 'ask Apple' about future of Mac user automation as company eliminates position https://9to5mac.com/[...] 2017-05-08
[11] 웹사이트 Does Apple really want to kill Automator, AppleScript? Shock termination of veteran Apple developer guru sends shockwaves across the Mac community http://www.computerw[...] 2017-05-08
[12] 웹사이트 Apple's intent isn't the same as committing to mac automation https://www.macobser[...] 2017-05-08
[13] 웹사이트 Scriptable Applications https://developer.ap[...] 2018-07-26
[14] 웹사이트 Smile and SmileLab Home Page http://www.satimage.[...] 2017-05-08
[15] 웹사이트 ASObjC Explorer 4 Discontinued https://www.macosxau[...] 2017-05-08
[16] 웹사이트 Mark Alldritt's Journal » FaceSpan http://blog.latenigh[...] 2017-05-08
[17] 웹사이트 AppleScript Language Guide: Folder Actions Reference https://developer.ap[...] 2017-05-08
[18] 웹사이트 Capsule review: Hazel 2.3 http://www.macworld.[...] 2017-05-08
[19] 웹사이트 Alfred review: This Mac app launcher continues to shine, but Alfred Remote doesn't stack up http://www.macworld.[...] 2017-05-10
[20] 웹사이트 Capsule review: FastScripts 2.5 http://www.macworld.[...] 2017-05-08
[21] 웹사이트 Mac Gems: Keyboard Maestro 6 is a genius at repetitive tasks http://www.macworld.[...] 2017-05-10
[22] 웹사이트 Capsule review: QuicKeys 4 http://www.macworld.[...] 2017-05-08
[23] 웹사이트 AppleScripts – Quicksilver Wiki https://docs.qsapp.c[...] 2017-05-10
[24] 웹사이트 TextExpander 5 review http://www.macworld.[...] 2017-05-08
[25] 웹사이트 Mac Automation Scripting Guide: Using the Systemwide Script Menu https://developer.ap[...] 2017-05-08
[26] 웹사이트 osascript(1) Mac OS X Manual Page https://www.unix.com[...] 2024-07-23
[27] 웹사이트 AppleScript Libraries http://www.macosauto[...] 2017-05-08
[28] 웹사이트 WWDC 2013 Session 416: Introducing AppleScript Libraries http://asciiwwdc.com[...] 2017-05-08
[29] 서적 AppleScript: the definitive guide O'Reilly Media 2006
[30] 웹사이트 AppleScript and Yosemite https://mjtsai.com/b[...] 2017-05-09
[31] 웹사이트 AppleScriptObjC Release Notes https://developer.ap[...] 2017-05-08
[32] 웹사이트 Building a basic AppleScriptObjC (Cocoa-AppleScript) application with Xcode http://www.peachpit.[...] 2017-05-09
[33] 웹사이트 ASObjCExtras Scripting Guide http://www.piyocast.[...] 2017-05-09
[34] 웹사이트 Introduction to Automator AppleScript Actions Tutorial https://developer.ap[...] 2017-05-08
[35] 웹사이트 Technical Note TN1164: Scripting Additions for Mac OS X https://developer.ap[...] 2017-05-08
[36] 웹사이트 AppleScript Release Notes: 10.5 Changes https://developer.ap[...] 2017-05-08
[37] 웹사이트 POSIX file — Class Reference — AppleScript Language Guide https://developer.ap[...] 2018-01-08
[38] 웹사이트 AppleScript Language Guide: Handlers in Script Applications https://developer.ap[...] 2013-07-21
[39] 웹사이트 AppleScript Overview: Open Scripting Architecture https://developer.ap[...] 2017-05-08
[40] 웹사이트 OS X 10.10 Yosemite: The Ars Technica Review: JavaScript automation https://arstechnica.[...] 2014-10-16
[41] 웹사이트 Importing Scripts https://github.com/J[...] JXA-Cookbook 2019-12-09
[42] 문서 JavaScript for Automation Release Note https://developer.ap[...]
[43] 문서 林信行の「Leopard」に続く道 第5回:System 7で幕をあけた激動の1990年代(後編) https://www.itmedia.[...]
[44] 문서 AppleScript Users ML https://lists.apple.[...]
[45] 문서 AppleScript Language Guide Keywords https://developer.ap[...]
[46] 문서 Scripting Additions for Mac OS X https://developer.ap[...]
[47] 문서 macOS Mojave 10.14 Release Notes https://developer.ap[...]
[48] 웹사이트 Mac Automation Scripting Guide - Automating the User Interface https://developer.ap[...] 2016-05-29
[49] 웹사이트 AppleScript Overview - AppleScript Utilities and Applications - System Events and GUI Scripting https://developer.ap[...] 2016-05-29
[50] 웹사이트 OS X: Using AppleScript with Accessibility and Security features in Mavericks https://support.appl[...] 2016-05-29
[51] 문서 “GUI Scripting”と”UI element Scripting” http://piyocast.com/[...]
[52] 문서 【基礎】アプリケーションの操作は、用語辞書に書いてあるとおり記述しないと動かない http://piyocast.com/[...]
[53] 문서 AppleScriptObjC Release Notes https://developer.ap[...]
[54] 문서 AppleScript sorting performance comparison http://piyocast.com/[...]
[55] 문서 Technical Note TN2065: do shell script in AppleScript http://developer.app[...] Mac Developer Library 2006-03-23
[56] 문서 ParallelesにゲストOSとしてインストールしたOS XをAppleScriptで制御 http://piyocast.com/[...]
[57] 문서 郵便専門ネットでバージョン番号を取得 http://piyocast.com/[...]
[58] 문서 郵便専門ネットでXML-RPC経由でJISコード(5桁、6桁どちらでも)から、その市区町村に属している郵便番号のリストを取得 http://piyocast.com/[...]
[59] 문서 郵便専門ネットで道府県のコード(地方公共団体コードの先頭2文字)から都道府県名を返す http://piyocast.com/[...]
[60] 문서 郵便専門ネットで引数に指定した郵便番号で何件ヒットするのかをint型で返す http://piyocast.com/[...]
[61] 문서 郵便専門ネットでXML-RPC経由で郵便番号を6桁(チェックデジット付き)の全国地方公共団体コード/JISコード/市町村コードに変換 http://piyocast.com/[...]
[62] 문서 REST APIに対してGET、POST、PUT、DELETEのmethodを呼び出す http://piyocast.com/[...]
[63] 문서 AppleScriptから電話にアクセスする http://piyocast.com/[...]
[64] 문서 ZipZap frameworkを使ってZipアーカイブ内の情報を取得 http://piyocast.com/[...]
[65] 문서 Contactsに登録してある自分の写真をPNGでデスクトップに保存する http://piyocast.com/[...]
[66] 문서 AppleScript Release Notes 10.11 Changes Folder Actions https://developer.ap[...]
[67] 문서 OS X 10.11.5+Safari 9.1.1以降で、新たなAS制限機能が増える http://piyocast.com/[...]
[68] 문서 tccKitで指定Bundle IDのアプリケーションの「オートメーション」認証状況を取得 http://piyocast.com/[...]
[69] 웹인용 OS X 10.10 Yosemite release date https://www.theverge[...] 2014-11-16



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com