Видение

Видение Code App состоит в том, чтобы перенести возможности редактирования на рабочем столе на iPad и использовать самый популярный в настоящее время редактор кода для настольных компьютеров VS Code в качестве эталона дизайна. Но что, если бы мы могли запустить VS Code на iPad?

Что ж, оказывается, мы можем! Ниже приведен скриншот VS Code, работающего на iPad с поддержкой Git и включенным расширением выполнения кода на стороне сервера.

Как это работает?

В настоящее время VS Code существует на двух платформах — настольной и веб-версии. Прежняя платформа, с которой мы все знакомы, использует Electron, который, к сожалению, недоступен на iOS. Это подводит нас ко второму варианту.

Второй вариант, несмотря на то, что он менее известен, на самом деле относительно легко собрать из исходного кода. Все, что вам нужно сделать, это клонировать репозиторий кода VS и построить зависимости.

git clone https://github.com/microsoft/vscode.git
cd vscode
git checkout master
git pull https://github.com/microsoft/vscode.git master

cd vscode
yarn
yarn web

Вы также можете попробовать его на веб-площадке VS Code: https://vscode-web-test-playground.azurewebsites.net.

Сразу же вы заметите, что он на самом деле довольно прочный! Существует поддержка подсветки синтаксиса области TextMate, а также IntelliSense для нескольких языков, включая Javascript и Typescript. Самое главное, эти функции включены на стороне клиента. Для их обработки не требуется логика на стороне сервера.

Это означает, что мы можем обслуживать необходимые файлы с локального веб-сервера, работающего на iOS, и загружать их с помощью браузера. Бум! Интерфейс VS Code доступен в автономном режиме на вашем iPad.

Ограничения

Конечно, есть ряд вопросов. Прежде всего, браузер изолирован — он не может получить доступ к файлам из файловой системы iOS. Это означает, что файлы не сохраняются.

К счастью, с превосходной коллекцией API VS Code я могу создать расширение, реализующее файловую систему, которая обменивается данными между веб-сервером и браузером. Это означает, что мы можем загружать файлы (включая двоичные файлы, такие как изображения) с локального диска.

class FetchFileSystemProvider {
       async rename(from, to, opts) {
            await fetch('/rename', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    from, to, opts
                })
            });
        }
        async write(id, a, content, b, c) {
            await fetch('/writefile/', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    ... this.openFiles[id],
                    base64encoded: ToBase64(content)
                })
            });
        }
}

Во-вторых, Git — основная функция VS Code — тоже не работает. Это решается по той же логике, что и первая проблема. Мы оставляем тяжелую работу с Git веб-серверу и отправляем результаты обратно в браузер.

С помощью этой логики все, что может работать на iOS, в конечном итоге может быть реализовано. Например, эмулируемый терминал (у нас он уже есть в приложении Code) или языковой сервер, обеспечивающий расширенное завершение кода.

Для функций, которые мы не могли легко реализовать в iOS, например, для компиляции C, Java и других программ. Мы могли бы сделать это с внешнего сервера, как это делает Repl.it. (Опять же, функция Code App с самого начала)

Вердикт

Хотя это здорово, что вы можете запускать VS Code на своем iPad, он никогда не будет соответствовать среде рабочего стола, поскольку ограничение iOS все еще действует. Например, невозможно запустить неподписанный двоичный файл, поэтому менеджеры пакетов, такие как Homebrew, скорее всего, никогда не будут работать на iOS. Кроме того, интерфейс VS Code на самом деле не оптимизирован для сенсорных устройств, вы обнаружите, что многие элементы управления трудно или невозможно использовать без физической клавиатуры или трекпада.

Что теперь?

Я планирую выпустить код и сделать его проектом с открытым исходным кодом. В будущем мы могли бы внедрить расширение удаленной разработки VS Code, которое поддерживает разработку на удаленном сервере через SSH, делая версию VS Code для iPad готовой к использованию в производственной среде.