El .zip de un proyecto Flutter
Qué debe contener tu archivo Flutter, qué descarga Releasely por ti durante la compilación y qué puedes dejar fuera.
En resumen: comprime en zip la carpeta de tu proyecto tal y como la creó Flutter, dejando dentro tus archivos de configuración y tus posibles dependencias privadas, y sin las carpetas de compilación ni las cachés.
La comprobación rápida
Abre tu .zip: si ves pubspec.yaml directamente en la raíz, el archivo está bien formado. Si
está enterrado dentro de una o varias carpetas, vuelve a comprimir el contenido de la carpeta
del proyecto en lugar de la carpeta en sí.
Lo que debe contener el archivo
pubspec.yaml: la ficha de identidad del proyecto, en la raíz del archivo.pubspec.lock: recomendado, ya que fija las versiones exactas de tus dependencias, para una compilación idéntica a la que pruebas en local.lib/: tu código Dart.android/eios/: las carpetas de plataforma generadas por Flutter (iconos, configuración nativa, permisos…). La compilación las necesita, aunque nunca las hayas tocado.- Tus recursos (assets): imágenes, tipografías y otros archivos declarados en
pubspec.yaml. - Los archivos de configuración que usa la app, si existen:
google-services.json(Firebase Android),GoogleService-Info.plist(Firebase iOS), archivos.envleídos durante la compilación, etc.
Un archivo bien formado tiene este aspecto:
mi-app.zip
├── pubspec.yaml
├── pubspec.lock
├── lib/
├── android/
├── ios/
├── assets/
└── packages/ ← tus posibles paquetes locales (ver más abajo)Dependencias locales y privadas: hay que incluirlas
Solo compilamos lo que está dentro del archivo. La máquina de compilación no tiene acceso ni a tu ordenador ni a tus repositorios git privados. Por lo tanto:
- Las dependencias
path:(paquetes locales) deben estar incluidas en el.zip, con rutas relativas que sigan siendo válidas dentro del archivo. Si tupubspec.yamlapunta a../mi-paquete, esa ruta se sale del archivo: mueve el paquete dentro del proyecto (por ejemplo,packages/mi-paquete) y actualiza la ruta. - Las dependencias que provienen de un git privado o de un registro privado deben copiarse
dentro del proyecto y referenciarse con
path:, ya que la compilación no puede conectarse a ellas.
Lo que Releasely descarga por ti
No hace falta incluirlas en el archivo, ya que se recuperan automáticamente durante la compilación:
- los paquetes de pub.dev (
flutter pub getse ejecuta por ti); - los CocoaPods de iOS (
pod installse ejecuta en el Mac de compilación); - el propio SDK de Flutter.
Lo que puedes excluir
Estas carpetas se regeneran durante la compilación; incluirlas solo hace más pesado el envío:
build/y.dart_tool/: los artefactos y las cachés de compilación;.git/: el historial de tu repositorio;ios/Pods/yandroid/.gradle/: las cachés de las dependencias nativas;.idea/,*.iml,.vscode/: la configuración de tu editor.
En macOS o Linux, este comando crea un archivo limpio desde la raíz del proyecto:
zip -r mi-app.zip . -x "build/*" ".dart_tool/*" ".git/*" "ios/Pods/*" "android/.gradle/*" ".idea/*" ".vscode/*"La carpeta Pods suele ser la más pesada
En un proyecto iOS, ios/Pods/ pesa con frecuencia varios cientos de MB por sí sola. Eliminarla
(o excluirla del .zip) es lo que más reduce el tamaño del archivo. Sin ningún riesgo:
pod install la regenera automáticamente en el Mac de compilación.
Firma: nunca dentro del .zip
Los secretos se facilitan en Credentials
No pongas ni keystore, ni certificado, ni clave API dentro del archivo. La firma de Android (keystore, si tu app lo necesita) y la conexión con la App Store se configuran en la pantalla Credentials de tu proyecto; Releasely se encarga de firmar las compilaciones.
Tamaño y número de compilación
- 2 GB como máximo por archivo, de sobra para un proyecto sin carpetas de compilación.
- El número de compilación se incrementa automáticamente a partir del último build conocido; un campo en la pantalla Upload permite forzarlo si necesitas alcanzar un número que ya se ha usado en las tiendas.
¿Y ahora qué?
Una vez enviado el archivo, Releasely lanza la compilación en la nube (iOS o Android, según tu proyecto) y el binario resultante se une automáticamente a tu próxima versión.