Construir aplicaciones de macOS con Flutter
Consideraciones específicas de la plataforma para compilar para macOS con Flutter.
Esta página analiza las consideraciones únicas al compilar aplicaciones macOS con Flutter, incluyendo la integración con el shell y la distribución de aplicaciones macOS a través de la Apple Store.
Integración con la apariencia de macOS
#Si bien puedes usar cualquier estilo visual o tema que elijas para construir una app de macOS, es posible que desees adaptar tu app para alinearla más completamente con la apariencia de macOS. Flutter incluye el conjunto de Widgets Cupertino, que proporciona un conjunto de Widgets para el lenguaje de diseño actual de iOS. Muchos de estos Widgets, incluyendo sliders, switches y controles segmentados, también son apropiados para su uso en macOS.
Como alternativa, puede que el paquete macos_ui
se adapte bien a tus necesidades.
Este paquete proporciona widgets y temas que
implementan el lenguaje de diseño de macOS,
incluyendo un marco y scaffold MacosWindow,
barras de herramientas, botones desplegables y
emergentes, y diálogos modales.
Compilación de aplicaciones macOS
#Para distribuir tu aplicación macOS, puedes
distribuirla a través de la macOS App Store,
o puedes distribuir el archivo .app en sí,
tal vez desde tu propio sitio web.
Debes notarizar tu aplicación macOS antes de
distribuirla fuera de la macOS App Store.
El primer paso en ambos procesos mencionados anteriormente
consiste en trabajar con tu aplicación dentro de Xcode.
Para poder compilar tu aplicación desde
Xcode, primero debes compilar la aplicación para producción
utilizando el comando flutter build y luego abrir la
aplicación Runner de macOS de Flutter.
flutter build macos
open macos/Runner.xcworkspace
Una vez dentro de Xcode, sigue la documentación de Apple sobre cómo notarizar aplicaciones de macOS o sobre cómo distribuir una aplicación a través de la App Store. También debes leer la sección de soporte específico de macOS a continuación para comprender cómo los entitlements, el App Sandbox y el Hardened Runtime afectan a tu aplicación distribuible.
Compilar y publicar una aplicación macOS proporciona un recorrido paso a paso más detallado sobre cómo publicar una aplicación de Flutter en la App Store.
Entitlements y el App Sandbox
#Las compilaciones de macOS están configuradas por defecto para estar firmadas y en un entorno seguro con App Sandbox. Esto significa que si deseas otorgar capacidades o servicios específicos a tu aplicación de macOS, como los siguientes:
- Acceso a internet
- Capturar películas e imágenes desde la cámara integrada
- Acceso a archivos
Entonces debes configurar entitlements específicos en Xcode. La siguiente sección te explica cómo hacerlo.
Configuración de entitlements
#La gestión de la configuración del sandbox se realiza en los
archivos macos/Runner/*.entitlements. Al editar
estos archivos, no debes eliminar las excepciones originales de
Runner-DebugProfile.entitlements (que admiten
conexiones de red entrantes y JIT),
ya que son necesarias para que los modos debug y profile
funcionen correctamente.
Si estás acostumbrado a gestionar archivos de entitlements a través de la interfaz de usuario de capacidades de Xcode, ten en cuenta que el editor de capacidades actualiza solo uno de los dos archivos o, en algunos casos, crea un archivo de entitlements completamente nuevo y cambia el proyecto para usarlo en todas las configuraciones. Ambos escenarios causan problemas. Recomendamos que edites los archivos directamente. A menos que tengas una razón muy específica, siempre debes realizar cambios idénticos en ambos archivos.
Si mantienes habilitado el App Sandbox (lo cual es necesario si
planeas distribuir tu aplicación en la App Store),
deberás gestionar los entitlements de tu aplicación
al añadir ciertos plugins u otra funcionalidad nativa.
Por ejemplo, el uso del plugin file_chooser
requiere añadir el entitlement
com.apple.security.files.user-selected.read-only o
com.apple.security.files.user-selected.read-write.
Otro entitlement común es
com.apple.security.network.client,
que debes añadir si realizas alguna solicitud de red.
Sin el entitlement com.apple.security.network.client,
por ejemplo, las solicitudes de red fallarán con un mensaje como:
flutter: SocketException: Connection failed
(OS Error: Operation not permitted, errno = 1),
address = example.com, port = 443
Para obtener más información sobre estos temas, consulta App Sandbox y Entitlements en el sitio de Apple Developer.
Hardened Runtime
#Si eliges distribuir tu aplicación fuera de la App Store, debes notarizar tu aplicación para garantizar la compatibilidad con macOS. Esto requiere habilitar la opción Hardened Runtime. Una vez habilitada, necesitarás un certificado de firma válido para compilar.
Por defecto, el archivo de entitlements permite JIT para
compilaciones debug pero, al igual que con el App Sandbox,
es posible que debas gestionar otros entitlements.
Si tienes habilitados tanto el App Sandbox como el Hardened
Runtime, es posible que debas añadir múltiples
entitlements para el mismo recurso.
Por ejemplo, el acceso al micrófono requeriría tanto
com.apple.security.device.audio-input (para Hardened Runtime)
como com.apple.security.device.microphone (para App Sandbox).
Para obtener más información sobre este tema, consulta Hardened Runtime en el sitio de Apple Developer.
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.