Создание сценариев для приложений SwiftUI с помощью AppleScript и Javascript JXA

Обратите внимание, что я внимательно следил за тем, как реализовать поддержку AppleScript в приложении Swift MacOS , однако это не работает для меня. Я предполагаю, что он устарел.


После изучения множества документации, руководств, примеров я застрял, пытаясь заставить поддержку AppleScript/Javascript работать в приложении SwiftUI. (в Macos Big Sur, для начала.)

Основная проблема заключается в том, что вся документация, примеры и т. д. устарели.

Я мог бы задать этот вопрос как о Swift 5 +AppDelegateвместо SwiftUI, и я был бы в том же рассоле.

Итак, вот что у меня пока...

  • Info.plist — (отсутствует в SwiftUI) добавлено:
      <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSAppleScriptEnabled</key>
    <true/>
    <key>OSAScriptingDefinition</key>
    <string>Progression.sdef</string>
</dict>
</plist>
  • Progression.entitlements для разрешения сценариев. (Песочница тоже отключена.)
      <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <false/>
    <key>com.apple.security.files.user-selected.read-only</key>
    <true/>
    <key>com.apple.security.automation.apple-events</key>
    <true/>
</dict>
</plist>
  • Затем я создал то, что, как я надеюсь, работаетProgression.sdefфайл определения сценария.
      <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
<dictionary title="Progression Terminology">
    <suite name="Progression Suite" code="PrgN" description="Progression scripting classes and commands.">
        <command name="progress" code="proGress">
            <cocoa class="Progression.ProgressCommand"/>
        </command>
    </suite>
</dictionary>
  • ProgressCommandв приложении SwiftUI.
      import Foundation
@objc class ProgressCommand: NSScriptCommand {
    @objc override func performDefaultImplementation() -> Any? {
        print("Called")
        return nil
    }
}
  • Я могу загрузить приложение и обнаружить sdef в ScriptEditor > Open Dictionary...
  • В AppleScript я могу вызвать quit в приложении (хотя я не проверял, работает ли это, если я вытащу все элементы сценария):
      tell application "Progression"
  quit
end tell
  • В AppleScript, если я позвонюprogressкажется, он распознает команду, хотя я не уверен, проходит ли она мимо.sdefуровень ... потому что он терпит неудачу с:
      tell application "Progression"
  progress
end tell
      error "Progression got an error: Can’t continue progress." number -1708

На данный момент я застрял на пару дней.

Изменить: я нашел этот ответ:

/questions/34385856/sozdanie-prilozheniya-kakao-scriptable-swift/34385860#34385860 , хотя добавление кода в приложение SwiftUI не работает.

К счастью, есть проект и код (использующий старый стиль NSAppDelegate), который работает автономно.

Если я не могу получить рабочий ответ для чистого SwiftUI, я просто повторно реализую приложение, используяNSAppDelegate, в конце концов мне просто нужна рабочая ссылка на AppleScript.

Остается вопрос, возможно ли это в приложении SwiftUI?

0 ответов

Другие вопросы по тегам