Один додаток для трьох платформ



Ми зараз дуже задоволені внутрішнім пристроєм додатки Aword: його легко підтримувати, розвивати і тестувати, а деплой нових версій відбувається одночасно на всіх платформах. Але так було не завжди. Сьогодні ми розповімо про те, як ми йшли по шляху універсалізації, наступаючи на граблі і набираючись досвіду.

Спочатку було слово

Спочатку наше мобільний додаток замислювалося як простий допоміжний інструмент для учнів школи. Більшість уроків містять деякий набір лексики для заучування, до нього і студент, і викладач можуть додавати слова прямо під час заняття, і все це по ідеї треба вивчити до наступного класу. Зрозуміло, що робити це на телефоні або планшеті – зручно. Так з'явилася перша версія програми для iOS, доступний нашим учням, що містила лише чотири простих механіки заучування (словникова картка, «пам'ятаю — не пам'ятаю» і дві перевірки з вибором правильної відповіді з чотирьох варіантів). Ніяких «розумних» алгоритмів там не було, була проста зубріння, а програма вирішувала, що слово вивчене, коли учень певну кількість разів поспіль правильно вибирав переклад. Пізніше таке ж додаток було написано з нуля для Android.

Подивилися ми на наш додаток, подивилися на відгуки учнів, і побачили, що це добре. Що треба цю справу виводити за межі школи і пропонувати стороннім користувачам. Але тільки не у вигляді примітивного інструменту для заучування, а у вигляді розумного, ефективного, адаптується програми. Яке треба не тільки знову написати з нуля, але ще і ретельно відтестувати на рівні алгоритмів.

Для тестування ми написали новий веб-додаток на PHP, тому що так простіше, а тестерам красиві інтерфейси не потрібні. Відточили алгоритми, оптимізували набір механік. І побачили, що це теж добре.

Але ось ідея писати з нуля ще дві версії програми (для iOS і Android), а потім підтримувати і розвивати паралельно всі три, нам зовсім не подобалася. Тому було вирішено ядро оформити у вигляді C++ бібліотеки, єдиної для всіх версій програми, і далі працювати з нею.

Тому ми, по суті, ще раз переписали все з нуля. Але один і, сподіваємося, останній раз.

Одна бібліотека

Чому саме C++? Тому що З++ – багатоплатформовий мову, він відмінно складений під iOS, добре підтримується на Android, його можна використовувати з PHP в вебі, скомпілювавши C++ код PHP extension. Інші мови не можуть похвалитися такою підтримкою. Наприклад, у разі вибору Java нам було б простіше зробити додаток для Android, але для перенесення на iOS довелося б використовувати непопулярні інструменти (jvm начебто RoboVM), а працювало б воно помітно гірше. Плюс більш складна, ніж у випадку C++, інтеграція Java з PHP.

В результаті у нас вийшла така картина: інтерфейси (клієнтські програми), написані окремо для кожної платформи на їх рідних мовах (Objective C, Java і бекенд на PHP), звертаються до спільного для всіх версій ядра програми (бібліотеки C++), що виконує основну роботу. Додаток також має зв'язок з сервером (авторизація, зберігання загальних ресурсів, каталог статичних сетів, словник, потенційна зв'язок зі сторонніми додатками) і сховищем локальних даних (Realm).

Таким чином, портування на iOS виявилося найбільш простий і тривіальної завданням завдяки хорошій сумісності Objective C та C++. Всі вбудовується без проблем, працює дуже швидко, це зручна платформа для налагодження нового функціоналу.

З Android ситуація трохи гірша, оскільки там доводиться взаємодіяти з віртуальною Java-машиною, що впливає на швидкість роботи: низька швидкість передачі даних між бібліотекою і додатком. Але для наших потреб це не критично.

Для веб-версії використовується фреймворк PHP-CPP. Вибір був обумовлений зручністю, наявністю більш-менш повної документації і підтримкою саме C++, а не C. До недоліків відносимо проблеми з налагодженням: дивитися логи – не самий зручний спосіб, а інших офіційний сайт не пропонує.

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

І ми бачимо, що це добре!

Подивитися, як це працює, можна, завантаживши мобільний додаток Aword для iOS або Android. Веб-версія буде доступна пізніше.

Нагадуємо, що у нас як і раніше багато хорошою і цікавою роботи для талановитих фахівців.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.