bulava.app Відкрити прототип

Як зробити мобільну Bulava

Той самий застосунок на телефоні. Головне рішення одне: телефон нічого не виконує — він показує те саме, що показує Mac, і просить Mac діяти. Усе решта випливає з цього.

Чому саме так

Десктопна Bulava — не звичайний застосунок. Вона запускає процеси, читає й переписує файли, друкує в живий термінал, керує чужими вікнами і знімає екран. Нічого з цього на телефоні немає і не буде.

Але в Bulava вже є готова відповідь на цю саму задачу. Виконавці теж не мають прав на керування Mac — тому вони просять Bulava, а вона одна виконує і записує, що зробила. Телефон стає ще одним, хто просить. Нічого нового вигадувати не треба: канал уже працює щодня.

Тому «дублікат» — це однакові можливості й однакові дані, а не однакова верстка. Три колонки Mac на телефоні перетворюються на меню, екран і панель контексту знизу. Перевіряти треба, чи все можна зробити, а не чи все виглядає однаково.

Що йде по каналу

Не картинка екрана і не сирі дані. Це важливо, бо різниця в обсягах величезна.

Живий стан

Хто зараз працює, на чому спинився, скільки лишилось ліміту. Кілька кілобайт, які змінюються кожні кілька секунд — їх можна слати постійно.

Розмови й файли

Десятки мегабайтів на диску Mac, вкладення — сотні. Телефон тягне тільки відкриту сторінку відкритої розмови, а вкладення й кадри — поштучно, коли в них тицьнули.

Половина того, що Bulava зберігає, уже готова їхати по мережі як є. Друга половина — те, що вона обчислює на льоту — ні: ці типи ніколи не мали залишати процес. Це найбільша окрема робота в усьому проєкті, і вона вся на боці Mac.

Порядок робіт

1

Спільне ядро

Винести моделі Bulava в окремий пакет, який збирається і для Mac, і для iPhone. Вони вже майже не залежать від платформи — це перевірено, а не припущено.

Тут же дописати серіалізацію живої половини стану й ту саму версійність, за якою обидві сторони розуміють, що вони про одне й те саме.

Без цього не має сенсу починати решту.
2

Протокол: стан і команди

Mac віддає стан змінами, а не цілком. Кожна команда з телефона йде в конверті: що робити, над чим, і яку версію цього телефон бачив. Mac перевіряє умови заново в мить виконання — вердикт не приїжджає з телефона.

Два правила, які роблять різницю між іграшкою і робочим інструментом: відповідь на питання прив’язана до конкретного питання, а команда — до свого номера. Тоді відповідь ніколи не ляже на вже інше питання, а повторена після обриву команда не виконається двічі.

Це серце роботи. Решта — оболонка навколо нього.
3

Спершу домашня мережа

Телефон знаходить Mac у тій самій мережі й говорить із ним напряму. Ніякого сервера, ніякого посередника. QR на екрані Mac передає його ключ — після цього підмінити Mac уже не вийде.

Робота тут не пропадає: мова й протокол ті самі, що поїдуть далі. Просто це найдешевше місце, щоб довести, що вони правильні.

Умова приймання цього кроку — той самий протокол має поїхати другим шляхом без переписування.
4

Потім — звідусіль

Поза домом телефон і Mac так само говорять напряму, а сервер лише допомагає їм знайти одне одного. Він не бачить, що всередині, і не зберігає розмов.

У частині мереж прямий шлях не складається — тоді потрібен ретранслятор. Він коштує трафіку, тому має бути запасним варіантом із лічильником, а не звичкою.

Перший постійно ввімкнений сервіс, який Bulava починає утримувати. Тому не раніше, ніж протокол доведений.

Дозволи: три рівні, не один

Вимога «мобілка показує, що дозвіл дається тільки з компа» правильна, але межа проходить у трьох місцях, а не в одному. Злити їх докупи — це знову відправити людину робити руками те, що машина може сама.

РівеньЩо це означає
Телефон просить — Mac робить Довіра до тек, встановлення рушія. Натиснув на телефоні — зроблено, нікуди йти не треба.
Mac відчинить двері Входи в акаунти й установлення інструментів. Телефон запускає, але завершує людина біля Mac: вхід неможливо натиснути дистанційно.
Тільки біля Mac Доступ до екрана, диска, мікрофона. Це вікна самої macOS — вона навмисно не дає жодному застосунку натиснути там замість людини.

Перша стіна з дозволом, до речі, буде на телефоні, а не на Mac: щоб побачити Mac у домашній мережі, iOS спитає окремий дозвіл, і відмову не можна перепитати з коду.

Чого прототип не доводить

Він доводить одне: що всім на телефоні можна користуватися і що межі видно там, де вони справді є. Він не доводить, що з’єднання встановиться в чужому Wi-Fi, що стан зійдеться після довгої перерви і що команда не виконається двічі. Це перевіряється тільки роботою.

Ще дві речі, які краще знати зараз, ніж потім. Дзеркало живе, поки живий Mac: коли він спить, телефон може лише показувати збережене, і ретранслятор цього не рятує. А в правилах App Store є окремий пункт про застосунки, які дзеркалять десктопну програму: він дозволяє це в межах домашньої мережі й нічого не обіцяє поза нею. Питати Apple, під який опис підпадає Bulava, треба до того, як обрано остаточну форму.

Прототип · Дані в ньому вигадані, робота симулюється.