Compilar y lanzar una aplicación de Linux en la Snap Store
Cómo prepararse para y lanzar una aplicación de Linux en la Snap store.
Durante un ciclo de desarrollo típico,
pruebas una aplicación usando flutter run en la línea de comandos,
o usando las opciones Run y Debug
en tu IDE. Por defecto,
Flutter compila una versión de depuración de tu aplicación.
Cuando estés listo para preparar una versión de lanzamiento de tu aplicación, por ejemplo para publicar en la Snap Store o un canal alternativo, esta página puede ayudarte.
Requisitos previos
#Para compilar y publicar en la Snap Store, necesitas los siguientes componentes:
- Sistema operativo Ubuntu, 18.04 LTS (o superior)
- Herramienta de línea de comandos Snapcraft
- Gestor de contenedores LXD
Configurar el entorno de compilación
#Sigue estas instrucciones para configurar tu entorno de compilación.
Instalar snapcraft
#En la línea de comandos, ejecuta lo siguiente:
sudo snap install snapcraft --classic
Instalar LXD
#Para instalar LXD, usa el siguiente comando:
sudo snap install lxd
LXD es requerido durante el proceso de compilación del snap. Una vez instalado, LXD necesita ser configurado para su uso. Las respuestas predeterminadas son adecuadas para la mayoría de los casos de uso.
sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, zfs, ceph) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty disk or partition? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=5GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, "auto" or "none") [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, "auto" or "none") [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
En la primera ejecución, es posible que LXD no pueda conectarse a su socket:
An error occurred when trying to communicate with the 'LXD'
provider: cannot connect to the LXD socket
('/var/snap/lxd/common/lxd/unix.socket').
Esto significa que debes agregar tu nombre de usuario al grupo LXD (lxd), por lo que debes cerrar sesión y luego volver a iniciar sesión:
sudo usermod -a -G lxd <your username>
Descripción general de snapcraft
#La herramienta snapcraft compila snaps basados en las instrucciones
listadas en un archivo snapcraft.yaml.
Para obtener una comprensión básica de snapcraft y sus
conceptos fundamentales, echa un vistazo a la documentación de Snap
y la Introducción a snapcraft.
En la parte inferior de esta página se listan enlaces e información
adicionales.
Ejemplo de snapcraft.yaml para Flutter
#Coloca el archivo YAML en tu proyecto de Flutter
bajo <raíz del proyecto>/snap/snapcraft.yaml.
(¡Y recuerda que los archivos YAML son sensibles a los espacios en blanco!)
Por ejemplo:
name: super-cool-app
version: 0.1.0
summary: Super Cool App
description: Super Cool App that does everything!
confinement: strict
base: core22
grade: stable
slots:
dbus-super-cool-app: # adjust accordingly to your app name
interface: dbus
bus: session
name: org.bar.super_cool_app # adjust accordingly to your app name and
apps:
super-cool-app:
command: super_cool_app
extensions: [gnome] # gnome includes the libraries required by flutter
plugs:
- network
slots:
- dbus-super-cool-app
parts:
super-cool-app:
source: .
plugin: flutter
flutter-target: lib/main.dart # The main entry-point file of the application
Las siguientes secciones explican las distintas partes del archivo YAML.
Metadatos
#Esta sección del archivo snapcraft.yaml define y
describe la aplicación. La versión del snap se
deriva (adopta) de la sección de compilación.
name: super-cool-app
version: 0.1.0
summary: Super Cool App
description: Super Cool App that does everything!
Grado, confinamiento y base
#Esta sección define cómo se compila el snap.
confinement: strict
base: core22
grade: stable
- Grado (Grade)
-
Especifica la calidad del snap; esto es relevante para el paso de publicación posterior.
- Confinamiento (Confinement)
-
Especifica qué nivel de acceso a los recursos del sistema tendrá el snap una vez instalado en el sistema del usuario final. El confinamiento estricto limita el acceso de la aplicación a recursos específicos (definidos por los plugs en la sección
app). - Base
-
Los snaps están diseñados para ser aplicaciones autónomas y, por lo tanto, requieren su propio sistema de archivos raíz principal privado conocido como
base. La palabra clavebaseespecifica la versión utilizada para proporcionar el conjunto mínimo de bibliotecas comunes, y se monta como el sistema de archivos raíz para la aplicación en tiempo de ejecución.
Aplicaciones (Apps)
#Esta sección define las aplicaciones que existen dentro del snap. Puede haber una o más aplicaciones por snap. Este ejemplo tiene una sola aplicación: super_cool_app.
apps:
super-cool-app:
command: super_cool_app
extensions: [gnome]
- Comando (Command)
-
Apunta al binario, relativo a la raíz del snap, y se ejecuta cuando se invoca el snap.
- Extensiones (Extensions)
-
Una lista de una o más extensiones. Las extensiones de Snapcraft son componentes reutilizables que pueden exponer conjuntos de bibliotecas y herramientas a un snap en tiempo de compilación y de ejecución, sin que el desarrollador necesite tener un conocimiento específico de los frameworks incluidos. La extensión
gnomeexpone las bibliotecas GTK 3 al snap de Flutter. Esto garantiza una menor huella y una mejor integración con el sistema. - Plugs (Conectores)
-
Una lista de uno o más plugs para interfaces del sistema. Estos son necesarios para proporcionar la funcionalidad requerida cuando los snaps están estrictamente confinados. Este snap de Flutter necesita acceso a la red.
- Interfaz DBus
-
La interfaz DBus proporciona una forma para que los snaps se comuniquen a través de DBus. El snap que proporciona el servicio DBus declara un slot con el nombre DBus conocido y qué bus utiliza. Los snaps que desean comunicarse con el servicio del snap proveedor declaran un plug para el snap proveedor. Ten en cuenta que se necesita una declaración de snap para que tu snap se entregue a través de la snap store y reclame este nombre DBus conocido (simplemente sube el snap a la tienda y solicita una revisión manual y un revisor le echará un vistazo).
Cuando se instala un snap proveedor, snapd generará una política de seguridad que le permitirá escuchar en el nombre DBus conocido en el bus especificado. Si se especifica el bus del sistema, snapd también generará una política de bus DBus que permite a 'root' poseer el nombre y a cualquier usuario comunicarse con el servicio. Los procesos que no son snaps pueden comunicarse con el snap proveedor siguiendo las comprobaciones de permisos tradicionales. Otros snaps (consumidores) solo pueden comunicarse con el snap proveedor conectando la interfaz de los snaps.
dbus-super-cool-app: # adjust accordingly to your app name
interface: dbus
bus: session
name: dev.site.super_cool_app
Partes (Parts)
#Esta sección define las fuentes requeridas para ensamblar el snap.
Las partes se pueden descargar y compilar automáticamente utilizando plugins. Al igual que las extensiones, snapcraft puede usar varios plugins (como Python, C, Java y Ruby) para ayudar en el proceso de compilación. Snapcraft también tiene algunos plugins especiales.
- Plugin nil
-
No realiza ninguna acción y el proceso de compilación real se maneja mediante una anulación manual.
- Plugin flutter
-
Proporciona las herramientas necesarias del SDK de Flutter para que puedas usarlo sin tener que descargar y configurar manualmente las herramientas de compilación.
parts:
super-cool-app:
source: .
plugin: flutter
flutter-target: lib/main.dart # The main entry-point file of the application
Archivo de escritorio e icono
#Los archivos de entrada de escritorio se utilizan para añadir una aplicación al menú del escritorio. Estos archivos especifican el nombre y el icono de tu aplicación, las categorías a las que pertenece, palabras clave de búsqueda relacionadas y más. Estos archivos tienen la extensión .desktop y siguen la versión 1.1 de la Especificación de Entrada de Escritorio XDG.
Ejemplo de super-cool-app.desktop para Flutter
#Coloca el archivo .desktop en tu proyecto de Flutter
bajo <raíz del proyecto>/snap/gui/super-cool-app.desktop.
Aviso: ¡el icono y el nombre del archivo .desktop deben ser los mismos que el nombre de tu aplicación en el archivo yaml!
Por ejemplo:
[Desktop Entry]
Name=Super Cool App
Comment=Super Cool App that does everything
Exec=super-cool-app
Icon=${SNAP}/meta/gui/super-cool-app.png # Replace name with your app name.
Terminal=false
Type=Application
Categories=Education; # Adjust accordingly your snap category.
Coloca tu icono con extensión .png en tu proyecto de Flutter
bajo <raíz del proyecto>/snap/gui/super-cool-app.png.
Compilar el snap
#Una vez que el archivo snapcraft.yaml esté completo,
ejecuta snapcraft de la siguiente manera desde el directorio raíz
del proyecto.
Para usar el backend de VM Multipass:
snapcraft
Para usar el backend de contenedor LXD:
snapcraft --use-lxd
Probar el snap
#Una vez que el snap esté compilado, tendrás un archivo <nombre>.snap
en el directorio raíz de tu proyecto.
$ sudo snap install ./super-cool-app_0.1.0_amd64.snap --dangerous
Publicar
#Ahora puedes publicar el snap. El proceso consta de lo siguiente:
- Crea una cuenta de desarrollador en snapcraft.io, si aún no lo has hecho.
-
Register the app's name. Registration can be done
either using the Snap Store Web UI portal, or from the
command line, as follows:
snapcraft login snapcraft register -
Release the app. After reading the next section
to learn about selecting a Snap Store channel,
push the snap to the store:
snapcraft upload --release=<channel> <file>.snap
Canales de la Snap Store
#La Snap Store utiliza canales para diferenciar entre las diferentes versiones de los snaps.
El comando snapcraft upload sube el archivo snap a
la tienda. Sin embargo, antes de ejecutar este comando,
debes conocer los diferentes canales de lanzamiento.
Cada canal consta de tres componentes:
- Track
-
Todos los snaps deben tener un track predeterminado llamado latest. Este es el track implícito a menos que se especifique lo contrario.
- Riesgo (Risk)
-
Define el estado de preparación de la aplicación. Los niveles de riesgo utilizados en la snap store son:
stable,candidate,betayedge. - Rama (Branch)
-
Permite la creación de secuencias de snaps de corta duración para probar correcciones de errores.
Revisión automática de la Snap Store
#La Snap Store ejecuta varias comprobaciones automáticas en tu snap. También puede haber una revisión manual, según cómo se haya compilado el snap y si hay problemas de seguridad específicos. Si las comprobaciones pasan sin errores, el snap estará disponible en la tienda.
Recursos adicionales de snapcraft
#Puedes aprender más en los siguientes enlaces en el sitio de snapcraft.io:
- Canales
- Variables de entorno
- Gestión de interfaces
- Variables de entorno de parts
- Publicar en la Snap Store
- Extensiones de snapcraft
- Plugins compatibles
Recursos adicionales de despliegue
#Una herramienta todo en uno de empaquetado y distribución de aplicaciones Flutter, que te brinda una solución única para satisfacer diversas necesidades de distribución.
Admite formatos de empaquetado populares como appimage, deb, pacman, rpm y más.
Herramientas de manifiesto Flatpak para la compilación fuera de línea de aplicaciones Flutter.
Soporta la preparación de Flatpak para su publicación en Flathub.
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.