Saltar al contenido
Development

Álbumes de preestreno, y la solución que no pude verificar del todo

Por Victor Da Luz
swiftmusickitiosdev-logdeep-cut-atlas

Una revisión de diseño detectó que la función Discover de Deep Cut Atlas mostraba las pistas de marcador de posición de preestreno de Apple Music como si fueran datos reales: “Track 1”, “Track 3”, “Track 4” se mostraban junto al sencillo que sí se había revelado. La solución en sí fue directa. Lo que tomó más tiempo fue determinar cuánta confianza podía tener en ella, dada una restricción real: MusicKit no corre en el simulador de iOS, así que todo lo que no se pudiera verificar desde el código o la documentación, no se podía verificar en absoluto esta sesión.

La lógica de detección necesitaba identificar una pista marcador de posición y tratarla distinto. El primer instinto fue exigir dos señales: que el título calzara con el patrón “Track N” de Apple, y que la pista no tuviera duración. Las dos parecían razonables. Después revisé si la segunda era cierta. Los Song.duration y Track.duration reales de MusicKit están declarados como TimeInterval? en el archivo .swiftinterface compilado de Apple, lo verifiqué directamente en vez de confiar en una página de documentación que no renderizaba. Así que el tipo puede ser nil. Pero si los servidores de Apple realmente devuelven nil para una pista de preestreno, en vez de algún valor de marcador de posición no nulo, no era algo que se pudiera confirmar desde un simulador, una página web, o una nota vieja de la base de conocimiento.

Eso importaba más de lo que suena. Si la solución hubiera salido exigiendo las dos señales, y la API real no devuelve duración nula para los marcadores de posición, toda la función habría fallado en silencio: sin caída, sin prueba fallida, solo una solución que parece completa y no lo está. Un falso positivo solo por el patrón del título significaría que alguna otra canción se llama literalmente “Track 5” sin ningún otro texto, algo lo bastante cercano a lo imposible como para no preocuparse. Así que se eliminó el requisito de duración. La única condición que no se pudo verificar se convirtió en la única condición de la que se dejó de depender.

El renderizado en sí se divide en dos casos, porque el reporte de error real mostraba una mezcla: un sencillo revelado junto a varias pistas todavía marcadas como no confirmadas, no una lista de canciones uniformemente en blanco. Si todas las pistas de la lista son marcadores de posición, toda la sección colapsa a “Tracklist not final.” Si es una mezcla, los títulos reales se muestran con normalidad y solo las filas de marcador de posición aparecen en gris. Colapsar siempre la sección habría descartado el único título real ya anunciado, tirando información válida sin ninguna razón.

También se incluyó algo que el issue listaba como “bonus”: mostrar una fecha de lanzamiento real, “Coming Wednesday” o “Out August 20”, en vez de un año pelado para álbumes que todavía no salieron. Ese tuvo un final más feliz. Usar Date.FormatStyle en vez de armar la cadena a mano hizo que el nombre del día de la semana y del mes, e incluso el orden día/mes, se localizaran automáticamente. Se revisó en español y dio “Llega el miércoles” y “Sale el 20 de agosto”, correctamente reordenado a día antes que mes, sin escribir ni una sola línea de lógica de ordenamiento.

Lo que no se puede afirmar con certeza es si la lista de canciones de un álbum de preestreno real luce como asumían los fixtures de prueba. El renderizado es correcto dada esa forma. Si esa forma es la real sigue siendo una pregunta abierta, y quedó anotado con claridad en vez de dejar que las pruebas en verde y las capturas limpias sugirieran más certeza de la que en realidad había.

Lecturas relacionadas