Cómo verifica Floodtide una actualización
Actualizado el
Un actualizador que sustituye apps en tu carpeta Aplicaciones debería poder decir exactamente qué comprueba. Esta página está escrita a partir del código fuente de Floodtide, en el orden en que se hacen las comprobaciones: de dónde viene una actualización, qué tiene que dar fe del archivo, qué se comprueba una vez descomprimido, qué pasa cuando una comprobación falla y qué se guarda para que puedas volver atrás.
De dónde viene una actualización
Floodtide no tiene una base de datos de versiones propia. Para cada app pregunta a las fuentes que ya lo saben, y la fila indica cuál respondió.
- El propio feed de actualizaciones de la app. Un feed de Sparkle cuya dirección Floodtide lee del propio paquete de app. Cuando la app declara uno, ese feed se impone sin más a cualquier otra fuente.
- El catálogo de casks de Homebrew. Se lee directamente del propio catálogo de Homebrew, así que no hace falta tener Homebrew instalado. Las actualizaciones de una app instalada con Homebrew siguen siendo cosa de Homebrew, y Floodtide prefiere para ella la respuesta del cask.
- GitHub Releases y los feeds de Electron. Para las apps que no publican ni appcast ni cask. Floodtide elige una sola compilación para Mac, sin ambigüedad, para el procesador de este Mac, en lugar de adivinar entre varias.
- El Mac App Store. Solo para las apps instaladas desde el App Store, a partir de lo que el App Store ofrece a este Mac. A una app del App Store nunca se le ofrece una descarga directa, y nunca se pregunta al App Store por una app que no viene de él.
- El catálogo firmado de Floodtide y tus propias fuentes. Un feed investigado a mano que solo indica qué fuente leer para una app, así que la lectura sigue pasando por las fuentes de arriba y nada de la verificación se duplica. Una dirección de Sparkle o un repositorio de GitHub que configures tú se consulta antes que cualquier cosa que descubra Floodtide.
Lo que se compara es la versión y, cuando ambas partes lo publican, el número de compilación. Una versión solo se ofrece si, según esa comparación, es más reciente que la copia instalada. Una versión más antigua, o la misma que ya tienes, no aparece como actualización.
Dos comparaciones se rechazan en el análisis y no después de una descarga: un salto que no cuadra, como de 5.92 a 2584447, queda fuera de Actualizar todo y de las ejecuciones programadas, y una versión que se presenta como edición de demostración o compilación de prueba nunca se ofrece a una copia con licencia.
Qué tiene que dar fe del archivo
Antes de que una fila tenga siquiera un botón Actualizar, algo tiene que dar fe del archivo que descargaría. La regla se consulta dos veces, una en el análisis y otra en la propia descarga, para que ninguna fila ofrezca un botón que el paso de descarga rechazaría. Cuentan tres cosas, y una fila necesita una de ellas.
- Una suma de comprobación publicada por la fuente. El SHA-256 que un cask de Homebrew registra para el archivo, o el SHA-512 que un feed de Electron publica junto a cada descarga.
- Una firma en el feed. Un feed de Sparkle puede llevar una firma EdDSA para cada descarga, y la app lleva la clave pública correspondiente. Floodtide verifica el archivo con esa clave.
- La propia firma de la copia instalada. Cuando no se publica ninguna de las dos, la copia de tu Mac tiene que estar firmada de forma válida por un equipo de Developer ID, y la que la sustituye queda sujeta a ese mismo equipo una vez descomprimida. Una app sin firmar, sin suma de comprobación y sin firma en el feed no recibe botón Actualizar: la fila muestra la versión y dice que Floodtide no pudo confirmar que la descarga sea auténtica.
Qué se comprueba en el archivo descargado
- La conexión. Las compilaciones de Floodtide que se distribuyen solo descargan por https. Una dirección http simple se pide primero por https y se rechaza si el servidor no entrega el archivo así. Un enlace que responde con una página web en lugar de un archivo también se rechaza.
- La suma de comprobación. Cuando la fuente publica una, el SHA-256 o el SHA-512 de los bytes que llegaron se compara con ella. Si no coinciden, la fila dice que la descarga no llegó intacta, y no se descomprime nada.
- La firma del feed. Cuando el feed firma la descarga, la firma EdDSA se comprueba con la clave de la app instalada. Si no coincide, la fila dice que la descarga no está firmada por el desarrollador que esperaba Floodtide.
Qué se comprueba una vez descomprimida la descarga
La descarga se descomprime en una carpeta propia, y la app que contiene se comprueba antes de tocar nada en tu Mac. La fila muestra cada paso mientras se hace: Descomprimiendo, Comprobando la firma, Comprobando con Gatekeeper.
- Es la misma app. El identificador de paquete tiene que ser el de la app instalada. Una descarga que resulta ser otra app se rechaza y se recuerda, para que el mismo archivo no se vuelva a descargar en el próximo análisis. Un cambio de nombre hecho por el propio desarrollador solo se acepta cuando las dos copias llevan una firma de Developer ID del mismo equipo y la descarga está notarizada, y aun así Floodtide te pregunta antes de instalarla.
- No es más antigua. La versión y la compilación de la descarga se comparan con las de la copia instalada, y una versión o una compilación más antigua se rechaza. Una descarga que resulta ser la compilación ya instalada se reconoce porque su firma de código es idéntica a la de la copia instalada, y la fila lo dice en lugar de presentarla como una actualización.
- Funciona en este Mac. La versión de macOS que necesita la nueva compilación se compara con la que usas. Una compilación que necesita un macOS más reciente se rechaza indicando esa versión, y el rechazo se levanta solo en cuanto actualizas macOS. La nueva compilación también tiene que llevar código para el procesador de este Mac cuando la copia instalada lo lleva, así que una compilación solo para Intel nunca sustituye a una app nativa para Apple silicon.
- La firma de código es válida. Floodtide ejecuta sobre el nuevo paquete la verificación profunda y estricta de codesign, que calcula el hash de cada archivo que contiene. Se perdonan los metadatos del Finder en la copia o un formato de firma más antiguo; un archivo modificado o un sello roto, no.
- El equipo de firma coincide. El identificador de equipo de la firma de la nueva compilación tiene que ser igual al de la app instalada. Una app firmada de forma válida solo se sustituye por otra app firmada de forma válida, nunca por una sin firmar ni por una que no indique ningún equipo. Un equipo distinto es o bien un cambio real de desarrollador o bien un feed secuestrado, y Floodtide no puede saber cuál de los dos, así que la actualización se detiene y te pregunta; tu respuesta se guarda solo para esa app. Una app instalada sin firmar solo puede pasar a una compilación firmada de forma válida.
- Gatekeeper está de acuerdo. Además, Gatekeeper evalúa cada paquete firmado teniendo en cuenta la notarización, la revocación y la política de seguridad de este Mac, con al menos diez minutos de margen en los Macs lentos. En un Mac cuyo perfil solo permite apps del App Store, Gatekeeper rechaza todas las compilaciones con Developer ID, y Floodtide dice que se trata de la política del Mac y no de un fallo de la actualización.
- Y otra vez tras la sustitución. La copia que se instala se comprueba una segunda vez frente a la copia a la que sustituye. Si esa comprobación final falla, se vuelve a poner la original y la fila lo dice. Solo un camino que hace esta nueva comprobación puede terminar en “Hecho, versión … verificada”.
Paquetes de instalación
Algunas apps se distribuyen como paquete de instalación en lugar de como paquete de app. Un paquete de instalación ejecuta sus propios scripts como administrador, así que se le exige un listón propio: Gatekeeper lo evalúa como instalador y, cuando ninguna suma de comprobación ha dado fe de la descarga, el certificado Developer ID Installer con el que está firmado tiene que indicar el equipo de la app instalada. Floodtide registra el SHA-256 del paquete antes de esa evaluación y lo vuelve a comprobar justo antes de entregar el paquete al instalador de macOS, para que lo que se ejecuta sea el archivo que se evaluó.
La app de instalación propia de un desarrollador que llega sin suma de comprobación tiene que cumplir tres cosas en un solo requisito: una firma de Developer ID, la notarización de Apple y el equipo de la copia instalada.
Cuando una comprobación falla
La actualización se rechaza, nada cambia en tu Mac, y la fila dice en una frase qué se encontró y qué hacer a continuación. Una suma de comprobación que no coincide se lee “La descarga no llegó intacta”. Una firma o una comprobación de Gatekeeper que falla se lee “La actualización no cumple los requisitos de firma de código o de notarización de Floodtide”, con el paso siguiente: descargar esa actualización desde el desarrollador.
Un rechazo que tiene que ver con el propio archivo (otra app dentro, una firma que falla, nada que se pueda instalar, un formato que Floodtide no sabe abrir) se recuerda para esa versión, de modo que la fila sigue diciendo lo que se encontró en lugar de gastar una descarga en descubrirlo otra vez en cada análisis. Un rechazo que tiene que ver con este Mac (un mínimo de macOS o un perfil que solo permite el App Store) se recuerda junto con aquello frente a lo que se estableció, y se levanta solo cuando el Mac cambia.
Cada paso de una instalación tiene un límite de tiempo ajustado a la app. Una comprobación que se pasa de tiempo termina la actualización indicando qué paso era, sin tocar la app, y una comprobación interrumpida cuenta como una comprobación no superada, nunca como una superada.
La copia de seguridad y cómo volver atrás
Con las copias de seguridad activadas, que es lo predeterminado, Floodtide copia la app instalada antes de sustituirla: un clon cuando el disco lo permite y, si no, un archivo zip, en una carpeta Floodtide Backups que puedes trasladar a otro disco. Si esa copia no se puede hacer, la actualización no sigue adelante.
Deshacer la última actualización vuelve a poner la copia más reciente con un clic mientras la app no está abierta, y la copia restaurada pasa otra vez por Gatekeeper antes de instalarse. La copia se guarda tres días, una semana, dos semanas o un mes, una semana de forma predeterminada; el botón Deshacer cuenta los días que quedan, y Eliminar copias de seguridad, en Ajustes, las borra todas.
Aparte de las copias de seguridad, la propia sustitución deja la original a un lado hasta que la nueva copia está instalada y ha superado su comprobación final. Una instalación fallida vuelve a poner la original incluso con las copias de seguridad desactivadas.
Versiones anteriores, en los detalles de una app, enumera las versiones más antiguas que su fuente sigue publicando. Elegir una la instala con las mismas comprobaciones de firma, de equipo y de Gatekeeper que una actualización; solo se retira la regla de que una descarga tiene que ser más reciente, que es justo lo que se busca al volver atrás. Volver a una versión anterior no se ofrece para una app que necesita permisos de administrador para sustituirse.
Qué retiene una actualización
Además de una comprobación que falla, hay reglas que dejan una actualización en espera sin rechazarla.
- La app está abierta. Floodtide nunca cierra una app por ti. Una ejecución programada no toca una app abierta e instala su actualización cuando cierras la app. Salir y actualizar, que eliges tú, pide a la app que se cierre de forma normal; si se niega, el menú del botón ofrece Forzar salida y actualizar, que cierra solo esa app y solo después de que lo confirmes.
- Falló el último intento automático. Con las actualizaciones automáticas activadas, una app cuyo último intento automático falló se deja en esa versión unas 17 horas antes de que una ejecución programada lo vuelva a intentar, para que una comprobación cada hora no descargue cada hora el mismo archivo que falla. Tu propio Actualizar, Actualizar todo o Buscar actualizaciones lo sigue intentando enseguida.
- El Mac no está listo. Una ejecución programada no empieza durante tus horas de silencio, con poca batería, en Modo de bajo consumo ni con una conexión limitada, y lo vuelve a intentar cuando eso ha pasado.
- Una ejecución programada es más estricta. Deja fuera al propio Floodtide, cualquier app que necesite tu contraseña de administrador, cualquier versión principal cuando Actualizar todo está configurado para dejarlas fuera, cualquier app que necesite el instalador propio del desarrollador, cualquier versión que una ejecución anterior ya demostró que no se puede instalar y cualquier app que hayas desactivado. Nunca responde por ti a una pregunta, como un cambio de equipo de firma.
Lo que Floodtide nunca hace
- Instalar sin tu permiso. La instalación automática está desactivada hasta que la activas, y las actualizaciones del propio Floodtide tienen un interruptor aparte. Una comprobación programada solo mira. La página macOS enumera las actualizaciones del sistema que ofrece Actualización de software y abre Actualización de software; Floodtide nunca instala macOS por su cuenta.
- Acortar una comprobación. Una ejecución automática y Actualizar todo hacen las mismas comprobaciones que un solo Actualizar, sin acortar nada.
- Ver tu contraseña. Una app en una carpeta que macOS protege necesita la misma solicitud de contraseña de administrador que muestra cualquier instalador, una sola vez para todo el lote y anunciada antes de que aparezca. La contraseña la gestiona macOS; Floodtide nunca la ve ni la guarda, y una ejecución programada nunca la pide.
- Enviar tu lista de apps a sitios que no hayas permitido. Qué apps y qué versiones usa este Mac se comparte una vez al día sin ningún identificador, para que cada Mac ayude a todos los demás; la app te lo dice la primera vez que la abres, y Ajustes, Privacidad muestra exactamente lo que se envía y permite desactivarlo. Los datos de uso anónimos están desactivados hasta que los activas. Nada más sobre ti sale del Mac. La política de privacidad (en inglés) tiene la lista, petición por petición.
- Pedir permisos que no puede explicar. Ni acceso a todo el disco, ni control de accesibilidad, ni grabación de pantalla. Floodtide lee la información de versión de las apps de tu carpeta Aplicaciones como cualquier explorador de archivos.
Preguntas frecuentes
¿Comprueba Floodtide las firmas de código?
Sí. Cada paquete de app descomprimido pasa por la verificación profunda y estricta de codesign, su equipo de firma tiene que coincidir con el de la app instalada, y Gatekeeper lo evalúa antes de sustituir nada. La copia que se instala se vuelve a comprobar frente a la copia a la que sustituye, y se vuelve a poner la original si esa comprobación falla.
¿Y si la suma de comprobación no coincide?
La actualización se rechaza antes de descomprimir nada, y no se toca nada en tu Mac. La fila dice que la descarga no llegó intacta y sugiere volver a hacer clic en Actualizar; si el archivo del desarrollador ha cambiado de verdad, Floodtide lo ofrece en cuanto la fuente se pone al día.
¿Puedo deshacer una actualización?
Sí. Con las copias de seguridad activadas, que es lo predeterminado, la copia sustituida se guarda como clon o zip durante el tiempo que elijas, una semana de forma predeterminada, y Deshacer la última actualización la restaura con un clic mientras la app no está abierta. Versiones anteriores, en los detalles de una app, también puede instalar una versión más antigua que la fuente siga publicando, con las mismas comprobaciones que una actualización.
¿Instala Floodtide alguna vez sin preguntar?
No. La instalación automática está desactivada hasta que la activas, e incluso entonces hace las mismas comprobaciones que una actualización manual, nunca cierra una app, nunca pide tu contraseña y nunca decide por ti un cambio de equipo de firma. Las actualizaciones del propio Floodtide tienen un interruptor aparte, y la página macOS solo enumera las actualizaciones de Apple.
¿De dónde saca Floodtide las actualizaciones?
Del propio feed de Sparkle de la app, del catálogo de casks de Homebrew, de GitHub Releases, de los feeds de actualizaciones de Electron, del Mac App Store para las apps instaladas desde él y del catálogo firmado de Floodtide, que solo indica cuál de esas fuentes leer. También puedes asignar por tu cuenta a una app una dirección de Sparkle o un repositorio de GitHub.
¿Comprueba Floodtide que la actualización funciona en mi Mac?
Sí. La versión de macOS que necesita la nueva compilación se compara con la tuya, y una compilación que necesita un macOS más reciente se retiene, con esa versión indicada, hasta que actualices macOS. La nueva compilación también tiene que llevar código para el procesador de este Mac cuando la copia instalada lo lleva, así que una compilación solo para Intel nunca sustituye a una app nativa para Apple silicon.
Mira lo que Floodtide comprueba en tu propio Mac
El análisis es gratis y no necesita cuenta. 14 días con la app completa y, después, el análisis sigue siendo gratis; una licencia cuesta £10.9912,99 €$14.99 en un solo pago para 3 Macs.