Мобильная разработка в Quasar базируется на использовании платформы Apache Cordova или Capacitor. В современных проектах предпочтение чаще отдается Capacitor из-за более современной архитектуры и лучшей интеграции с нативными возможностями устройств.
Перед началом необходимо установить следующие инструменты:
Установка Quasar CLI:
npm install -g @quasar/cli
Проверка установки:
quasar -v
Создание проекта:
quasar create my-app
cd my-app
Quasar поддерживает два режима:
cordovacapacitorДобавление режима 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.
Основные директории:
src/ — основной код приложения (Vue + Quasar)src-capacitor/ — нативная частьВнутри src-capacitor:
android/ — Android-проектios/ — iOS-проектcapacitor.config.json — конфигурацияФайл:
src-capacitor/capacitor.config.json
Пример:
{
"appId": "com.example.app",
"appName": "My App",
"webDir": "www",
"bundledWebRuntime": false
}
Ключевые параметры:
/dist автоматически копируется)Сборка frontend-части:
quasar build -m capacitor -T android
После сборки происходит:
src-capacitor/wwwПри изменениях в коде:
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/
chrome://inspect
Quasar поддерживает .env файлы:
.env
.env.production
.env.android
Использование:
process.env.API_URL
Ограничения WebView:
Оптимизация:
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' })
import { App } from '@capacitor/app'
App.addListener('backButton', ({ canGoBack }) => {
if (!canGoBack) {
App.exitApp()
}
})
Подходы:
Через Android Studio:
Build → Generate Signed Bundle / APK
Выбор:
Через Xcode:
Популярные возможности:
Пример вибрации:
import { Haptics } from '@capacitor/haptics'
Haptics.impact()
Варианты:
Типы тестирования:
Пример инструментов:
Основные шаги:
Ключевые аспекты:
Методы улучшения:
quasar build --modernУстановка:
npm install @capacitor/push-notifications
npx cap sync
Регистрация:
import { PushNotifications } from '@capacitor/push-notifications'
PushNotifications.requestPermissions().then(result => {
if (result.receive === 'granted') {
PushNotifications.register()
}
})
Инструменты:
npm upd ate
npx cap sync
Использование адаптивности Quasar:
Возможные подходы:
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:
iOS:
cap sync)appIdРекомендуемая структура:
boot/ — инициализация плагиновservices/ — работа с APIstores/ — состояние (Pinia)pages/ — экраныПодключение сторонних SDK:
Обновление версии:
versionCode, versionNameCFBundleShortVersionStringУчитываются:
Quasar поддерживает TypeScript:
quasar create my-app --ts
Преимущества:
Возможность различать код:
if (process.env.MODE === 'capacitor') {
// мобильная логика
}
При необходимости:
quasar upgrade
Важно регулярно синхронизировать:
npx cap sync
Методы:
Глобальный обработчик:
app.config.errorHandler = (err) => {
console.error(err)
}
Отслеживание состояния:
import { Network } from '@capacitor/network'
Network.addListener('networkStatusChange', status => {
console.log(status.connected)
})