Ahora te diré cómo es el proceso de desarrollo de Unity en una pequeña empresa de juegos y cómo lo mejoramos y automatizamos. Aún así, 2020 está en el patio, es suficiente para conducir con el mouse ...
Sobre el mouse, esto no es una broma. Hasta hace poco, el proceso de probar y desarrollar juegos con nosotros se parecía a esto:
Android
- Los desarrolladores escriben código
- Ir a la versión de Android
- Subidas a una carpeta compartida en Google Drive
- El probador descarga la última compilación
- Prueba y lanza tareas en Redmine
- Ir a: Paso 1
La versión de iOS es un poco más complicada:
iOS
- Los desarrolladores escriben código
- Ir al proyecto Xcode
- La secuencia de comandos Postbuild agrega localización, SDK y más
- Proyecto compilado
- Archivado
- Exportado a un archivo IPA (todo esto no se hace muy rápido, jaja)
- Después de eso, puede cargar el IPA en la carpeta compartida en Google Drive
- O cargue en TestFlight, donde puede esperar un par de días
- El probador descarga la última IPA
- Conecta el dispositivo, instala la aplicación
- Prueba y lanza tareas en Redmine
- Ir a: Paso 1
Aquí hay tanta tristeza. Y si para Android, el proceso sigue siendo aceptable de alguna manera (no), entonces para iOS: todo es muy largo, inconveniente e incorrecto. Además, la mayoría de las operaciones las realiza manualmente el desarrollador (aquí sobre el mouse) y el tiempo que puede dedicar al desarrollo lleva esperar la compilación, la exportación del proyecto Xcode, etc. También es necesario tener en cuenta que todos están en la misma oficina, es decir Puedes venir a preguntar / decir algo antes de comenzar todo este proceso infernal.
Pero, en general, de alguna manera funciona y lanza juegos :)
Y aquí recientemente, con la presentación de
Leopotam , otro amante de la
construcción de bicicletas y la optimización de todo, decidí automatizar este proceso. El resultado es un script BASH que puede:
- Descargue los últimos cambios del repositorio GIT
- Ejecutar pruebas
- Desarrolle APK para Android, en desarrollo y lanzamiento
- Cree un proyecto para iOS Xcode, en desarrollo y lanzamiento
- Compilarlo
- Archivar y exportar IPA
- Generar un manifiesto para ello.
- Generar páginas HTML para instalar
- Cargue todo esto al servidor usando sshpass
- Ponga todos los registros en una carpeta separada
- Enviar una notificación de telegrama
Y todo esto con solo tocar un botón. Sin iniciar Unity y Xcode. De alguna manera más divertido, ¿eh?

Ahora, cuando se completa el ensamblaje, el probador recibe una notificación en Telegram con dos enlaces a las versiones de Android e iOS. Queda por recorrerlos e instalar la aplicación directamente desde el dispositivo. También funciona en iOS, y se genera un manifiesto especial para esto.
En realidad, esta es mi primera experiencia en programación BASH, así que no sé cómo es, en Feng Shui o no, pero funciona correctamente. En cualquier caso, el script se actualizará y modificará para satisfacer las necesidades de los proyectos. A continuación hay algunos puntos destacados sobre cómo hacer esto:
Cómo comenzar a construir un proyecto de Unity para una plataforma específica
El
manual describe todos los argumentos que se pueden usar para la compilación. Ejecute el APK de compilación:
$UNITY -batchmode -quit -projectPath "$PATH" -executeMethod Game.BuildActions.AndroidDevelopment -buildTarget android -logFile "$LOGS_PATH/android_development.log"
Aquí
-buildTarget simplemente establece la plataforma, y -
executeMethod llama a una función en el proyecto Unity, que inicia la compilación con los parámetros dados, se parece a esto:
static void AndroidDevelopment () { PlayerSettings.SetScriptingBackend (BuildTargetGroup.Android, ScriptingImplementation.IL2CPP); PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, "DEV"); EditorUserBuildSettings.SwitchActiveBuildTarget (BuildTargetGroup.Android, BuildTarget.Android); EditorUserBuildSettings.development = true; EditorUserBuildSettings.androidETC2Fallback = AndroidETC2Fallback.Quality32Bit; BuildReport report = BuildPipeline.BuildPlayer (GetScenes (), ANDROID_DEVELOPMENT_FILE, BuildTarget.Android, BuildOptions.None); int code = (report.summary.result == BuildResult.Succeeded) ? 0 : 1; EditorApplication.Exit (code); }
Aquí puede establecer sus propios parámetros para compilación, condición, etc. El resultado se devuelve al script BASH.
Cómo compilar y exportar proyecto Xcode
Después de que Unity haya emitido con éxito el proyecto Xcode, debe compilarse, archivarse y exportarse a un archivo IPA, esto se hace de la siguiente manera:
xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -quiet > "$LOGS_PATH/ios_build_release.log" 2>&1
xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -scheme "Unity-iPhone" archive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -quiet > "$LOGS_PATH/ios_archive_release.log" 2>&1
xcodebuild -exportArchive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -exportOptionsPlist "$IOS_RELEASE/options.plist" -exportPath $IOS_RELEASE -allowProvisioningUpdates -quiet > "$LOGS_PATH/ios_export_release.log" 2>&1
Aquí
options.plist es un manifiesto especial que indica el método de exportación, TeamID y más. Todos los parámetros disponibles se pueden ver con el comando:
xcodebuild -help
Con todas estas operaciones, se especifica el
Unity-iPhone.xcodeproj estándar que genera Unity. Si tiene
xcworkspace , entonces debe verificar su disponibilidad y uso.
Cómo enviar un mensaje a un Telegram desde un script BASH
Debe encontrar el bot
BotFather , escribirle / start o / newbot, completar los campos y recibir un mensaje con un token y un enlace a la documentación. Para enviar un mensaje utilizando el bot, debe ejecutar el siguiente comando:
curl $BOT_PROXY https://api.telegram.org/bot$BOT_TOKEN/sendMessage -m 60 -s -X POST -d chat_id=$CHAT_ID -d text="$1" > "$LOGS_PATH/bot.log" 2>&1
Aquí
CHAT_ID es el identificador de chat donde enviar mensajes. Por ejemplo, puede agregar el bot al grupo donde están sentados los evaluadores, otorgarle el derecho de leer mensajes. Después de eso ejecutar:
https://api.telegram.org/bot[BOT_TOKEN]/getUpdates
Y obtenga la identificación del grupo y los miembros que escribieron algo. Después de eso, indique la identificación del grupo o miembro específico a quien enviar. Cómo encontrar y configurar el envío a través de un proxy, creo que no es un problema.
Otras funciones, plantillas de manifiesto de parches y HTML usando
sed y cargan los archivos necesarios al servidor usando
sshpass .
Parámetros que se pueden cambiar rápidamente:
Demo y fuente
Por supuesto, todo esto podría hacerse a través del mismo CI / CD de Gitlab, ya hay guiones listos para esto, ejecutar corredores, compilar y probar. En resumen, use infraestructura y mecanismos listos para usar. Pero necesita pasar a él y también configurarlo. Quizás lleguemos a esto, mientras que es mucho mejor de lo que era. Además, todo el guión se escribió lo suficientemente rápido.
¡Toda la automatización en 2020! Los robots inyectan, no un hombre.