Настройка мобильной разработки

Мобильная разработка в Quasar базируется на использовании платформы Apache Cordova или Capacitor. В современных проектах предпочтение чаще отдается Capacitor из-за более современной архитектуры и лучшей интеграции с нативными возможностями устройств.

Перед началом необходимо установить следующие инструменты:

  • Node.js (рекомендуется LTS-версия)
  • npm или yarn
  • Quasar CLI
  • Android Studio (для Android)
  • Xcode (для iOS, только на macOS)

Установка Quasar CLI:

npm install -g @quasar/cli

Проверка установки:

quasar -v

Создание проекта:

quasar create my-app
cd my-app

Подключение режима мобильной сборки

Quasar поддерживает два режима:

  • cordova
  • capacitor

Добавление режима Capacitor:

quasar mode add capacitor

После выполнения команды структура проекта дополняется папкой:

/src-capacitor

Инициализация мобильной платформы

Инициализация проекта Capacitor:

quasar build -m capacitor -T android

или для iOS:

quasar build -m capacitor -T ios

После этого создается нативный проект внутри:

/src-capacitor/android
/src-capacitor/ios

Запуск проекта на эмуляторе или устройстве

Для Android:

quasar dev -m capacitor -T android

Для iOS:

quasar dev -m capacitor -T ios

При первом запуске система предложит открыть проект в Android Studio или Xcode.


Структура проекта Capacitor

Основные директории:

  • src/ — основной код приложения (Vue + Quasar)
  • src-capacitor/ — нативная часть

Внутри src-capacitor:

  • android/ — Android-проект
  • ios/ — iOS-проект
  • capacitor.config.json — конфигурация

Конфигурация Capacitor

Файл:

src-capacitor/capacitor.config.json

Пример:

{
  "appId": "com.example.app",
  "appName": "My App",
  "webDir": "www",
  "bundledWebRuntime": false
}

Ключевые параметры:

  • appId — уникальный идентификатор (используется в Google Play / App Store)
  • appName — отображаемое имя
  • webDir — папка со сборкой Quasar (/dist автоматически копируется)

Сборка приложения

Сборка frontend-части:

quasar build -m capacitor -T android

После сборки происходит:

  1. Генерация production-версии приложения
  2. Копирование файлов в src-capacitor/www
  3. Синхронизация с нативным проектом

Синхронизация проекта

При изменениях в коде:

npx cap sync

или через Quasar:

quasar build -m capacitor -T android

Синхронизация обновляет:

  • плагины
  • ресурсы
  • веб-часть

Работа с нативными плагинами

Capacitor предоставляет доступ к функциям устройства:

  • камера
  • геолокация
  • файловая система
  • уведомления

Установка плагина:

npm install @capacitor/camera
npx cap sync

Использование в коде:

import { Camera, CameraResultType } from '@capacitor/camera'

const image = await Camera.getPhoto({
  quality: 90,
  resultType: CameraResultType.Uri
})

Настройка разрешений

Для Android:

Файл:

android/app/src/main/AndroidManifest.xml

Пример:

<uses-permission android:name="android.permission.CAMERA" />

Для iOS:

Файл:

ios/App/App/Info.plist

Пример:

<key>NSCameraUsageDescription</key>
<string>Приложению нужен доступ к камере</string>

Работа с ресурсами приложения

Иконки и splash screen:

npm install @capacitor/assets
npx capacitor-assets generate

Ресурсы размещаются в:

/src-capacitor/resources/

Отладка мобильного приложения

Android

  • Использование Logcat в Android Studio
  • Отладка через Chrome DevTools:
chrome://inspect

iOS

  • Safari Web Inspector
  • Xcode Debug Console

Работа с переменными окружения

Quasar поддерживает .env файлы:

.env
.env.production
.env.android

Использование:

process.env.API_URL

Особенности мобильной разработки в Quasar

Ограничения WebView:

  • отсутствует полноценный доступ к DOM API браузера
  • производительность ниже, чем у нативных приложений

Оптимизация:

  • минимизация DOM-операций
  • использование lazy loading
  • оптимизация изображений

Обработка платформенных различий

Quasar предоставляет API:

import { Platform } from 'quasar'

if (Platform.is.android) {
  // Android-specific logic
}

if (Platform.is.ios) {
  // iOS-specific logic
}

Управление статус-баром

Пример настройки:

import { StatusBar } from '@capacitor/status-bar'

StatusBar.setBackgroundColor({ color: '#ffffff' })

Обработка кнопки “Назад” (Android)

import { App } from '@capacitor/app'

App.addListener('backButton', ({ canGoBack }) => {
  if (!canGoBack) {
    App.exitApp()
  }
})

Использование офлайн-режима

Подходы:

  • Service Workers (PWA-логика)
  • локальное хранилище (IndexedDB, LocalStorage)
  • кеширование API-запросов

Сборка APK / AAB

