캘린더 이벤트를 대량으로 반복하는 프로세스를 자동화하기 위해 상당히 간단한 AppleScript를 작성하려고합니다. 특히, 주어진 시간 범위 내에서 주어진 달력의 모든 이벤트가 반복적으로 격주로 설정되기를 원합니다.
이것은 상당히 일상적이고 빠른 작업처럼 보이지만 1 주일 동안 약 30 개의 이벤트에서 실행될 때 아래 스크립트는 완료하는 데 약 1 시간 30 분이 걸립니다. 또한 스크립트가 실행되는 동안 컴퓨터를 건드리지 않은 경우에만 해당됩니다. 랩톱을 동시에 사용하려고하면 결국 Apple 이벤트가 시간 초과되었음을 나타내는 오류와 함께 스크립트가 실패합니다.
실제로 캘린더 일정을 반복하고 속성에 액세스하거나 수정하는 것은 AppleScript에서 천문학적으로 오랜 시간이 걸리는 것 같습니다 (예 : 각 이벤트를 호출 log
하는 것만으로 summary
). 이벤트 가져 오기를 별도의 변수로 옮기고 이벤트 날짜 이외의 속성을 사용하여 이벤트를 가져 오려고했지만 성능을 향상시키는 것은 없습니다.
이 놀라운 속도 저하의 원인은 무엇이며이를 완화하기 위해 무엇을 할 수 있습니까? 아니면 이것이 단순히 AppleScript / macOS Scripting Bridge / Calendar 자체의 고유 한 부분입니까?
문제의 스크립트는 다음과 같습니다.
tell application "Calendar"
set cal to calendar 1 whose name is "Schedule"
set theStartDate to date "Sunday, January 27, 2019 at 00:00:00"
set theEndDate to date "Saturday, February 2, 2019 at 00:00:00"
repeat with e in (every event of cal whose start date is greater than theStartDate and start date is less than theEndDate)
set esStartDate to e's start date
set theWeekday to weekday of esStartDate
set lower to text 1 thru 2 of (theWeekday as string)
set upper to do shell script "echo " & lower & " | tr [:lower:] [:upper:]"
set e's recurrence to "FREQ=WEEKLY;INTERVAL=2;UNTIL=20190602T035959Z;BYDAY=" & upper & ";WKST=SU"
end repeat
end tell
"답장"콘솔을 살펴보면 스크립트가 초기 count every event of calendar id "[ID]"
Apple 이벤트와 이벤트의 재발을 수정하려는 각 시도에서 속도가 느려집니다 .
2015 년 초 MacBook Pro에서 macOS Mojave 10.14.2 (Calendar 11.0)를 실행하고 있습니다.
a reference to
은 원래의 접근 방식만큼 느립니다.
log summary of e as text
쉘 스크립트 나 추가 계산없이 루프에서 수행해도 느리게 수행됩니다.