Fijar la versión de SwiftLint en CI cuando Homebrew no lo permite
brew install swiftlint instala lo que sea estable hoy, y el CI de release es el más expuesto a esa deriva. El anclaje es el binario portátil, no una fórmula.
brew install swiftlint instala lo que sea estable hoy, y el CI de release es el más expuesto a esa deriva. El anclaje es el binario portátil, no una fórmula.
Extracción de algoritmos fuera del alcance de MusicKit, un parámetro simulado que se ignoraba en silencio, y dos pruebas que habían estado pasando por la razón equivocada todo este tiempo.
Una limpieza de la capa de servicio de MusicKit donde eliminar métodos muertos hizo fallar todas las pruebas a la vez - y la solución fue una compilación limpia, no un depurador.
Tres fetches secuenciales donde uno ni siquiera se necesitaba al principio, dos recálculos cuadráticos, y un linter que expuso por qué en realidad estaba escribiendo todos esos comentarios.
Las conformidades Codable sintetizadas también heredan el aislamiento MainActor por defecto, y async let tiene exigencias más estrictas que la tarea que ya tenías.
Un patrón no se corrige una sola vez. Otro escaneo de biblioteca en el main actor, escondido en una ruta de escritura, y una API por lotes en una sola vía.
IDs de biblioteca usados en solicitudes de catálogo: dos síntomas, un solo error, una solución verificada en dispositivo, y el número de 1.610 artistas que obligó a un rediseño.
El almacén de No me interesa solo guardaba claves. Después tuvo que convertirse en una pantalla, y el modelo necesitó cargar su propia descripción.
118 pruebas en verde, una corrida limpia en el simulador, y botones muertos en un teléfono real. El bug era un servicio @MainActor haciendo trabajo síncrono entre awaits.
@MainActor elimina las condiciones de carrera de datos, no las de intercalado. Un token de generación y una prueba de carrera determinista sin sleeps.
Página 3 de 5