Ответ
Зависит от типа обновления. Различают два слоя гибридного приложения:
1. Нативный слой (требует ревью)
Что включает:
- Изменения в
config.xml/AndroidManifest.xml/Info.plist - Обновление Cordova/Ionic/Capacitor версий
- Добавление/обновление нативных плагинов
- Изменение разрешений (камера, геолокация, etc.)
Процесс:
Разработчик → Сборка → Загрузка в магазин → Ревью (1-3 дня) → Публикация
2. Веб-слой (может обновляться без ревью)
Что включает:
- HTML, CSS, JavaScript файлы
- Статический контент
- Бизнес-логика на фронтенде
Стратегии обновления:
A. Remote Content (без ревью)
// Проверка обновлений веб-контента
async function checkForWebUpdates() {
const response = await fetch('https://cdn.example.com/manifest.json');
const remoteManifest = await response.json();
if (remoteManifest.version > localStorage.appVersion) {
// Загрузка новых ресурсов
await updateWebResources(remoteManifest.files);
// Применение обновления
localStorage.appVersion = remoteManifest.version;
location.reload();
}
}
B. Code Push (Microsoft, Ionic Deploy)
- Обновление JavaScript bundle на лету
- Поддержка отката версий
- A/B тестирование функционала
Ограничения магазинов:
Apple App Store Guidelines 2.5.2:
"Приложения не должны загружать код из внешних источников, который меняет основную функциональность"
Что запрещено:
- Изменение основной цели приложения
- Добавление новых бизнес-моделей
- Обход встроенных покупок
- Нарушение политик конфиденциальности
Google Play более лоялен, но также имеет ограничения.
Рекомендации по тестированию:
// Тестирование механизма обновлений
describe('App Update Flow', () => {
it('should detect new web version', () => {
cy.intercept('GET', '/manifest.json', {
version: '2.0.0',
files: ['app.js', 'styles.css']
});
cy.get('.update-available').should('be.visible');
});
it('should fallback on update failure', () => {
cy.intercept('GET', '/app.js', { statusCode: 500 });
cy.get('.update-btn').click();
cy.get('.error-message').should('contain', 'Failed to update');
});
});
Best practices:
- Чёткое разделение нативного и веб-кода
- Резервные копии предыдущих версий
- Постепенный rollout обновлений
- Мониторинг ошибок после деплоя