AppleScript가 캘린더 이벤트 속성을 너무 느리게 수정하는 이유는 무엇입니까?


1

캘린더 이벤트를 대량으로 반복하는 프로세스를 자동화하기 위해 상당히 간단한 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)를 실행하고 있습니다.


@CJK는 가능하지만 log summary of e as text쉘 스크립트 나 추가 계산없이 루프에서 수행해도 느리게 수행됩니다.
aaplmath

@CJK 불행히도, 사용 a reference to은 원래의 접근 방식만큼 느립니다.
aaplmath

답변:


1

CalendarLib를 사용하십시오. CalendarLib는 캘린더 앱을 사용하지 않고 캘린더 이벤트에 대해 작업 할 수있는 스크립트 라이브러리입니다. 매우 빠릅니다.

CalendarLib

CalendarLib는 Calendar.app를 사용하지 않고 캘린더 이벤트를 조작하기위한 AppleScript 스크립트 라이브러리입니다. BridgePlus 스크립트 라이브러리뿐만 아니라 OS X 10.9 이상이 필요합니다.

AppleScript에서 캘린더가 왜 그렇게 느린 지 모르겠습니다.


불행히도 CalendarLib은 격주로 이벤트 반복을 지원하지 않으므로이 상황에서는 작동하지 않습니다.
aaplmath
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.