From 13842875994411077cf1be237137ca83aed16da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez?= Date: Tue, 20 Oct 2026 11:13:53 +0200 Subject: [PATCH 1/6] =?UTF-8?q?docs(web):=20la=20web=20y=20el=20manual=20e?= =?UTF-8?q?xplican=20c=C3=B3mo=20instalar=20rFirma=20en=20macOS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements #2059: La web y el manual explican cómo instalar rFirma en macOS - pestaña macOS con brew, enlace al .dmg de la última Release y nota de xattr -c - manual: actualizaciones, llavero y qué retirar antes de brew uninstall --- .../repo/site/src/components/Install.astro | 31 ++++++++++++++----- .../src/content/docs/manual/instalacion.md | 27 ++++++++++++++-- packaging/repo/site/src/i18n/ca.ts | 9 +++--- packaging/repo/site/src/i18n/en.ts | 9 +++--- packaging/repo/site/src/i18n/es.ts | 9 +++--- packaging/repo/site/src/i18n/eu.ts | 9 +++--- packaging/repo/site/src/i18n/gl.ts | 9 +++--- 7 files changed, 72 insertions(+), 31 deletions(-) diff --git a/packaging/repo/site/src/components/Install.astro b/packaging/repo/site/src/components/Install.astro index f9a7c615..bc6f9abc 100644 --- a/packaging/repo/site/src/components/Install.astro +++ b/packaging/repo/site/src/components/Install.astro @@ -144,21 +144,36 @@ Select-String rFirma_ .\SHA256SUMS diff --git a/packaging/repo/site/src/content/docs/manual/instalacion.md b/packaging/repo/site/src/content/docs/manual/instalacion.md index 6502ab2e..de373774 100644 --- a/packaging/repo/site/src/content/docs/manual/instalacion.md +++ b/packaging/repo/site/src/content/docs/manual/instalacion.md @@ -104,9 +104,30 @@ llega con su firma minisign, que se comprueba antes de instalarla. ## macOS -La versión para macOS está en preparación y todavía no se puede instalar. Se -integrará con el llavero de Apple. Puedes seguir el avance en el -[repositorio](https://github.com/sgomez/rfirma). +Necesitas macOS 15.4 o posterior y un Mac con Apple Silicon. La vía principal es +Homebrew: + +```bash +brew install --cask sgomez/rfirma/rfirma +``` + +También puedes descargar `rfirma__aarch64.dmg` de la +[última Release](https://github.com/sgomez/rfirma/releases/latest) y arrastrar +`rfirma.app` a Aplicaciones. Con Homebrew, rFirma se abre sin el aviso de Gatekeeper. +Con la descarga directa, macOS marca la aplicación como bajada de internet; quita la +marca antes de abrirla: + +```bash +xattr -c /Applications/rfirma.app +``` + +Las actualizaciones las hace rFirma desde la propia aplicación, con ambas vías. Tras +actualizar, el llavero puede volver a pedirte permiso para que rFirma use tus +certificados; es esperable. + +Antes de ejecutar `brew uninstall`, retira desde rFirma lo que dejó en tu usuario: el +certificado de la CA local y el manejador de `afirma://`. Homebrew solo borra la +aplicación. ## La huella de la clave GPG diff --git a/packaging/repo/site/src/i18n/ca.ts b/packaging/repo/site/src/i18n/ca.ts index 6d7fc8a4..e51d921b 100644 --- a/packaging/repo/site/src/i18n/ca.ts +++ b/packaging/repo/site/src/i18n/ca.ts @@ -141,6 +141,7 @@ export const ca: Dictionary = { "install.copy.flatpak.aria": "Copiar l'ordre de Flatpak", "install.copy.apt.aria": "Copiar les ordres per a APT", "install.copy.dnf.aria": "Copiar les ordres per a DNF", + "install.copy.macos.aria": "Copiar l'ordre d'Homebrew", "install.flatpak.body": "Recomanada per a les distribucions de Linux que no fan servir APT ni DNF. Dones d'alta Flathub, d'on surt el runtime org.gnome.Platform, i el remot de rFirma, com un repositori més: així rFirma també apareix en cercar a GNOME Software. Només cal tenir instal·lats flatpak i xdg-desktop-portal.", "install.apt.body": @@ -151,18 +152,18 @@ export const ca: Dictionary = { "Instruccions detallades, empremta de la clau i verificació, al manual (en castellà)", "install.uninstall": "Per no deixar el certificat de rFirma al navegador, prem Retira el certificat al panell d'estat abans de desinstal·lar.", - "install.soon": "En desenvolupament", "install.windows.title": "rFirma per a Windows", "install.windows.body": "Instal·lador per al teu usuari, sense permisos d'administrador. Fa servir directament l'emmagatzem de certificats de Windows (MS-CAPI / CNG) i, un cop instal·lat, s'actualitza des de la mateixa aplicació: cada versió nova arriba amb la seua signatura minisign, que es comprova abans d'instal·lar-la.", "install.windows.download": "Descarrega l'instal·lador de Windows", "install.windows.note": 'Verifica el que descarregues: baixa SHA256SUMS de la Release i comprova que el hash de l\'instal·lador coincideix amb la seua línia. L\'instal·lador no està signat amb Authenticode, així que SmartScreen t\'avisarà en obrir-lo.', - "install.macos.title": "Suport per a macOS en preparació", + "install.macos.title": "rFirma per a macOS", "install.macos.body": - "La versió nativa per a macOS està en fase de desenvolupament actiu. S'integrarà amb el Keychain d'Apple i CryptoTokenKit per a un accés fluid i segur a les identitats digitals del sistema.", + "Requereix macOS 15.4 o posterior i un Mac amb Apple Silicon. Amb Homebrew, rFirma s'instal·la amb aquesta ordre i s'actualitza des de la mateixa aplicació.", + "install.macos.download": "Descarrega el .dmg de macOS", "install.macos.note": - 'Es distribuirà com a imatge de disc .dmg i mitjançant fórmula de Homebrew. Pots seguir l\'avenç del projecte a GitHub.', + "Si descarregues el .dmg a mà en lloc d'usar Homebrew, macOS el marca com a descarregat d'internet i t'avisa en obrir-lo. Per llevar la marca, executa aquesta ordre després de copiar l'aplicació a Aplicacions:", "transparency.kicker": "Transparència", "transparency.title": "Tot el codi, a la vista", diff --git a/packaging/repo/site/src/i18n/en.ts b/packaging/repo/site/src/i18n/en.ts index d57bdfbc..1a604cec 100644 --- a/packaging/repo/site/src/i18n/en.ts +++ b/packaging/repo/site/src/i18n/en.ts @@ -141,6 +141,7 @@ export const en: Dictionary = { "install.copy.flatpak.aria": "Copy the Flatpak command", "install.copy.apt.aria": "Copy the APT commands", "install.copy.dnf.aria": "Copy the DNF commands", + "install.copy.macos.aria": "Copy the Homebrew command", "install.flatpak.body": "Recommended for Linux distributions that use neither APT nor DNF. You add Flathub, where the org.gnome.Platform runtime comes from, and rFirma's remote, like any other repository: rFirma then also shows up when you search in GNOME Software. You only need flatpak and xdg-desktop-portal installed.", "install.apt.body": @@ -151,18 +152,18 @@ export const en: Dictionary = { "Detailed steps, key fingerprint and verification are in the manual (in Spanish)", "install.uninstall": "To leave no rFirma certificate behind in your browser, click Withdraw certificate in the status panel before uninstalling.", - "install.soon": "In development", "install.windows.title": "rFirma for Windows", "install.windows.body": "Per-user installer, no administrator rights needed. It uses the Windows certificate store (MS-CAPI / CNG) directly and, once installed, updates from within the app: every new version arrives with its minisign signature, which is checked before installing it.", "install.windows.download": "Download the Windows installer", "install.windows.note": 'Verify what you download: get SHA256SUMS from the Release and check that the installer\'s hash matches its line. The installer is not Authenticode-signed, so SmartScreen will warn you when you open it.', - "install.macos.title": "macOS support in the works", + "install.macos.title": "rFirma for macOS", "install.macos.body": - "The native version for macOS is in active development. It will integrate with Apple's Keychain and CryptoTokenKit for smooth, secure access to the system's digital identities.", + "Requires macOS 15.4 or later and an Apple Silicon Mac. With Homebrew, rFirma installs with this command and updates from within the app.", + "install.macos.download": "Download the macOS .dmg", "install.macos.note": - 'It will be distributed as a .dmg disk image and through a Homebrew formula. You can follow the project\'s progress on GitHub.', + "If you download the .dmg by hand instead of using Homebrew, macOS flags it as downloaded from the internet and warns you when you open it. To clear the flag, run this command after copying the app to Applications:", "transparency.kicker": "Transparency", "transparency.title": "All the code, in the open", diff --git a/packaging/repo/site/src/i18n/es.ts b/packaging/repo/site/src/i18n/es.ts index e4fd9c58..65631128 100644 --- a/packaging/repo/site/src/i18n/es.ts +++ b/packaging/repo/site/src/i18n/es.ts @@ -139,6 +139,7 @@ export const es = { "install.copy.flatpak.aria": "Copiar orden de Flatpak", "install.copy.apt.aria": "Copiar órdenes para APT", "install.copy.dnf.aria": "Copiar órdenes para DNF", + "install.copy.macos.aria": "Copiar orden de Homebrew", "install.flatpak.body": "Recomendada para las distribuciones de Linux que no usan APT ni DNF. Das de alta Flathub, de donde sale el runtime org.gnome.Platform, y el remoto de rFirma, como un repositorio más: así rFirma aparece también al buscar en GNOME Software. Solo necesitas tener instalados flatpak y xdg-desktop-portal.", "install.apt.body": @@ -148,18 +149,18 @@ export const es = { "install.manual": "Instrucciones detalladas, huella de la clave y verificación, en el manual", "install.uninstall": "Para no dejar el certificado de rFirma en el navegador, pulsa Retirar certificado en el panel de estado antes de desinstalar.", - "install.soon": "En desarrollo", "install.windows.title": "rFirma para Windows", "install.windows.body": "Instalador para tu usuario, sin permisos de administrador. Usa directamente el almacén de certificados de Windows (MS-CAPI / CNG) y, una vez instalado, se actualiza desde la propia aplicación: cada versión nueva llega con su firma minisign, que se comprueba antes de instalarla.", "install.windows.download": "Descargar el instalador de Windows", "install.windows.note": 'Verifica lo que descargas: baja SHA256SUMS de la Release y comprueba que el hash del instalador coincide con su línea. El instalador no está firmado con Authenticode, así que SmartScreen avisará al abrirlo.', - "install.macos.title": "Soporte para macOS en preparación", + "install.macos.title": "rFirma para macOS", "install.macos.body": - "La versión nativa para macOS está en fase de desarrollo activo. Se integrará con el Keychain de Apple y CryptoTokenKit para un acceso fluido y seguro a las identidades digitales del sistema.", + "Requiere macOS 15.4 o posterior y un Mac con Apple Silicon. Con Homebrew, rFirma se instala con esta orden y se actualiza desde la propia aplicación.", + "install.macos.download": "Descargar el .dmg de macOS", "install.macos.note": - 'Se distribuirá como imagen de disco .dmg y mediante fórmula de Homebrew. Puedes seguir el avance del proyecto en GitHub.', + "Si descargas el .dmg a mano en lugar de usar Homebrew, macOS lo marca como descargado de internet y avisa al abrirlo. Para quitar la marca, ejecuta esta orden tras copiar la aplicación a Aplicaciones:", "transparency.kicker": "Transparencia", "transparency.title": "Todo el código, a la vista", diff --git a/packaging/repo/site/src/i18n/eu.ts b/packaging/repo/site/src/i18n/eu.ts index 8f4c465b..973e049a 100644 --- a/packaging/repo/site/src/i18n/eu.ts +++ b/packaging/repo/site/src/i18n/eu.ts @@ -143,6 +143,7 @@ export const eu: Dictionary = { "install.copy.flatpak.aria": "Kopiatu Flatpaken agindua", "install.copy.apt.aria": "Kopiatu APTrako aginduak", "install.copy.dnf.aria": "Kopiatu DNFrako aginduak", + "install.copy.macos.aria": "Kopiatu Homebrewen agindua", "install.flatpak.body": "APT edo DNF erabiltzen ez duten Linux banaketentzat gomendatua. Flathub gehitzen duzu, org.gnome.Platform runtimea handik datorrelako, eta rFirmaren urruneko biltegia, beste edozein biltegi bezala: horrela rFirma GNOME Software-n bilatzean ere agertzen da. flatpak eta xdg-desktop-portal instalatuta izatea besterik ez duzu behar.", "install.apt.body": @@ -153,18 +154,18 @@ export const eu: Dictionary = { "Argibide zehatzak, gakoaren hatz-marka eta egiaztapena eskuliburuan (gaztelaniaz)", "install.uninstall": "rFirma-ren ziurtagiria nabigatzailean ez uzteko, sakatu Ziurtagiria kendu egoera-panelean, desinstalatu aurretik.", - "install.soon": "Garatzen", "install.windows.title": "rFirma Windowsentzat", "install.windows.body": "Zure erabiltzailearentzako instalatzailea, administratzaile-baimenik gabe. Windowseko ziurtagiri-biltegia (MS-CAPI / CNG) zuzenean erabiltzen du eta, instalatu ondoren, aplikazioak berak eguneratzen du: bertsio berri bakoitza bere minisign sinadurarekin dator, eta instalatu aurretik egiaztatzen da.", "install.windows.download": "Deskargatu Windowseko instalatzailea", "install.windows.note": 'Egiaztatu deskargatzen duzuna: jaitsi SHA256SUMS Release-tik eta begiratu instalatzailearen hash-a bere lerroarekin bat datorrela. Instalatzailea ez dago Authenticode-rekin sinatuta, beraz SmartScreen-ek abisua emango dizu irekitzean.', - "install.macos.title": "macOSentzako euskarria prestatzen", + "install.macos.title": "rFirma macOSentzat", "install.macos.body": - "macOSentzako bertsio natiboa garapen aktiboan dago. Apple-ren Keychain eta CryptoTokenKit-ekin integratuko da, sistemaren identitate digitaletara sarbide fluidoa eta segurua izateko.", + "macOS 15.4 edo berriagoa eta Apple Silicon duen Mac bat behar da. Homebrew-rekin, rFirma agindu honekin instalatzen da eta aplikazioak berak eguneratzen du.", + "install.macos.download": "Deskargatu macOSeko .dmg-a", "install.macos.note": - '.dmg disko-irudi gisa eta Homebrew formularen bidez banatuko da. Proiektuaren aurrerapena GitHuben jarrai dezakezu.', + ".dmg-a Homebrew erabili beharrean eskuz deskargatzen baduzu, macOSek internetetik deskargatutako gisa markatzen du eta abisua ematen du irekitzean. Marka kentzeko, exekutatu agindu hau aplikazioa Aplikazioak karpetara kopiatu ondoren:", "transparency.kicker": "Gardentasuna", "transparency.title": "Kode osoa, ikusgai", diff --git a/packaging/repo/site/src/i18n/gl.ts b/packaging/repo/site/src/i18n/gl.ts index fff40471..61f87c82 100644 --- a/packaging/repo/site/src/i18n/gl.ts +++ b/packaging/repo/site/src/i18n/gl.ts @@ -140,6 +140,7 @@ export const gl: Dictionary = { "install.copy.flatpak.aria": "Copiar orde de Flatpak", "install.copy.apt.aria": "Copiar ordes para APT", "install.copy.dnf.aria": "Copiar ordes para DNF", + "install.copy.macos.aria": "Copiar orde de Homebrew", "install.flatpak.body": "Recomendada para as distribucións de Linux que non usan APT nin DNF. Das de alta Flathub, de onde sae o runtime org.gnome.Platform, e o remoto de rFirma, coma un repositorio máis: así rFirma tamén aparece ao buscar en GNOME Software. Só precisas ter instalados flatpak e xdg-desktop-portal.", "install.apt.body": @@ -150,18 +151,18 @@ export const gl: Dictionary = { "Instrucións detalladas, pegada da clave e verificación, no manual (en castelán)", "install.uninstall": "Para non deixar o certificado de rFirma no navegador, preme Retirar certificado no panel de estado antes de desinstalar.", - "install.soon": "En desenvolvemento", "install.windows.title": "rFirma para Windows", "install.windows.body": "Instalador para o teu usuario, sen permisos de administrador. Usa directamente o almacén de certificados de Windows (MS-CAPI / CNG) e, unha vez instalado, actualízase desde a propia aplicación: cada versión nova chega coa súa sinatura minisign, que se comproba antes de instalala.", "install.windows.download": "Descargar o instalador de Windows", "install.windows.note": 'Verifica o que descargas: baixa SHA256SUMS da Release e comproba que o hash do instalador coincide coa súa liña. O instalador non está asinado con Authenticode, así que SmartScreen avisarache ao abrilo.', - "install.macos.title": "Soporte para macOS en preparación", + "install.macos.title": "rFirma para macOS", "install.macos.body": - "A versión nativa para macOS está en fase de desenvolvemento activo. Integrarase co Keychain de Apple e CryptoTokenKit para un acceso fluído e seguro ás identidades dixitais do sistema.", + "Require macOS 15.4 ou posterior e un Mac con Apple Silicon. Con Homebrew, rFirma instálase con esta orde e actualízase desde a propia aplicación.", + "install.macos.download": "Descargar o .dmg de macOS", "install.macos.note": - 'Distribuirase como imaxe de disco .dmg e mediante fórmula de Homebrew. Podes seguir o avance do proxecto en GitHub.', + "Se descargas o .dmg a man en lugar de usar Homebrew, macOS márcao como descargado de internet e avisa ao abrilo. Para quitar a marca, executa esta orde despois de copiar a aplicación a Aplicacións:", "transparency.kicker": "Transparencia", "transparency.title": "Todo o código, á vista", From a65c095173161302824d293d6bbffae016b9742c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez?= Date: Tue, 20 Oct 2026 11:15:36 +0200 Subject: [PATCH 2/6] docs(web): el xattr -c de macOS vale para Homebrew y para el .dmg Implements #2059: el cask no puede quitar la cuarentena (ID-553 corregida) --- packaging/repo/site/src/content/docs/manual/instalacion.md | 6 ++++-- packaging/repo/site/src/i18n/ca.ts | 2 +- packaging/repo/site/src/i18n/en.ts | 2 +- packaging/repo/site/src/i18n/es.ts | 2 +- packaging/repo/site/src/i18n/eu.ts | 2 +- packaging/repo/site/src/i18n/gl.ts | 2 +- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packaging/repo/site/src/content/docs/manual/instalacion.md b/packaging/repo/site/src/content/docs/manual/instalacion.md index de373774..b96acd38 100644 --- a/packaging/repo/site/src/content/docs/manual/instalacion.md +++ b/packaging/repo/site/src/content/docs/manual/instalacion.md @@ -113,8 +113,10 @@ brew install --cask sgomez/rfirma/rfirma También puedes descargar `rfirma__aarch64.dmg` de la [última Release](https://github.com/sgomez/rfirma/releases/latest) y arrastrar -`rfirma.app` a Aplicaciones. Con Homebrew, rFirma se abre sin el aviso de Gatekeeper. -Con la descarga directa, macOS marca la aplicación como bajada de internet; quita la +`rfirma.app` a Aplicaciones. + +La primera vez, por cualquiera de las dos vías, macOS marca la aplicación como bajada +de internet y avisa al abrirla. Homebrew te muestra esta orden al instalar; quita la marca antes de abrirla: ```bash diff --git a/packaging/repo/site/src/i18n/ca.ts b/packaging/repo/site/src/i18n/ca.ts index e51d921b..55b725bc 100644 --- a/packaging/repo/site/src/i18n/ca.ts +++ b/packaging/repo/site/src/i18n/ca.ts @@ -163,7 +163,7 @@ export const ca: Dictionary = { "Requereix macOS 15.4 o posterior i un Mac amb Apple Silicon. Amb Homebrew, rFirma s'instal·la amb aquesta ordre i s'actualitza des de la mateixa aplicació.", "install.macos.download": "Descarrega el .dmg de macOS", "install.macos.note": - "Si descarregues el .dmg a mà en lloc d'usar Homebrew, macOS el marca com a descarregat d'internet i t'avisa en obrir-lo. Per llevar la marca, executa aquesta ordre després de copiar l'aplicació a Aplicacions:", + "La primera vegada, tant si instal·les amb Homebrew com si descarregues el .dmg, macOS marca l'aplicació com a descarregada d'internet i t'avisa en obrir-la. Per llevar la marca, executa aquesta ordre després d'instal·lar-la:", "transparency.kicker": "Transparència", "transparency.title": "Tot el codi, a la vista", diff --git a/packaging/repo/site/src/i18n/en.ts b/packaging/repo/site/src/i18n/en.ts index 1a604cec..0b4b4811 100644 --- a/packaging/repo/site/src/i18n/en.ts +++ b/packaging/repo/site/src/i18n/en.ts @@ -163,7 +163,7 @@ export const en: Dictionary = { "Requires macOS 15.4 or later and an Apple Silicon Mac. With Homebrew, rFirma installs with this command and updates from within the app.", "install.macos.download": "Download the macOS .dmg", "install.macos.note": - "If you download the .dmg by hand instead of using Homebrew, macOS flags it as downloaded from the internet and warns you when you open it. To clear the flag, run this command after copying the app to Applications:", + "The first time, whether you install with Homebrew or download the .dmg, macOS flags the app as downloaded from the internet and warns you when you open it. To clear the flag, run this command after installing:", "transparency.kicker": "Transparency", "transparency.title": "All the code, in the open", diff --git a/packaging/repo/site/src/i18n/es.ts b/packaging/repo/site/src/i18n/es.ts index 65631128..f7e1a946 100644 --- a/packaging/repo/site/src/i18n/es.ts +++ b/packaging/repo/site/src/i18n/es.ts @@ -160,7 +160,7 @@ export const es = { "Requiere macOS 15.4 o posterior y un Mac con Apple Silicon. Con Homebrew, rFirma se instala con esta orden y se actualiza desde la propia aplicación.", "install.macos.download": "Descargar el .dmg de macOS", "install.macos.note": - "Si descargas el .dmg a mano en lugar de usar Homebrew, macOS lo marca como descargado de internet y avisa al abrirlo. Para quitar la marca, ejecuta esta orden tras copiar la aplicación a Aplicaciones:", + "La primera vez, tanto si instalas con Homebrew como si descargas el .dmg, macOS marca la aplicación como descargada de internet y avisa al abrirla. Para quitar la marca, ejecuta esta orden tras instalarla:", "transparency.kicker": "Transparencia", "transparency.title": "Todo el código, a la vista", diff --git a/packaging/repo/site/src/i18n/eu.ts b/packaging/repo/site/src/i18n/eu.ts index 973e049a..20781da9 100644 --- a/packaging/repo/site/src/i18n/eu.ts +++ b/packaging/repo/site/src/i18n/eu.ts @@ -165,7 +165,7 @@ export const eu: Dictionary = { "macOS 15.4 edo berriagoa eta Apple Silicon duen Mac bat behar da. Homebrew-rekin, rFirma agindu honekin instalatzen da eta aplikazioak berak eguneratzen du.", "install.macos.download": "Deskargatu macOSeko .dmg-a", "install.macos.note": - ".dmg-a Homebrew erabili beharrean eskuz deskargatzen baduzu, macOSek internetetik deskargatutako gisa markatzen du eta abisua ematen du irekitzean. Marka kentzeko, exekutatu agindu hau aplikazioa Aplikazioak karpetara kopiatu ondoren:", + "Lehen aldian, Homebrew-rekin instalatu zein .dmg-a deskargatu, macOSek aplikazioa internetetik deskargatutako gisa markatzen du eta abisua ematen du irekitzean. Marka kentzeko, exekutatu agindu hau instalatu ondoren:", "transparency.kicker": "Gardentasuna", "transparency.title": "Kode osoa, ikusgai", diff --git a/packaging/repo/site/src/i18n/gl.ts b/packaging/repo/site/src/i18n/gl.ts index 61f87c82..fdbe5106 100644 --- a/packaging/repo/site/src/i18n/gl.ts +++ b/packaging/repo/site/src/i18n/gl.ts @@ -162,7 +162,7 @@ export const gl: Dictionary = { "Require macOS 15.4 ou posterior e un Mac con Apple Silicon. Con Homebrew, rFirma instálase con esta orde e actualízase desde a propia aplicación.", "install.macos.download": "Descargar o .dmg de macOS", "install.macos.note": - "Se descargas o .dmg a man en lugar de usar Homebrew, macOS márcao como descargado de internet e avisa ao abrilo. Para quitar a marca, executa esta orde despois de copiar a aplicación a Aplicacións:", + "A primeira vez, tanto se instalas con Homebrew como se descargas o .dmg, macOS marca a aplicación como descargada de internet e avisa ao abrila. Para quitar a marca, executa esta orde despois de instalala:", "transparency.kicker": "Transparencia", "transparency.title": "Todo o código, á vista", From e7333f021a8488a7bf6c0098744299e213877369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez?= Date: Tue, 20 Oct 2026 11:54:28 +0200 Subject: [PATCH 3/6] feat(web): el .dmg de macOS se descarga del servidor propio, como el instalador de Windows --- packaging/repo/build-tree.sh | 7 ++- packaging/repo/build-tree.test.sh | 13 +++--- .../repo/site/src/components/Install.astro | 3 +- packaging/repo/site/src/layouts/Landing.astro | 9 ++-- .../site/src/scripts/server-download.test.ts | 35 +++++++++++++++ .../repo/site/src/scripts/server-download.ts | 43 +++++++++++++++++++ .../repo/site/src/scripts/windows-download.ts | 22 ---------- 7 files changed, 97 insertions(+), 35 deletions(-) create mode 100644 packaging/repo/site/src/scripts/server-download.test.ts create mode 100644 packaging/repo/site/src/scripts/server-download.ts delete mode 100644 packaging/repo/site/src/scripts/windows-download.ts diff --git a/packaging/repo/build-tree.sh b/packaging/repo/build-tree.sh index 02e3bb2a..b6c264e6 100755 --- a/packaging/repo/build-tree.sh +++ b/packaging/repo/build-tree.sh @@ -42,7 +42,7 @@ # /apt/ con dists/stable/main/binary-amd64/ # /rpm/ con repodata/ # /windows/ el `-setup.exe` y el `.sig` de cada version, y `latest.json` -# /macos/ el `.app.tar.gz` y el `.sig` de cada version que lo trae, y +# /macos/ el `.dmg`, el `.app.tar.gz` y el `.sig` de cada version que los trae, y # `latest.json` # # APT CON SUITE `stable` Y NO REPOSITORIO PLANO (ID-175): el plano es mas @@ -465,13 +465,16 @@ jq -n \ > "$arbol/windows/latest.json" # ----------------------------------------------------------------- 5. macos -- -# Como `windows/`, con las versiones estables que traen la actualizacion de macOS. +# Como `windows/`, con las versiones estables que traen la actualizacion de macOS y su `.dmg`. echo " macos: colocando las actualizaciones y latest.json" ultima_app="" for i in "${!versiones[@]}"; do [[ "${versiones[$i]}" == *-* ]] && continue [ -n "${app_de[$i]}" ] || continue cp "$serie/${versiones[$i]}/${app_de[$i]}" "$serie/${versiones[$i]}/${app_de[$i]}.sig" "$arbol/macos/" + while IFS= read -r nombre; do + cp "$serie/${versiones[$i]}/$nombre" "$arbol/macos/" + done < <(paquetes_del_formato "$serie/${versiones[$i]}" dmg) ultima_app="$i" done if [ -z "$ultima_app" ]; then diff --git a/packaging/repo/build-tree.test.sh b/packaging/repo/build-tree.test.sh index 1433398e..417da587 100755 --- a/packaging/repo/build-tree.test.sh +++ b/packaging/repo/build-tree.test.sh @@ -81,12 +81,13 @@ actualizacion_de_macos_de_pega() { local dir="$1" version="$2" echo "app $version" > "$dir/rFirma_${version}_aarch64.app.tar.gz" printf 'firma mac de %s\n' "$version" > "$dir/rFirma_${version}_aarch64.app.tar.gz.sig" + echo "dmg $version" > "$dir/rFirma_${version}_aarch64.dmg" "$raiz/scripts/packages-manifest.sh" write "$dir" } sin_actualizacion_de_macos() { local dir="$1" - rm -f "$dir"/*.app.tar.gz "$dir"/*.app.tar.gz.sig + rm -f "$dir"/*.app.tar.gz "$dir"/*.app.tar.gz.sig "$dir"/*.dmg jq 'map(select(.platform != "macos"))' "$dir/paquetes.json" > "$dir/paquetes.json.nuevo" mv "$dir/paquetes.json.nuevo" "$dir/paquetes.json" } @@ -289,6 +290,7 @@ echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_x64-setup.exe.sig" echo "de mas" > "$serie/v0.4.10/subido-a-mano.exe" echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_aarch64.app.tar.gz" echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_aarch64.app.tar.gz.sig" +echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_aarch64.dmg" # --------------------------------------------------------------------------- # El arbol, dos veces y en dos directorios distintos @@ -506,16 +508,17 @@ fi # --------------------------------------------------------------------------- # /macos/: la actualizacion y latest.json # --------------------------------------------------------------------------- -# macos_has_the_update_and_signature_of_every_version_that_brings_it +# macos_has_the_dmg_update_and_signature_of_every_version_that_brings_them faltan_de_macos=0 for version in 0.4.2 0.4.10; do - for fichero in "rFirma_${version}_aarch64.app.tar.gz" "rFirma_${version}_aarch64.app.tar.gz.sig"; do + for fichero in "rFirma_${version}_aarch64.dmg" "rFirma_${version}_aarch64.app.tar.gz" "rFirma_${version}_aarch64.app.tar.gz.sig"; do [ -f "$tmp/arbol/macos/$fichero" ] || { faltan_de_macos=1; echo " falta $fichero" >&2; } done done if [ "$faltan_de_macos" -eq 0 ] && [ -z "$(find "$tmp/arbol/macos" -name '*0.4.0*' -print -quit)" ] \ - && [ ! -e "$tmp/arbol/macos/rFirma_9.9.9_aarch64.app.tar.gz" ]; then - ok "macos/ trae la actualizacion y su .sig de cada version que la trae, y nada fuera del manifiesto" + && [ ! -e "$tmp/arbol/macos/rFirma_9.9.9_aarch64.app.tar.gz" ] \ + && [ ! -e "$tmp/arbol/macos/rFirma_9.9.9_aarch64.dmg" ]; then + ok "macos/ trae el .dmg, la actualizacion y su .sig de cada version que los trae, y nada fuera del manifiesto" else fail "macos/ no trae lo que dicen los manifiestos de la serie" fi diff --git a/packaging/repo/site/src/components/Install.astro b/packaging/repo/site/src/components/Install.astro index bc6f9abc..706b1c8f 100644 --- a/packaging/repo/site/src/components/Install.astro +++ b/packaging/repo/site/src/components/Install.astro @@ -126,7 +126,7 @@ flatpak install rfirma me.sgomez.rfirma
(".demo"); if (demo) { @@ -119,9 +119,8 @@ const structuredData = JSON.stringify(application).replaceAll("<", "\\u003c"); } } - const windowsDownload = document.querySelector("[data-windows-download]"); - if (windowsDownload) { - void mountWindowsDownload(windowsDownload); + for (const link of document.querySelectorAll("[data-server-download]")) { + void mountServerDownload(link, link.dataset.serverDownload as DownloadSystem); } mountReveal(Array.from(document.querySelectorAll("[data-reveal]"))); diff --git a/packaging/repo/site/src/scripts/server-download.test.ts b/packaging/repo/site/src/scripts/server-download.test.ts new file mode 100644 index 00000000..77c6e506 --- /dev/null +++ b/packaging/repo/site/src/scripts/server-download.test.ts @@ -0,0 +1,35 @@ +import { describe, expect, it } from "vitest"; +import { packageUrl } from "./server-download"; + +const origin = "https://rfirma.sgomez.me"; + +describe("packageUrl", () => { + it("offers the Windows installer the feed announces", () => { + const feed = { + platforms: { "windows-x86_64": { url: `${origin}/windows/rFirma_1.0.0_x64-setup.exe` } }, + }; + expect(packageUrl(feed, "windows", origin)).toBe( + `${origin}/windows/rFirma_1.0.0_x64-setup.exe`, + ); + }); + + it("offers the macOS dmg next to the update the feed announces", () => { + const feed = { + platforms: { "darwin-aarch64": { url: `${origin}/macos/rfirma_1.0.0_aarch64.app.tar.gz` } }, + }; + expect(packageUrl(feed, "macos", origin)).toBe(`${origin}/macos/rfirma_1.0.0_aarch64.dmg`); + }); + + it("keeps the Release when the feed points outside its own folder", () => { + const feed = { + platforms: { + "darwin-aarch64": { url: "https://example.com/macos/rfirma_1.0.0_aarch64.app.tar.gz" }, + }, + }; + expect(packageUrl(feed, "macos", origin)).toBeUndefined(); + }); + + it("keeps the Release when the feed lacks the platform", () => { + expect(packageUrl({ platforms: {} }, "macos", origin)).toBeUndefined(); + }); +}); diff --git a/packaging/repo/site/src/scripts/server-download.ts b/packaging/repo/site/src/scripts/server-download.ts new file mode 100644 index 00000000..29294d63 --- /dev/null +++ b/packaging/repo/site/src/scripts/server-download.ts @@ -0,0 +1,43 @@ +interface Feed { + platforms?: Record; +} + +const DOWNLOADS = { + windows: { platform: "windows-x86_64", file: (update: string) => update }, + // `just bundle` da a la actualización el nombre del .dmg. + macos: { + platform: "darwin-aarch64", + file: (update: string) => update.replace(/\.app\.tar\.gz$/, ".dmg"), + }, +} as const; + +export type DownloadSystem = keyof typeof DOWNLOADS; + +/** El paquete que el servidor anuncia en su feed; `undefined` si no está en el propio servidor. */ +export function packageUrl(feed: Feed, system: DownloadSystem, origin: string): string | undefined { + const { platform, file } = DOWNLOADS[system]; + const update = feed.platforms?.[platform]?.url; + if (!update?.startsWith(`${origin}/${system}/`)) { + return undefined; + } + return file(update); +} + +/** Apunta el enlace al paquete que anuncia el servidor; si no lo consigue, se queda en la Release. */ +export async function mountServerDownload( + link: HTMLAnchorElement, + system: DownloadSystem, +): Promise { + try { + const response = await fetch(`/${system}/latest.json`); + if (!response.ok) { + return; + } + const url = packageUrl((await response.json()) as Feed, system, location.origin); + if (url) { + link.href = url; + } + } catch { + // Sin el feed el enlace conserva su destino: la última Release. + } +} diff --git a/packaging/repo/site/src/scripts/windows-download.ts b/packaging/repo/site/src/scripts/windows-download.ts deleted file mode 100644 index 6aa3c2b5..00000000 --- a/packaging/repo/site/src/scripts/windows-download.ts +++ /dev/null @@ -1,22 +0,0 @@ -const FEED = "/windows/latest.json"; - -interface Feed { - platforms?: Record; -} - -/** Apunta el enlace al instalador que anuncia el servidor; si no lo consigue, se queda en la Release. */ -export async function mountWindowsDownload(link: HTMLAnchorElement): Promise { - try { - const response = await fetch(FEED); - if (!response.ok) { - return; - } - const feed = (await response.json()) as Feed; - const url = feed.platforms?.["windows-x86_64"]?.url; - if (url?.startsWith(`${location.origin}/windows/`)) { - link.href = url; - } - } catch { - // Sin el feed el enlace conserva su destino: la última Release. - } -} From eed03b2b0cfd02e55f607b8045eb4148eda577dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez?= Date: Tue, 20 Oct 2026 11:54:36 +0200 Subject: [PATCH 4/6] =?UTF-8?q?docs(web):=20instalar=20en=20Windows=20y=20?= =?UTF-8?q?macOS,=20en=20frases=20m=C3=A1s=20cortas=20y=20sin=20tecnicismo?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/content/docs/manual/instalacion.md | 40 ++++++++----------- packaging/repo/site/src/i18n/ca.ts | 8 ++-- packaging/repo/site/src/i18n/en.ts | 8 ++-- packaging/repo/site/src/i18n/es.ts | 8 ++-- packaging/repo/site/src/i18n/eu.ts | 8 ++-- packaging/repo/site/src/i18n/gl.ts | 8 ++-- 6 files changed, 37 insertions(+), 43 deletions(-) diff --git a/packaging/repo/site/src/content/docs/manual/instalacion.md b/packaging/repo/site/src/content/docs/manual/instalacion.md index b96acd38..801c357f 100644 --- a/packaging/repo/site/src/content/docs/manual/instalacion.md +++ b/packaging/repo/site/src/content/docs/manual/instalacion.md @@ -85,51 +85,45 @@ rFirma pide esos accesos porque los necesita para firmar: ## Windows -Descarga el instalador `rFirma_*_x64-setup.exe` de la -[última Release](https://github.com/sgomez/rfirma/releases/latest). Se instala para tu -usuario, sin permisos de administrador, y usa directamente el almacén de certificados -de Windows. +Descarga el instalador desde la [web](https://rfirma.sgomez.me/#instalacion) o la +[última Release](https://github.com/sgomez/rfirma/releases/latest). Se instala solo para +tu usuario, sin permisos de administrador, y usa los certificados que ya tienes en +Windows. -El instalador no está firmado con Authenticode, así que SmartScreen avisará al abrirlo. -Antes de ejecutarlo, comprueba que el fichero descargado es el publicado: baja -`SHA256SUMS` de la misma Release y compara el hash con la línea del instalador. +Windows avisará de que el instalador no está firmado: pulsa «Más información» y +«Ejecutar de todas formas». Si quieres comprobar la descarga, compara su hash con el de +`SHA256SUMS`, en la Release: ```powershell Get-FileHash .\rFirma_*_x64-setup.exe -Algorithm SHA256 Select-String rFirma_ .\SHA256SUMS ``` -Una vez instalado, rFirma se actualiza desde la propia aplicación: cada versión nueva -llega con su firma minisign, que se comprueba antes de instalarla. +Después, rFirma se actualiza sola. ## macOS -Necesitas macOS 15.4 o posterior y un Mac con Apple Silicon. La vía principal es -Homebrew: +Necesitas un Mac con Apple Silicon y macOS 15.4 o posterior. Instálala con Homebrew: ```bash brew install --cask sgomez/rfirma/rfirma ``` -También puedes descargar `rfirma__aarch64.dmg` de la -[última Release](https://github.com/sgomez/rfirma/releases/latest) y arrastrar -`rfirma.app` a Aplicaciones. +O descarga el `.dmg` desde la [web](https://rfirma.sgomez.me/#instalacion) y arrastra +rFirma a Aplicaciones. -La primera vez, por cualquiera de las dos vías, macOS marca la aplicación como bajada -de internet y avisa al abrirla. Homebrew te muestra esta orden al instalar; quita la -marca antes de abrirla: +La primera vez, macOS no la deja abrir porque no está firmada por Apple. Para +permitirlo, ejecuta esto en el Terminal: ```bash xattr -c /Applications/rfirma.app ``` -Las actualizaciones las hace rFirma desde la propia aplicación, con ambas vías. Tras -actualizar, el llavero puede volver a pedirte permiso para que rFirma use tus -certificados; es esperable. +Después, rFirma se actualiza sola. Tras cada actualización, el llavero puede volver a +pedirte permiso para usar tus certificados. -Antes de ejecutar `brew uninstall`, retira desde rFirma lo que dejó en tu usuario: el -certificado de la CA local y el manejador de `afirma://`. Homebrew solo borra la -aplicación. +Antes de `brew uninstall`, retira desde rFirma el certificado de la CA local y el +manejador de `afirma://`: Homebrew solo borra la aplicación. ## La huella de la clave GPG diff --git a/packaging/repo/site/src/i18n/ca.ts b/packaging/repo/site/src/i18n/ca.ts index 55b725bc..2a7a343d 100644 --- a/packaging/repo/site/src/i18n/ca.ts +++ b/packaging/repo/site/src/i18n/ca.ts @@ -154,16 +154,16 @@ export const ca: Dictionary = { "Per no deixar el certificat de rFirma al navegador, prem Retira el certificat al panell d'estat abans de desinstal·lar.", "install.windows.title": "rFirma per a Windows", "install.windows.body": - "Instal·lador per al teu usuari, sense permisos d'administrador. Fa servir directament l'emmagatzem de certificats de Windows (MS-CAPI / CNG) i, un cop instal·lat, s'actualitza des de la mateixa aplicació: cada versió nova arriba amb la seua signatura minisign, que es comprova abans d'instal·lar-la.", + "S'instal·la només per al teu usuari, sense permisos d'administrador. Fa servir els certificats que ja tens a Windows i s'actualitza sola.", "install.windows.download": "Descarrega l'instal·lador de Windows", "install.windows.note": - 'Verifica el que descarregues: baixa SHA256SUMS de la Release i comprova que el hash de l\'instal·lador coincideix amb la seua línia. L\'instal·lador no està signat amb Authenticode, així que SmartScreen t\'avisarà en obrir-lo.', + 'Windows t\'avisarà que l\'instal·lador no està signat: prem «Més informació» i «Executa igualment». Si vols comprovar la baixada, compara el seu hash amb el de SHA256SUMS, a la Release:', "install.macos.title": "rFirma per a macOS", "install.macos.body": - "Requereix macOS 15.4 o posterior i un Mac amb Apple Silicon. Amb Homebrew, rFirma s'instal·la amb aquesta ordre i s'actualitza des de la mateixa aplicació.", + "Per a Mac amb Apple Silicon i macOS 15.4 o posterior. Instal·la-la amb Homebrew o baixa el .dmg i arrossega rFirma a Aplicacions. Després s'actualitza sola.", "install.macos.download": "Descarrega el .dmg de macOS", "install.macos.note": - "La primera vegada, tant si instal·les amb Homebrew com si descarregues el .dmg, macOS marca l'aplicació com a descarregada d'internet i t'avisa en obrir-la. Per llevar la marca, executa aquesta ordre després d'instal·lar-la:", + "La primera vegada, macOS no la deixa obrir perquè no està signada per Apple. Per permetre-ho, executa això al Terminal:", "transparency.kicker": "Transparència", "transparency.title": "Tot el codi, a la vista", diff --git a/packaging/repo/site/src/i18n/en.ts b/packaging/repo/site/src/i18n/en.ts index 0b4b4811..217e85d8 100644 --- a/packaging/repo/site/src/i18n/en.ts +++ b/packaging/repo/site/src/i18n/en.ts @@ -154,16 +154,16 @@ export const en: Dictionary = { "To leave no rFirma certificate behind in your browser, click Withdraw certificate in the status panel before uninstalling.", "install.windows.title": "rFirma for Windows", "install.windows.body": - "Per-user installer, no administrator rights needed. It uses the Windows certificate store (MS-CAPI / CNG) directly and, once installed, updates from within the app: every new version arrives with its minisign signature, which is checked before installing it.", + "Installs for your user only, without administrator rights. It uses the certificates you already have in Windows and updates itself.", "install.windows.download": "Download the Windows installer", "install.windows.note": - 'Verify what you download: get SHA256SUMS from the Release and check that the installer\'s hash matches its line. The installer is not Authenticode-signed, so SmartScreen will warn you when you open it.', + 'Windows will warn you that the installer isn\'t signed: click “More info” and “Run anyway”. To check the download, compare its hash with the one in SHA256SUMS, in the Release:', "install.macos.title": "rFirma for macOS", "install.macos.body": - "Requires macOS 15.4 or later and an Apple Silicon Mac. With Homebrew, rFirma installs with this command and updates from within the app.", + "For Apple Silicon Macs with macOS 15.4 or later. Install it with Homebrew, or download the .dmg and drag rFirma to Applications. It then updates itself.", "install.macos.download": "Download the macOS .dmg", "install.macos.note": - "The first time, whether you install with Homebrew or download the .dmg, macOS flags the app as downloaded from the internet and warns you when you open it. To clear the flag, run this command after installing:", + "The first time, macOS won't open it because it isn't signed by Apple. To allow it, run this in Terminal:", "transparency.kicker": "Transparency", "transparency.title": "All the code, in the open", diff --git a/packaging/repo/site/src/i18n/es.ts b/packaging/repo/site/src/i18n/es.ts index f7e1a946..3fbbd2e1 100644 --- a/packaging/repo/site/src/i18n/es.ts +++ b/packaging/repo/site/src/i18n/es.ts @@ -151,16 +151,16 @@ export const es = { "Para no dejar el certificado de rFirma en el navegador, pulsa Retirar certificado en el panel de estado antes de desinstalar.", "install.windows.title": "rFirma para Windows", "install.windows.body": - "Instalador para tu usuario, sin permisos de administrador. Usa directamente el almacén de certificados de Windows (MS-CAPI / CNG) y, una vez instalado, se actualiza desde la propia aplicación: cada versión nueva llega con su firma minisign, que se comprueba antes de instalarla.", + "Se instala solo para tu usuario, sin permisos de administrador. Usa los certificados que ya tienes en Windows y se actualiza sola.", "install.windows.download": "Descargar el instalador de Windows", "install.windows.note": - 'Verifica lo que descargas: baja SHA256SUMS de la Release y comprueba que el hash del instalador coincide con su línea. El instalador no está firmado con Authenticode, así que SmartScreen avisará al abrirlo.', + 'Windows avisará de que el instalador no está firmado: pulsa «Más información» y «Ejecutar de todas formas». Si quieres comprobar la descarga, compara su hash con el de SHA256SUMS, en la Release:', "install.macos.title": "rFirma para macOS", "install.macos.body": - "Requiere macOS 15.4 o posterior y un Mac con Apple Silicon. Con Homebrew, rFirma se instala con esta orden y se actualiza desde la propia aplicación.", + "Para Mac con Apple Silicon y macOS 15.4 o posterior. Instálala con Homebrew o descarga el .dmg y arrastra rFirma a Aplicaciones. Después se actualiza sola.", "install.macos.download": "Descargar el .dmg de macOS", "install.macos.note": - "La primera vez, tanto si instalas con Homebrew como si descargas el .dmg, macOS marca la aplicación como descargada de internet y avisa al abrirla. Para quitar la marca, ejecuta esta orden tras instalarla:", + "La primera vez, macOS no la deja abrir porque no está firmada por Apple. Para permitirlo, ejecuta esto en el Terminal:", "transparency.kicker": "Transparencia", "transparency.title": "Todo el código, a la vista", diff --git a/packaging/repo/site/src/i18n/eu.ts b/packaging/repo/site/src/i18n/eu.ts index 20781da9..8844203a 100644 --- a/packaging/repo/site/src/i18n/eu.ts +++ b/packaging/repo/site/src/i18n/eu.ts @@ -156,16 +156,16 @@ export const eu: Dictionary = { "rFirma-ren ziurtagiria nabigatzailean ez uzteko, sakatu Ziurtagiria kendu egoera-panelean, desinstalatu aurretik.", "install.windows.title": "rFirma Windowsentzat", "install.windows.body": - "Zure erabiltzailearentzako instalatzailea, administratzaile-baimenik gabe. Windowseko ziurtagiri-biltegia (MS-CAPI / CNG) zuzenean erabiltzen du eta, instalatu ondoren, aplikazioak berak eguneratzen du: bertsio berri bakoitza bere minisign sinadurarekin dator, eta instalatu aurretik egiaztatzen da.", + "Zure erabiltzailearentzat bakarrik instalatzen da, administratzaile-baimenik gabe. Windowsen dituzun ziurtagiriak erabiltzen ditu eta bere kabuz eguneratzen da.", "install.windows.download": "Deskargatu Windowseko instalatzailea", "install.windows.note": - 'Egiaztatu deskargatzen duzuna: jaitsi SHA256SUMS Release-tik eta begiratu instalatzailearen hash-a bere lerroarekin bat datorrela. Instalatzailea ez dago Authenticode-rekin sinatuta, beraz SmartScreen-ek abisua emango dizu irekitzean.', + 'Windowsek abisatuko dizu instalatzailea ez dagoela sinatuta: sakatu «Informazio gehiago» eta «Exekutatu hala ere». Deskarga egiaztatu nahi baduzu, alderatu bere hash-a Release-ko SHA256SUMS-ekoarekin:', "install.macos.title": "rFirma macOSentzat", "install.macos.body": - "macOS 15.4 edo berriagoa eta Apple Silicon duen Mac bat behar da. Homebrew-rekin, rFirma agindu honekin instalatzen da eta aplikazioak berak eguneratzen du.", + "macOS 15.4 edo berriagoa duten Apple Silicon Mac-entzat. Instalatu Homebrew-rekin, edo deskargatu .dmg-a eta arrastatu rFirma Aplikazioak karpetara. Gero bere kabuz eguneratzen da.", "install.macos.download": "Deskargatu macOSeko .dmg-a", "install.macos.note": - "Lehen aldian, Homebrew-rekin instalatu zein .dmg-a deskargatu, macOSek aplikazioa internetetik deskargatutako gisa markatzen du eta abisua ematen du irekitzean. Marka kentzeko, exekutatu agindu hau instalatu ondoren:", + "Lehen aldian, macOSek ez du irekitzen uzten, Applek ez duelako sinatu. Baimentzeko, exekutatu hau Terminalean:", "transparency.kicker": "Gardentasuna", "transparency.title": "Kode osoa, ikusgai", diff --git a/packaging/repo/site/src/i18n/gl.ts b/packaging/repo/site/src/i18n/gl.ts index fdbe5106..515bb957 100644 --- a/packaging/repo/site/src/i18n/gl.ts +++ b/packaging/repo/site/src/i18n/gl.ts @@ -153,16 +153,16 @@ export const gl: Dictionary = { "Para non deixar o certificado de rFirma no navegador, preme Retirar certificado no panel de estado antes de desinstalar.", "install.windows.title": "rFirma para Windows", "install.windows.body": - "Instalador para o teu usuario, sen permisos de administrador. Usa directamente o almacén de certificados de Windows (MS-CAPI / CNG) e, unha vez instalado, actualízase desde a propia aplicación: cada versión nova chega coa súa sinatura minisign, que se comproba antes de instalala.", + "Instálase só para o teu usuario, sen permisos de administrador. Usa os certificados que xa tes en Windows e actualízase soa.", "install.windows.download": "Descargar o instalador de Windows", "install.windows.note": - 'Verifica o que descargas: baixa SHA256SUMS da Release e comproba que o hash do instalador coincide coa súa liña. O instalador non está asinado con Authenticode, así que SmartScreen avisarache ao abrilo.', + 'Windows avisará de que o instalador non está asinado: preme «Máis información» e «Executar de todos os xeitos». Se queres comprobar a descarga, compara o seu hash co de SHA256SUMS, na Release:', "install.macos.title": "rFirma para macOS", "install.macos.body": - "Require macOS 15.4 ou posterior e un Mac con Apple Silicon. Con Homebrew, rFirma instálase con esta orde e actualízase desde a propia aplicación.", + "Para Mac con Apple Silicon e macOS 15.4 ou posterior. Instálaa con Homebrew ou descarga o .dmg e arrastra rFirma a Aplicacións. Despois actualízase soa.", "install.macos.download": "Descargar o .dmg de macOS", "install.macos.note": - "A primeira vez, tanto se instalas con Homebrew como se descargas o .dmg, macOS marca a aplicación como descargada de internet e avisa ao abrila. Para quitar a marca, executa esta orde despois de instalala:", + "A primeira vez, macOS non a deixa abrir porque non está asinada por Apple. Para permitilo, executa isto no Terminal:", "transparency.kicker": "Transparencia", "transparency.title": "Todo o código, á vista", From f10c16199dfc4ab98c9c80f7d607c385de1bbe9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez?= Date: Tue, 20 Oct 2026 11:55:44 +0200 Subject: [PATCH 5/6] =?UTF-8?q?chore(repo):=20el=20.dmg=20en=20el=20=C3=A1?= =?UTF-8?q?rbol=20publicado=20va=20en=20#2062?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packaging/repo/build-tree.sh | 7 ++----- packaging/repo/build-tree.test.sh | 13 +++++-------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packaging/repo/build-tree.sh b/packaging/repo/build-tree.sh index b6c264e6..02e3bb2a 100755 --- a/packaging/repo/build-tree.sh +++ b/packaging/repo/build-tree.sh @@ -42,7 +42,7 @@ # /apt/ con dists/stable/main/binary-amd64/ # /rpm/ con repodata/ # /windows/ el `-setup.exe` y el `.sig` de cada version, y `latest.json` -# /macos/ el `.dmg`, el `.app.tar.gz` y el `.sig` de cada version que los trae, y +# /macos/ el `.app.tar.gz` y el `.sig` de cada version que lo trae, y # `latest.json` # # APT CON SUITE `stable` Y NO REPOSITORIO PLANO (ID-175): el plano es mas @@ -465,16 +465,13 @@ jq -n \ > "$arbol/windows/latest.json" # ----------------------------------------------------------------- 5. macos -- -# Como `windows/`, con las versiones estables que traen la actualizacion de macOS y su `.dmg`. +# Como `windows/`, con las versiones estables que traen la actualizacion de macOS. echo " macos: colocando las actualizaciones y latest.json" ultima_app="" for i in "${!versiones[@]}"; do [[ "${versiones[$i]}" == *-* ]] && continue [ -n "${app_de[$i]}" ] || continue cp "$serie/${versiones[$i]}/${app_de[$i]}" "$serie/${versiones[$i]}/${app_de[$i]}.sig" "$arbol/macos/" - while IFS= read -r nombre; do - cp "$serie/${versiones[$i]}/$nombre" "$arbol/macos/" - done < <(paquetes_del_formato "$serie/${versiones[$i]}" dmg) ultima_app="$i" done if [ -z "$ultima_app" ]; then diff --git a/packaging/repo/build-tree.test.sh b/packaging/repo/build-tree.test.sh index 417da587..1433398e 100755 --- a/packaging/repo/build-tree.test.sh +++ b/packaging/repo/build-tree.test.sh @@ -81,13 +81,12 @@ actualizacion_de_macos_de_pega() { local dir="$1" version="$2" echo "app $version" > "$dir/rFirma_${version}_aarch64.app.tar.gz" printf 'firma mac de %s\n' "$version" > "$dir/rFirma_${version}_aarch64.app.tar.gz.sig" - echo "dmg $version" > "$dir/rFirma_${version}_aarch64.dmg" "$raiz/scripts/packages-manifest.sh" write "$dir" } sin_actualizacion_de_macos() { local dir="$1" - rm -f "$dir"/*.app.tar.gz "$dir"/*.app.tar.gz.sig "$dir"/*.dmg + rm -f "$dir"/*.app.tar.gz "$dir"/*.app.tar.gz.sig jq 'map(select(.platform != "macos"))' "$dir/paquetes.json" > "$dir/paquetes.json.nuevo" mv "$dir/paquetes.json.nuevo" "$dir/paquetes.json" } @@ -290,7 +289,6 @@ echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_x64-setup.exe.sig" echo "de mas" > "$serie/v0.4.10/subido-a-mano.exe" echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_aarch64.app.tar.gz" echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_aarch64.app.tar.gz.sig" -echo "de mas" > "$serie/v0.4.10/rFirma_9.9.9_aarch64.dmg" # --------------------------------------------------------------------------- # El arbol, dos veces y en dos directorios distintos @@ -508,17 +506,16 @@ fi # --------------------------------------------------------------------------- # /macos/: la actualizacion y latest.json # --------------------------------------------------------------------------- -# macos_has_the_dmg_update_and_signature_of_every_version_that_brings_them +# macos_has_the_update_and_signature_of_every_version_that_brings_it faltan_de_macos=0 for version in 0.4.2 0.4.10; do - for fichero in "rFirma_${version}_aarch64.dmg" "rFirma_${version}_aarch64.app.tar.gz" "rFirma_${version}_aarch64.app.tar.gz.sig"; do + for fichero in "rFirma_${version}_aarch64.app.tar.gz" "rFirma_${version}_aarch64.app.tar.gz.sig"; do [ -f "$tmp/arbol/macos/$fichero" ] || { faltan_de_macos=1; echo " falta $fichero" >&2; } done done if [ "$faltan_de_macos" -eq 0 ] && [ -z "$(find "$tmp/arbol/macos" -name '*0.4.0*' -print -quit)" ] \ - && [ ! -e "$tmp/arbol/macos/rFirma_9.9.9_aarch64.app.tar.gz" ] \ - && [ ! -e "$tmp/arbol/macos/rFirma_9.9.9_aarch64.dmg" ]; then - ok "macos/ trae el .dmg, la actualizacion y su .sig de cada version que los trae, y nada fuera del manifiesto" + && [ ! -e "$tmp/arbol/macos/rFirma_9.9.9_aarch64.app.tar.gz" ]; then + ok "macos/ trae la actualizacion y su .sig de cada version que la trae, y nada fuera del manifiesto" else fail "macos/ no trae lo que dicen los manifiestos de la serie" fi From 18e777850c94eb4edd5e103c13a6b206adb547cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez?= Date: Tue, 20 Oct 2026 12:02:21 +0200 Subject: [PATCH 6/6] docs(web): sin explicar el arrastre del .dmg --- packaging/repo/site/src/content/docs/manual/instalacion.md | 3 +-- packaging/repo/site/src/i18n/ca.ts | 2 +- packaging/repo/site/src/i18n/en.ts | 2 +- packaging/repo/site/src/i18n/es.ts | 2 +- packaging/repo/site/src/i18n/eu.ts | 2 +- packaging/repo/site/src/i18n/gl.ts | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packaging/repo/site/src/content/docs/manual/instalacion.md b/packaging/repo/site/src/content/docs/manual/instalacion.md index 801c357f..52b0de9f 100644 --- a/packaging/repo/site/src/content/docs/manual/instalacion.md +++ b/packaging/repo/site/src/content/docs/manual/instalacion.md @@ -109,8 +109,7 @@ Necesitas un Mac con Apple Silicon y macOS 15.4 o posterior. Instálala con Home brew install --cask sgomez/rfirma/rfirma ``` -O descarga el `.dmg` desde la [web](https://rfirma.sgomez.me/#instalacion) y arrastra -rFirma a Aplicaciones. +O descarga el `.dmg` desde la [web](https://rfirma.sgomez.me/#instalacion). La primera vez, macOS no la deja abrir porque no está firmada por Apple. Para permitirlo, ejecuta esto en el Terminal: diff --git a/packaging/repo/site/src/i18n/ca.ts b/packaging/repo/site/src/i18n/ca.ts index 2a7a343d..f9333855 100644 --- a/packaging/repo/site/src/i18n/ca.ts +++ b/packaging/repo/site/src/i18n/ca.ts @@ -160,7 +160,7 @@ export const ca: Dictionary = { 'Windows t\'avisarà que l\'instal·lador no està signat: prem «Més informació» i «Executa igualment». Si vols comprovar la baixada, compara el seu hash amb el de SHA256SUMS, a la Release:', "install.macos.title": "rFirma per a macOS", "install.macos.body": - "Per a Mac amb Apple Silicon i macOS 15.4 o posterior. Instal·la-la amb Homebrew o baixa el .dmg i arrossega rFirma a Aplicacions. Després s'actualitza sola.", + "Per a Mac amb Apple Silicon i macOS 15.4 o posterior. Instal·la-la amb Homebrew o amb el .dmg. Després s'actualitza sola.", "install.macos.download": "Descarrega el .dmg de macOS", "install.macos.note": "La primera vegada, macOS no la deixa obrir perquè no està signada per Apple. Per permetre-ho, executa això al Terminal:", diff --git a/packaging/repo/site/src/i18n/en.ts b/packaging/repo/site/src/i18n/en.ts index 217e85d8..bfc8ff7e 100644 --- a/packaging/repo/site/src/i18n/en.ts +++ b/packaging/repo/site/src/i18n/en.ts @@ -160,7 +160,7 @@ export const en: Dictionary = { 'Windows will warn you that the installer isn\'t signed: click “More info” and “Run anyway”. To check the download, compare its hash with the one in SHA256SUMS, in the Release:', "install.macos.title": "rFirma for macOS", "install.macos.body": - "For Apple Silicon Macs with macOS 15.4 or later. Install it with Homebrew, or download the .dmg and drag rFirma to Applications. It then updates itself.", + "For Apple Silicon Macs with macOS 15.4 or later. Install it with Homebrew or the .dmg. It then updates itself.", "install.macos.download": "Download the macOS .dmg", "install.macos.note": "The first time, macOS won't open it because it isn't signed by Apple. To allow it, run this in Terminal:", diff --git a/packaging/repo/site/src/i18n/es.ts b/packaging/repo/site/src/i18n/es.ts index 3fbbd2e1..4094ddf3 100644 --- a/packaging/repo/site/src/i18n/es.ts +++ b/packaging/repo/site/src/i18n/es.ts @@ -157,7 +157,7 @@ export const es = { 'Windows avisará de que el instalador no está firmado: pulsa «Más información» y «Ejecutar de todas formas». Si quieres comprobar la descarga, compara su hash con el de SHA256SUMS, en la Release:', "install.macos.title": "rFirma para macOS", "install.macos.body": - "Para Mac con Apple Silicon y macOS 15.4 o posterior. Instálala con Homebrew o descarga el .dmg y arrastra rFirma a Aplicaciones. Después se actualiza sola.", + "Para Mac con Apple Silicon y macOS 15.4 o posterior. Instálala con Homebrew o con el .dmg. Después se actualiza sola.", "install.macos.download": "Descargar el .dmg de macOS", "install.macos.note": "La primera vez, macOS no la deja abrir porque no está firmada por Apple. Para permitirlo, ejecuta esto en el Terminal:", diff --git a/packaging/repo/site/src/i18n/eu.ts b/packaging/repo/site/src/i18n/eu.ts index 8844203a..235efea0 100644 --- a/packaging/repo/site/src/i18n/eu.ts +++ b/packaging/repo/site/src/i18n/eu.ts @@ -162,7 +162,7 @@ export const eu: Dictionary = { 'Windowsek abisatuko dizu instalatzailea ez dagoela sinatuta: sakatu «Informazio gehiago» eta «Exekutatu hala ere». Deskarga egiaztatu nahi baduzu, alderatu bere hash-a Release-ko SHA256SUMS-ekoarekin:', "install.macos.title": "rFirma macOSentzat", "install.macos.body": - "macOS 15.4 edo berriagoa duten Apple Silicon Mac-entzat. Instalatu Homebrew-rekin, edo deskargatu .dmg-a eta arrastatu rFirma Aplikazioak karpetara. Gero bere kabuz eguneratzen da.", + "macOS 15.4 edo berriagoa duten Apple Silicon Mac-entzat. Instalatu Homebrew-rekin edo .dmg-arekin. Gero bere kabuz eguneratzen da.", "install.macos.download": "Deskargatu macOSeko .dmg-a", "install.macos.note": "Lehen aldian, macOSek ez du irekitzen uzten, Applek ez duelako sinatu. Baimentzeko, exekutatu hau Terminalean:", diff --git a/packaging/repo/site/src/i18n/gl.ts b/packaging/repo/site/src/i18n/gl.ts index 515bb957..d85ccbe9 100644 --- a/packaging/repo/site/src/i18n/gl.ts +++ b/packaging/repo/site/src/i18n/gl.ts @@ -159,7 +159,7 @@ export const gl: Dictionary = { 'Windows avisará de que o instalador non está asinado: preme «Máis información» e «Executar de todos os xeitos». Se queres comprobar a descarga, compara o seu hash co de SHA256SUMS, na Release:', "install.macos.title": "rFirma para macOS", "install.macos.body": - "Para Mac con Apple Silicon e macOS 15.4 ou posterior. Instálaa con Homebrew ou descarga o .dmg e arrastra rFirma a Aplicacións. Despois actualízase soa.", + "Para Mac con Apple Silicon e macOS 15.4 ou posterior. Instálaa con Homebrew ou co .dmg. Despois actualízase soa.", "install.macos.download": "Descargar o .dmg de macOS", "install.macos.note": "A primeira vez, macOS non a deixa abrir porque non está asinada por Apple. Para permitilo, executa isto no Terminal:",