Через Android Studio:

  1. Build → Generate Signed Bundle / APK

  2. Выбор:

    • APK (для тестирования)
    • AAB (для публикации)

Сборка для App Store

Через Xcode:

  1. Product → Archive
  2. Upload to App Store Connect

Интеграция с API устройства

Популярные возможности:

  • вибрация
  • биометрия
  • push-уведомления
  • сенсоры

Пример вибрации:

import { Haptics } from '@capacitor/haptics'

Haptics.impact()

Управление обновлениями

Варианты:

  • пересборка и публикация в магазине
  • использование OTA-обновлений (например, через сторонние сервисы)

Тестирование

Типы тестирования:

  • эмуляторы (Android Emulator, iOS Simulator)
  • реальные устройства
  • CI/CD сборки

Интеграция с CI/CD

Пример инструментов:

  • GitHub Actions
  • GitLab CI
  • Bitrise

Основные шаги:

  1. Установка зависимостей
  2. Сборка Quasar
  3. Синхронизация Capacitor
  4. Сборка нативного приложения

Безопасность мобильного приложения

Ключевые аспекты:

  • защита API ключей
  • HTTPS обязательен
  • обфускация кода
  • проверка root/jailbreak

Производительность

Методы улучшения:

  • уменьшение размера bundle
  • отключение ненужных плагинов
  • использование quasar build --modern

Работа с push-уведомлениями

Установка:

npm install @capacitor/push-notifications
npx cap sync

Регистрация:

import { PushNotifications } from '@capacitor/push-notifications'

PushNotifications.requestPermissions().then(result => {
  if (result.receive === 'granted') {
    PushNotifications.register()
  }
})

Логирование и аналитика

Инструменты:

  • Firebase Analytics
  • Sentry
  • собственные системы логирования

Обновление зависимостей

npm upd ate
npx cap sync

Поддержка разных экранов

Использование адаптивности Quasar:

  • Flex Grid
  • Breakpoints
  • Responsive classes

Использование нативного UI

Возможные подходы:

  • полностью WebView (стандарт Quasar)
  • гибрид: Web + нативные плагины
  • интеграция сторонних SDK

Управление жизненным циклом приложения

import { App } from '@capacitor/app'

App.addListener('appStateChange', ({ isActive }) => {
  if (isActive) {
    // приложение активно
  } else {
    // свернуто
  }
})

Работа с хранилищем устройства

import { Preferences } from '@capacitor/preferences'

await Preferences.se t({
  key: 'token',
  value: '123'
})

const { value } = await Preferences.get({ key: 'token' })

Использование файловой системы

import { Filesystem, Directory } from '@capacitor/filesystem'

await Filesystem.writeFile({
  path: 'file.txt',
  data: 'Hello',
  directory: Directory.Documents
})

Особенности публикации

Android:

  • требуется подпись приложения
  • обязательный AAB формат

iOS:

  • строгая модерация
  • обязательные разрешения и описания

Типичные ошибки

  • забыта синхронизация (cap sync)
  • неверный appId
  • отсутствие разрешений
  • несовместимые плагины

Практика организации проекта

Рекомендуемая структура:

  • boot/ — инициализация плагинов
  • services/ — работа с API
  • stores/ — состояние (Pinia)
  • pages/ — экраны

Расширение функциональности

Подключение сторонних SDK:

  • карты
  • платежные системы
  • авторизация (Google, Apple)

Управление версиями

Обновление версии:

  • Android: versionCode, versionName
  • iOS: CFBundleShortVersionString

Поддержка устройств

Учитываются:

  • разные DPI
  • размеры экранов
  • версии ОС

Использование TypeScript

Quasar поддерживает TypeScript:

quasar create my-app --ts

Преимущества:

  • строгая типизация
  • улучшенная поддержка IDE
  • снижение количества ошибок

Отдельные сборки для платформ

Возможность различать код:

if (process.env.MODE === 'capacitor') {
  // мобильная логика
}

Интеграция с нативным кодом

При необходимости:

  • редактирование Java/Kotlin (Android)
  • редактирование Swift/Objective-C (iOS)

Поддержка обновлений Quasar

quasar upgrade

Важно регулярно синхронизировать:

npx cap sync

Контроль размера приложения

Методы:

  • tree-shaking
  • lazy loading компонентов
  • удаление неиспользуемых зависимостей

Использование DevTools

  • Vue DevTools (ограниченно)
  • Chrome DevTools
  • встроенные инструменты IDE

Управление ошибками

Глобальный обработчик:

app.config.errorHandler = (err) => {
  console.error(err)
}

Работа с сетью

Отслеживание состояния:

import { Network } from '@capacitor/network'

Network.addListener('networkStatusChange', status => {
  console.log(status.connected)
})

Расширенные возможности

  • deep linking
  • background tasks
  • интеграция с Bluetooth
  • работа с NFC

Архитектурные рекомендации

  • разделение UI и логики
  • использование composables
  • централизованное управление состоянием
  • минимизация прямого доступа к нативным API