Если вы искали приложение для скриншотов кода на iPhone, вы, скорее всего, ждали подборку. Десять приложений, таблица сравнения, победитель.

Писать нечего. Пойдёте искать — найдёте веб-инструменты, которые открываются в Safari, и редакторы кода, которые подсвечивают синтаксис, но не делают картинок для публикации. Категория, которой на настольном компьютере в избытке, как нативное ПО для iPhone почти не существует.

Это странный пробел для дела, которым занято столько разработчиков, и в нём стоит разобраться, прежде чем соглашаться на первую открывшуюся вкладку.

Оговорка, прежде чем вы продолжите: мы делаем Codeshot — один из немногих нативных вариантов, и он не бесплатный. В последнем разделе написано, кому его покупать не стоит. Вот как он выглядит на iPhone, чтобы было понятно, за что здесь агитируют:

Codeshot на iPhone: отрисованный фрагмент кода на градиентном фоне, под ним элементы выбора темы и фона

Что вы находите на самом деле

Веб-инструменты. Carbon.now.sh, ray.so и длинный хвост похожих сайтов. Именно они здесь настоящие старожилы. На телефоне они работают в том смысле, что страница загружается.

Редакторы кода. Textastic и Koder — по-настоящему хорошие нативные приложения для iOS, которые подсвечивают код. Ни одно из них не пытается сделать оформленную картинку для поста: редактор просто не для этого.

Между ними — почти ничего. Этот пробел и есть тема страницы.

Справедливости ради об App Store: он огромен, и вполне может существовать что-то, чего не покажем ни мы, ни поиск. Но сам факт, что искать приходится, — это уже вывод. На настольных системах эта категория переполнена до карикатурности.

Почему пробел существует

Не потому, что этого никто не хочет. Из-за того, во что обходится сделать такую вещь.

Инструмент для скриншотов кода — это три части, которые должны друг с другом согласоваться. Подсветка синтаксиса, покрывающая достаточно языков, чтобы быть полезной: это значит поставлять и поддерживать набор грамматик, а не написать одно регулярное выражение. Рендерер, который раскладывает текст нужным шрифтом, с нужными отступами и оформлением окна и каждый раз выдаёт одни и те же пиксели. Конвейер экспорта, который чисто масштабирует и передаёт картинку туда, куда она идёт.

В вебе все три достаются почти даром. У браузера уже есть движок вёрстки, highlight.js — это тег script, а экспорт — это canvas. Поэтому Carbon вообще появился, и поэтому дюжина последовавших инструментов — тоже веб-страницы: предельные издержки следующего очень малы.

В нативной разработке всё наоборот. Свою подсветку, свою раскладку текста и свой рендеринг вы приносите сами. И, в отличие от веб-инструмента, исправление нельзя выкатить пушем в ветку.

Так что стимул всегда указывал в сторону браузера. Те приложения, что всё же пошли нативным путём, пошли туда, где это окупается, — в редакторы, где настоящая работа с текстом нужна в любом случае.

Что ломается, когда веб-инструмент встречает телефон

Ничего драматичного. Трение, троекратное, каждый раз.

Ввести код. Редактор — это веб-поле ввода. Маркеры выделения, каретка и автозамена ведут себя как в любом другом веб-поле на iOS, то есть не так, как ведёт себя редактор кода.

Что-нибудь настроить. Идея Carbon в том, что настраивается всё: тема, шрифт, отступы, фон, масштаб. На настольном экране это ряд меню, который вы окидываете взглядом. На телефоне это мелкие цели, которые надо выискивать, и каждая закрывает предпросмотр, который вы настраиваете. ray.so переживает это лучше именно потому, что предлагает меньше.

Вынуть картинку. Экспорт — это загрузка через браузер. На iOS это значит, что файл куда-то падает и вы идёте его искать, вместо того чтобы сразу перейти в приложение, из которого публиковали.

Раз в месяц всё это неважно. Еженедельно — это те же три схватки каждый раз.

Что нативность действительно даёт

Три вещи, и все они про концы, а не про середину.

Буфер обмена — одно нажатие. Универсальный буфер означает, что скопированный на Mac сниппет уже лежит на телефоне. Нативное приложение может взять его напрямую.

Экспорт идёт в меню «Поделиться». Не загрузка — сразу в «Сообщения», Slack, черновик поста, «Файлы» или медиатеку.

Настройки сохраняются. Тема, фон и пропорция остаются теми, что вы выбрали в прошлый раз, — по большей части именно поэтому десятая картинка занимает секунды, а не минуты.

Есть и четвёртое, важное для одних и совершенно безразличное для других: ваш код никогда не попадает на веб-страницу. Если вы вставляете клиентскую работу или невыпущенную функцию, эта разница может иметь значение для кого-то выше вас, даже если не имеет для вас.

Так чем же пользоваться

Изредкаray.so в Safari. Бесплатно, настроек достаточно мало, чтобы маленький экран не стал проблемой, результат приличный. Бесплатный инструмент, которым вы пользуетесь дважды в месяц, менять не нужно.

В основном за столом — Carbon.now.sh на Mac, и перестаньте пытаться на телефоне. Он бесплатен, открыт и превосходен там, где его задумывали использовать.

Регулярно, с телефона — вот ради этого случая нативность и существует. Codeshot — нативное приложение для Mac и iPhone: вставка из буфера обмена одним нажатием, 30 тем подсветки, 60 языков, определяемых по самому коду, пропорции от 1:1 до 9:16 и экспорт прямо в меню «Поделиться».

Никогда — встроенный скриншот. Он фиксирует ширину телефона, а не вашего кода, и строки перенесены ещё до того, как вы что-то нажали.

Кому не стоит покупать наше

Оно стоит 5,99 $ и работает только на устройствах Apple. Все веб-инструменты на этой странице бесплатны и работают везде.

Если вы делаете одну картинку с кодом в месяц, правильный ответ — ray.so, и нам приятнее, чтобы вы взяли его. Если у вас нет ни iPhone, ни Mac, такого выбора перед вами и не стоит. А если картинки всегда делаются за столом, Carbon на компьютере бесплатен и очень хорош.

Довод в пользу нативного приложения узок и конкретен: вы делаете это часто, делаете с телефона, и трение стало обходиться дороже, чем само приложение.

Если это про вас, Как снять код на iPhone проводит через весь процесс, а Carbon.now.sh на iPhone подробнее разбирает, что ломается в браузере.