Saltar al contenido

Los recursos que viajan dentro

Ficheros que tu aplicación necesita y que deben estar en el instalador: dónde se declaran, cómo se resuelven sus rutas, y por qué hay dos formas distintas.

Las tres clases de recurso

Incrustar o empaquetar

La regla práctica: por debajo de unos cientos de kilobytes, incrustar; por encima, empaquetar.

Resolver rutas sin escribirlas dos veces

El problema característico de este nivel: en desarrollo el recurso está en tu directorio del proyecto; en producción está dentro del paquete, en un sitio distinto en cada sistema.

La respuesta es no escribir ninguna de las dos:

Rust
// Tauri resuelve la ruta correcta en los dos modos y en las tres plataformaslet ruta = app.path().resolve("datos/referencia.db", BaseDirectory::Resource)?;

Y en la configuración se declara una vez:

JSON
{ "bundle": { "resources": ["datos/referencia.db", "plantillas/*"] } }

El error que esto evita es el clásico: una ruta relativa que funciona porque en desarrollo el directorio de trabajo es la raíz del proyecto, y que en producción apunta a cualquier sitio — el directorio de trabajo de una aplicación lanzada con doble clic no es el que crees, y difiere entre sistemas.

Recursos que hay que copiar al disco

Un caso que aparece a menudo y tiene su patrón: un recurso empaquetado no se puede modificar —está dentro del paquete, que puede ser de solo lectura, y modificarlo rompería la firma, nivel 39.4—.

Si tu aplicación necesita una versión escribible —una base de datos de partida que luego el usuario modifica, unas plantillas que puede editar— el patrón es:

El paso 3 es el que se olvida y produce el fallo de «la plantilla nueva no aparece»: la versión nueva trae plantillas actualizadas, el usuario ya tenía las viejas copiadas, y la aplicación usa las suyas para siempre.