Как я использовал сценарий Swift в браузере Electron нативно – CodesCode

Electron позволяет гибко поддерживать одну кодовую базу JavaScript для создания кросс-платформенных приложений поддержки Windows, macOS и Linux.

Electron – это фреймворк для создания приложений толстого клиента с использованием веб-технологий, таких как HTML, CSS и JavaScript. Electron обеспечивает гибкость поддержки одной кодовой базы на JavaScript для создания кросс-платформенных приложений для Windows, macOS и Linux. По сути, вы пишете один раз и запускаете везде.

JavaScript хорошо работает со всеми возможностями, которые могут потребоваться в приложении, но проблемы возникают, когда требуется взаимодействие с операционными системами через специфичные для них средства API. Я столкнулся с такой проблемой, работая над браузером, основанным на Electron. Требовалось найти список открытых окон приложений на Mac через определенные интервалы времени (несколько секунд). Node или JavaScript не предоставляют интерфейс доступа к этой информации на уровне операционной системы, поэтому мне пришлось разработать собственное решение.

Первоначальное решение

Изначально я решил эту проблему, написав OSAScript. OSAScript позволял получать список открытых окон на Mac, но главной проблемой, выявленной во время тестирования, было использование процессора. Поскольку OSAScript работал с определенным интервалом, он вызывал скачок использования процессора на 40-50%, поэтому это решение не было приемлемым.

Что дальше?

После поиска я наткнулся на различные решения, такие как:

  1. Использование библиотеки Python Cocoa (PyCocoa): Это обеспечивает интерфейс между Python и Cocoa, который может быть использован в JavaScript
  2. Библиотеки JsCocoa: Я попробовал интегрировать, но это не сработало
  3. Пользовательский сервер Flask: Некоторые посты предлагали запуск пользовательского сервера Flask в браузере и использование API из JavaScript

Все эти подходы были слишком сложными в использовании или приводили к увеличению задержки и размера приложения.

Решение

Использование SWIFT и child_process.exec():


Leave a Reply

Your email address will not be published. Required fields are marked *