Я пытаюсь сделать одно из моих приложений QML «автономным» — это означает, что я хочу, чтобы пользователи могли использовать приложение, когда оно не подключено к Интернету.
Основная проблема, которую я вижу, заключается в том, что я в значительной степени извлекаю файл QML с пользовательским интерфейсом с одного из моих HTTP-серверов, что позволяет мне держать большую часть кода в пределах досягаемости и легко обновляться.
Мой «основной файл QML», очевидно, имеет внешние зависимости, такие как шрифты (используя FontLoader
), изображения (используя Image
) и другие компоненты QML (используя Loader
).
AFAIK все эти ресурсы загружаются через сетевой стек Qt, поэтому мне интересно, что мне нужно сделать, чтобы все ресурсы были доступны в автономном режиме без необходимости загружать их все вручную на устройство.
Можно ли сделать это, настроив существующий / реализующий мой кеш на уровне Qt / C ++, или я совершенно не на своем пути?
Спасибо!
Простое решение состоит в том, чтобы инвертировать подход: включить базовые файлы в исполняемый файл / пакет вашего приложения. При первом запуске скопируйте их в каталог данных приложения. Затем, когда у вас есть доступ к вашему серверу, вы можете обновить каталог данных.
Все модификации каталога данных должны быть атомарными — они должны либо полностью завершиться успешно, либо полностью потерпеть неудачу, не оставляя каталог данных в непригодном для использования состоянии.
Как правило, вы создаете новую временную папку данных, копируете / жестко привязываете туда файлы и загружаете то, что нужно, и только после того, как все проверено, вы меняете старый каталог данных на новый.
Предоставить вашему приложению доступ к QML и аналогичным ресурсам напрямую через Интернет практически невозможно, если вы не настаиваете на явном управлении версиями всех ресурсов и указании номеров версий в URL.
Предположим, ваше приложение было запущено и загрузило некоторые ресурсы. Нет никаких гарантий, что пользователь прошел все экраны QML — поэтому будут загружены только некоторые ресурсы. QML также не дает никаких гарантий относительно того, как часто и когда будут перезагружаться ресурсы: в конце концов, он поддерживает свои собственные кэши. Когда-нибудь вы обновите содержимое на сервере. После того, как вы внесете изменения, пользователь продолжит исследовать больше приложений, но теперь приложение, которое он испытывает, является франкенштейном более старых и новых частей, без каких-либо гарантий, что эти части все еще предназначены для совместной работы. Это плохая идея.