1. ¿Qué es un archivo .pkpass?
Un archivo .pkpass es un paquete firmado digitalmente que entrega un único pase a Apple Wallet, la app de iPhone, iPad, Apple Watch y Mac donde los usuarios guardan tarjetas de embarque, entradas para eventos, cupones, tarjetas de fidelidad, llaves de hotel, billetes de transporte y credenciales similares. Apple presentó el formato el 11 de junio de 2012 en la WWDC con el nombre Passbook, y lo lanzó tres meses después en iOS 6, el 19 de septiembre de 2012. Pasó a llamarse Apple Wallet con iOS 9 en septiembre de 2015, un año después de que Apple Pay debutara en iOS 8.1, consolidando pases y tarjetas de pago bajo una única marca Wallet. El formato de archivo subyacente y el framework para desarrolladores —PassKit— han mantenido la compatibilidad todo el camino.
Mecánicamente, un .pkpass es un archivo ZIP renombrado con la extensión .pkpass. En su interior hay un archivo JSON llamado pass.json que describe el pase, unas cuantas imágenes PNG, un manifest.json con los hashes SHA-1 de cada uno de los demás archivos y un archivo signature que demuestra que el pase procede de un equipo registrado de Apple Developer. El tipo MIME es application/vnd.apple.pkpass: Apple Mail, Safari y la mayoría de las apps de correo modernas se basan en él para activar la previsualización de «Añadir a Apple Wallet» cuando el usuario toca el adjunto.
El formato es abierto en estructura y cerrado en confianza: los datos son JSON y PNG documentados en la Wallet Developer Guide de Apple, pero una firma PKCS#7 vincula cada pase a un certificado Pass Type ID emitido a un único equipo de Apple Developer. Cualquiera puede leer un .pkpass, pero solo ese equipo puede producir uno nuevo que Wallet acepte instalar.
Los emisores —aerolíneas, recintos, comercios, agencias de transporte, hoteles, empleadores— generan un .pkpass en su backend y se lo envían al cliente por correo electrónico, un enlace SMS o una app personalizada. El cliente toca el archivo, Wallet renderiza una previsualización y, un toque después, queda en su dispositivo. A partir de ahí, Apple Wallet puede mantener el pase actualizado a través de un canal de push, mostrarlo en la pantalla de bloqueo en el momento y lugar adecuados y (en tarjetas de embarque y entradas) entregarlo automáticamente al Apple Watch o a los lectores NFC.
Si todavía no tienes un pase con el que practicar, puedes crear uno en menos de un minuto a partir de cualquier código de barras y seguir todo lo que viene a continuación.
2. Formato de archivo .pkpass
Un .pkpass es un archivo PKZip estándar. Puedes renombrar example.pkpass a example.zip y cualquier herramienta de zip listará y extraerá su contenido. El archivo debe contener los archivos del pase en su raíz: envolverlos en una carpeta es la causa más común de que un pase hecho a mano no se instale. Por dentro, el conjunto de archivos es pequeño y previsible.
| Archivo | ¿Obligatorio? | Función |
|---|---|---|
pass.json | Sí | El pase en sí: campos, colores, código de barras, identificadores. |
manifest.json | Sí | Hash SHA-1 de cada uno de los demás archivos, indexado por ruta relativa. |
signature | Sí | Firma desprendida PKCS#7 sobre manifest.json. |
icon.png (+ @2x, @3x) | Sí | Se muestra en notificaciones y en el reverso del pase. |
logo.png (+ @2x, @3x) | Recomendado | Logotipo de cabecera del pase, arriba a la izquierda en el anverso. |
strip.png (+ @2x, @3x) | Depende del estilo | Banner a todo lo ancho en cupones, tarjetas de fidelidad y entradas. |
thumbnail.png (+ @2x, @3x) | Depende del estilo | Imagen cuadrada en entradas para eventos y pases genéricos. |
background.png (+ @2x, @3x) | Opcional | Fondo desenfocado, solo en entradas para eventos. |
footer.png (+ @2x, @3x) | Tarjeta de embarque | Imagen situada justo encima del código de barras. |
{lang}.lproj/ | Opcional | Sustituciones de cadenas por idioma e imágenes localizadas. |
Dimensiones de las imágenes
Apple expresa los tamaños de imagen en puntos; @2x significa 2 píxeles por punto y @3x, 3. La mayoría de los emisores entregan recursos 1×, @2x y @3x para que el pase se vea nítido en cualquier pantalla, desde un Watch hasta un Pro Max. Los tamaños canónicos según la guía Pass Design and Creation de Apple son:
| Imagen | 1x (puntos) | @2x (píxeles) | @3x (píxeles) |
|---|---|---|---|
icon | 29 × 29 | 58 × 58 | 87 × 87 |
logo | hasta 160 × 50 | hasta 320 × 100 | hasta 480 × 150 |
thumbnail | 90 × 90 | 180 × 180 | 270 × 270 |
strip (entrada para evento) | 375 × 98 | 750 × 196 | 1125 × 294 |
strip (cupón, tarjeta de fidelidad) | 375 × 144 | 750 × 288 | 1125 × 432 |
background | 180 × 220 | 360 × 440 | 540 × 660 |
footer | 286 × 15 | 572 × 30 | 858 × 45 |
Las imágenes son PNG en sRGB, con canal alfa cuando la transparencia importa (icon, logo). Apple ha sido históricamente estricto con las dimensiones exactas de los strips de los cupones; un par de píxeles de más o de menos pueden producir recortes feos, pero suele instalarse igualmente.
Tipo MIME, extensión y codificación
- Extensión:
.pkpasspara un único pase;.pkpassespara un paquete de varios pases. - Tipo MIME:
application/vnd.apple.pkpass(único) oapplication/vnd.apple.pkpasses(paquete). - Codificación de caracteres: los archivos JSON son UTF-8. Los archivos
pass.stringslocalizados deben estar en UTF-16 si contienen cualquier carácter no ASCII; las herramientas de Apple leen mal en silencio los archivos de cadenas en UTF-8.
Localización
Para soportar varios idiomas, un emisor añade subdirectorios {lang}.lproj/; por ejemplo en.lproj/, fr.lproj/, ja.lproj/. Cada uno contiene un archivo pass.strings de pares clave/valor con traducciones y, opcionalmente, imágenes de reemplazo. En el momento de mostrar el pase, iOS escoge la localización disponible más cercana al idioma del dispositivo. La regla estricta de Apple: no pongas una imagen en el nivel superior y en una .lproj con el mismo nombre, porque produce un comportamiento indefinido.
3. Dentro de pass.json
En pass.json reside casi cada decisión interesante sobre un pase: qué aspecto tiene, qué datos muestra, dónde aparece y cómo se actualiza. El esquema está documentado en la PassKit Bundle Reference de Apple y se ha mantenido notablemente estable desde 2012.
Claves de nivel superior
Cada pase requiere seis claves; todo lo demás es opcional pero útil.
| Clave | Tipo | Obligatorio | Notas |
|---|---|---|---|
formatVersion | entero | Sí | Siempre 1. |
passTypeIdentifier | cadena | Sí | DNS inverso; debe coincidir con el UID del certificado de firma. |
serialNumber | cadena | Sí | Único dentro de un tipo de pase. Distingue mayúsculas y minúsculas. |
teamIdentifier | cadena | Sí | Apple Team ID de 10 caracteres. Debe coincidir con el OU del certificado. |
organizationName | cadena | Sí | Se muestra en notificaciones y en la pantalla de bloqueo. |
description | cadena | Sí | La utiliza VoiceOver. Es localizable. |
logoText | cadena | No | Texto plano que se renderiza junto al logo. |
foregroundColor / backgroundColor / labelColor | cadena | No | Estilo CSS rgb(r, g, b). El hex se ignora en silencio. |
expirationDate | ISO 8601 | No | Tras este momento, Wallet muestra el pase como caducado y deja de exponerlo en la pantalla de bloqueo, pero no lo borra automáticamente. |
relevantDate | ISO 8601 | No | Un único punto en el tiempo en el que el pase debe aparecer en la pantalla de bloqueo. La ventana varía según el estilo (tarjeta de embarque: ~1 hora antes). |
voided | booleano | No | Invalida el pase de forma permanente. |
locations | array | No | Hasta 10 entradas latitud/longitud. El pase aparece en la pantalla de bloqueo cerca de cualquiera de ellas. |
beacons | array | No | Hasta 10 entradas iBeacon UUID/major/minor. |
maxDistance | número | No | Sustituye el radio de geovalla por defecto (en metros) alrededor de locations. |
groupingIdentifier | cadena | No | Solo tarjetas de embarque y entradas. Los pases que comparten esta cadena se agrupan en una pila. |
sharingProhibited | booleano | No | Cuando vale true, impide que el usuario comparta el pase por AirDrop o Mensajes. |
associatedStoreIdentifiers / appLaunchURL | array / cadena | No | Promociona una app iOS complementaria desde el reverso del pase. |
barcodes | array | No | Array introducido en iOS 9; se muestra la primera entrada compatible. La forma antigua singular barcode está obsoleta pero sigue funcionando. |
webServiceURL + authenticationToken | cadena | No | Endpoint que el sistema de push de Apple puede llamar para actualizar el pase. |
nfc | dict | No | Carga útil NFC para el pago/canje por contacto. Restringido a socios de Apple Wallet for Business / VAS. |
semantics | dict | No | Metadatos estructurados (vuelo, evento, transporte) para Siri, Watch y la lógica de la pantalla de bloqueo. |
boardingPass / eventTicket / coupon / storeCard / generic | dict | Uno de ellos, obligatorio | Contiene los grupos de campos del estilo de pase elegido. |
Grupos de campos
Dentro del diccionario del estilo elegido, los campos se organizan en cinco arrays: headerFields, primaryFields, secondaryFields, auxiliaryFields y backFields. Cada uno es una lista de diccionarios de campo. Los campos de cabecera aparecen arriba a la derecha del pase y son visibles incluso cuando el pase está plegado en la pila de Wallet; los campos primarios son grandes y centrales; los secundarios y auxiliares son los pares pequeños etiqueta/valor en una fila debajo; los campos del reverso son todo lo que ves al tocar la i del reverso de la tarjeta.
Un diccionario de campo necesita key (único dentro del pase) y value; todo lo demás —label, alineación, formato de fechas y números, changeMessage, dataDetectorTypes, valores con atributos en HTML— es opcional. Los campos de fecha utilizan cadenas ISO 8601 y se formatean en el dispositivo según dateStyle, timeStyle y la localización del usuario.
Los campos del reverso son especiales por dos motivos: sus cadenas value se analizan en busca de URL, números de teléfono, fechas y direcciones, y se renderizan como enlaces tocables por defecto —puedes anularlo por campo con dataDetectorTypes: []— y admiten attributedValue con un pequeño subconjunto de HTML, del cual <a href> es el más útil porque permite asociar un texto visible distinto a la URL tocable. Los campos del reverso son el único lugar de un pase donde el usuario puede tocar contenido.
Códigos de barras
Un diccionario de código de barras tiene cuatro claves: format, message, messageEncoding y un altText opcional. Los cuatro formatos soportados son PKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec y PKBarcodeFormatCode128. Los formatos 2D (QR, PDF417, Aztec) se añadieron en iOS 9 junto con el nuevo array barcodes; antes de iOS 9, la clave singular barcode con Code 128 era el único mecanismo. Code 128 es un código de barras lineal 1D y no se renderiza en Apple Watch, así que los pases que vayan al Watch deben elegir QR, PDF417 o Aztec. messageEncoding es obligatorio y suele ser iso-8859-1; usa utf-8 cuando la carga útil contenga caracteres fuera de Latin-1.
Colores
El analizador de colores de Apple solo acepta la forma de función CSS rgb(R, G, B) con componentes enteros de 0 a 255. #RRGGBB, rgba() y los colores con nombre se ignoran en silencio, dejando que Wallet caiga a sus valores por defecto. Es uno de los motivos más comunes de que un pase se instale pero se vea mal: alguien pegó un valor hex y el analizador puso, sin avisar, negro sobre blanco.
Etiquetas semánticas
Desde iOS 12, el diccionario opcional semantics transporta metadatos estructurados que iOS utiliza para sugerencias de Siri, relevancia en la pantalla de bloqueo y conciencia de Apple Watch. Para un vuelo serían airlineCode + flightNumber + departureAirportCode + currentDepartureDate; para un evento, eventName + venueLocation + eventStartDate; para un pase de transporte, transitProvider + departureStationName + currentDepartureDate. Wallet usa estas etiquetas para vincular una tarjeta de embarque al rastreador de vuelos de Apple sin que el emisor tenga que montar ningún servicio web.
4. Cómo funciona la firma
La firma es lo que separa un pase auténtico de uno manipulado o falsificado. Esta es la cadena de confianza, de arriba a abajo:
- Apple Root CA: la raíz offline de Apple, incrustada en los almacenes de confianza de iOS, macOS y watchOS.
- Intermedio Apple Worldwide Developer Relations (WWDR): Apple ha rotado este intermedio varias veces. Las generaciones de la G2 a la G6 están todas emitidas y son válidas para distintos tipos de certificado; los certificados Pass Type ID han encadenado durante años a través del WWDR original (y ahora a través de generaciones más nuevas a medida que Apple las rota). La firma debe incluir la generación de WWDR a través de la que se encadena el certificado Pass Type ID. Tutoriales antiguos dejan codificado un intermedio caducado; si la firma falla, vuelve a descargar el certificado WWDR que coincida con la generación de tu Pass Type ID desde apple.com/certificateauthority.
- Certificado Pass Type ID: emitido a un único equipo de Apple Developer, atado a un único pass type identifier en DNS inverso (por ejemplo,
pass.com.example.coupon). Es el certificado hoja cuya clave privada firma cada pase.
Cada certificado Pass Type ID codifica el pass type identifier como UID en su sujeto y la Team ID de 10 caracteres del equipo como OU. Apple Wallet comprueba ambos en el momento de la instalación.
El procedimiento de firma
Según la guía oficial de Apple, los pasos son:
- Construye el paquete del pase sin firmar:
pass.jsonmás todas las imágenes, en un directorio. - Recorre el directorio recursivamente, calcula el SHA-1 del contenido de cada archivo y escribe el resultado en
manifest.jsoncomo un objeto JSON que asocia cada ruta relativa a su digest SHA-1 en hex; por ejemplo,"icon.png"→"abc123…","pass.json"→"def456…". No incluyasmanifest.jsonnisignaturea sí mismos. - Genera una firma desprendida PKCS#7 sobre los bytes de
manifest.json, con la clave privada del certificado Pass Type ID. Incluye en la firma el certificado intermedio WWDR correspondiente para que Wallet pueda construir una cadena hasta la raíz de Apple, y transporta el atributo S/MIMEsigning-time. - Comprime el contenido del directorio del pase (no el directorio en sí) en un archivo con la extensión
.pkpass.
La mayoría de las implementaciones de referencia utilizan OpenSSL para el paso de la firma:
openssl smime -binary -sign \
-certfile WWDR.pem \
-signer passcert.pem \
-inkey passkey.pem \
-in manifest.json \
-out signature \
-outform DER
Apple también incluye una pequeña herramienta en Objective-C llamada signpass dentro del archivo Wallet Companion Files que envuelve la misma lógica.
Qué valida iOS
Cuando un usuario abre un .pkpass, Apple Wallet ejecuta más o menos esta comprobación:
- Analiza el ZIP; carga
manifest.json,signatureypass.json. - Verifica la firma desprendida PKCS#7 sobre los bytes exactos de
manifest.json. - Construye una cadena de certificados desde el certificado hoja, pasando por el intermedio WWDR incluido, hasta Apple Root CA, y comprueba que el hoja no esté caducado ni revocado.
- Vuelve a calcular el hash de cada archivo del paquete y confirma que cada digest coincide con el valor de
manifest.json. - Confirma que
passTypeIdentifierenpass.jsones igual alUIDdel certificado hoja, y queteamIdentifieres igual alOUdel certificado.
Cualquier fallo produce un error genérico de instalación; iOS no le dice al usuario (ni al desarrollador) qué paso ha fallado. Por eso casi todas las sesiones de depuración «este pase no se puede instalar» empiezan verificando los hashes del manifiesto y la cadena de certificados.
Por qué no puedes volver a firmar el pase de otra persona
El certificado Pass Type ID se ata, en el momento de su emisión, a un equipo y un identificador. Apple no emitirá un certificado para el identificador de otra persona, y cambiar passTypeIdentifier en pass.json por uno tuyo rompe el manifiesto y el canal de actualizaciones push por pase basado en él. Así que, incluso teniendo el .pkpass original en la mano, no puedes volver a firmar el pase de un tercero con tu propio certificado y conseguir que se instale; es así por diseño.
5. Cómo abrir un archivo .pkpass
Dónde puedes abrir un .pkpass —y qué funciones se conservan— depende de la plataforma.
Abrir un archivo .pkpass en iPhone, iPad y Apple Watch
La experiencia nativa. Toca el adjunto .pkpass en Mail, Mensajes, Safari o Archivos: iOS reconoce el tipo MIME, abre una previsualización de Wallet a pantalla completa y ofrece un botón Añadir. Una vez añadido, el pase se sincroniza automáticamente con un Apple Watch emparejado. A partir de iOS 27 (que se lanzará en septiembre de 2026), Apple Wallet incluirá además un botón integrado Crear un pase que permitirá envolver cualquier código QR en un pase sin necesidad de cuenta de desarrollador; lo cubrimos aquí.
Abrir un archivo .pkpass en Mac
macOS no tiene una app Wallet; Wallet en Mac es solo un panel de ajustes para tarjetas de Apple Pay. Pero al hacer doble clic en un .pkpass desde el Finder se abre una app del sistema privada llamada Pass Viewer (/System/Library/CoreServices/Pass Viewer.app) que renderiza el pase y ofrece Añadir a Apple Wallet. La acción Añadir envía el pase a la cuenta de iCloud del usuario; a partir de ahí aparece en cada iPhone, iPad y Apple Watch que tenga sesión iniciada con la misma Apple ID. El propio Mac nunca almacena el pase localmente. Safari en macOS hace lo mismo cuando tocas un botón «Añadir a Apple Wallet» en una página web.
Abrir un archivo .pkpass en Android
Apple Wallet no está disponible en Android, pero, a fecha de 2026, puedes abrir un archivo .pkpass en Android de cinco maneras distintas:
- Google Wallet (nativo, parcial). Desde abril de 2024, Google Wallet en Android puede importar archivos .pkpass directamente: toca el archivo en tu gestor de archivos, en Gmail o en el navegador, y la hoja de compartir te ofrecerá Añadir a Google Wallet. El despliegue se controla por región, y los sitios web que detectan tu user-agent muchas veces ni siquiera ofrecen el archivo a un navegador Android. Como alternativa, puedes usar nuestro conversor PKPASS a Google Wallet en cualquier dispositivo para generar un enlace de guardado.
- Pass2U Wallet (
com.passesalliance.wallet). La opción de terceros más popular, actualizada por última vez en enero de 2026. Importa .pkpass, sondeawebServiceURLen busca de actualizaciones, puede hacer copia de seguridad en Google Drive y trae un diseñador de pases integrado. - WalletPasses (
io.walletpasses.android). Veterana, sin anuncios, admite notificaciones por geovalla e iBeacon. Última actualización en junio de 2025. - FossWallet (
nz.eloque.foss_wallet). La opción de código abierto activamente mantenida en 2026, GPL-3.0, en F-Droid. Sucesora de PassAndroid (que ya no instala los pases modernos de forma fiable). - PassWallet (
com.attidomobile.passwallet). La opción original de terceros; sigue manteniéndose, pero la interfaz acusa el paso del tiempo.
En cualquiera de ellas, los servicios NFC de valor añadido (toque al estilo de Apple Pay), la sincronización con Apple Watch y el modo Express no están disponibles. Las actualizaciones automáticas se sondean en lugar de empujarse vía APNs.
Abrir un archivo .pkpass en Windows, Linux y ChromeOS
No hay un manejador nativo. Tres buenas vías:
- Visor en el navegador. Suelta el archivo en nuestro Visor PKPASS: lo analiza todo del lado del cliente y muestra la previsualización de la tarjeta, cada campo y el
pass.jsonen bruto. - Convertir a PDF. Usa nuestro conversor PKPASS a PDF para obtener un A4 imprimible con el código de barras renderizado a resolución de impresión.
- Tratarlo como un ZIP. Renómbralo a
.zip(Windows) o ejecutaunzip pass.pkpass(Linux/macOS) e inspecciona los archivos directamente. Útil cuando solo quieres leerpass.json.
En ChromeOS, el subsistema de Android hace que Pass2U / WalletPasses sean la instalación más fácil si quieres soporte completo de lectura y actualización. Si no, la vía del visor en el navegador funciona en cualquier Chromebook.
6. Estilos de pase
Cada .pkpass es de uno de los cinco estilos, declarado por la clave de nivel superior presente en pass.json. El estilo controla la disposición, qué imágenes se utilizan y qué hace que el pase aparezca en la pantalla de bloqueo.
| Estilo | Extras obligatorios | Strip | Fondo | Thumbnail | Footer |
|---|---|---|---|---|---|
boardingPass | transitType (Air, Train, Bus, Boat, Generic) | — | — | — | Sí |
eventTicket | — | Opcional | Opcional | Sí | — |
coupon | — | Sí | — | — | — |
storeCard | — | Opcional | — | — | — |
generic | — | — | — | Sí | — |
Notas de comportamiento:
- boardingPass renderiza el origen y el destino como campos primarios sobredimensionados con un chevron entre ambos, con la imagen de footer justo encima del código de barras. Varios pases que comparten un
groupingIdentifierse agrupan en una pila. - eventTicket tiene dos presentaciones: un
background.pnga sangre (con fuerte desenfoque) con thumbnail y código de barras circular, o unstrip.pngen la parte superior sin thumbnail. Apple recomienda no mezclar las dos. - coupon está dominado por la imagen del strip; el texto primario se superpone.
suppressStripShinees lo más relevante aquí para diseños modernos y planos. - storeCard suele mostrar un saldo como campo primario. Cuando hay
nfc, la interfaz de canje por contacto de Wallet vive aquí. - generic es el diseño de respaldo: logo y thumbnail pequeños a la derecha, campo primario junto al logo. Úsalo para tarjetas de socio, identificaciones; cualquier cosa que no encaje en un estilo más específico.
7. Errores y resolución de problemas
Los errores de instalación de Apple Wallet son intencionadamente genéricos: «No se puede instalar este pase en el iPhone», «Este pase no es válido», «No se ha podido añadir el pase». Todos significan lo mismo: que ha fallado uno de los pasos de validación de la sección 4, pero iOS no dice cuál. Los sospechosos habituales, ordenados por frecuencia:
| Síntoma / mensaje | Causa probable | Solución |
|---|---|---|
| La instalación falla de inmediato; la firma no se verifica | El intermedio WWDR incluido no coincide con la generación de tu Pass Type ID | Descarga el intermedio WWDR correspondiente desde la página PKI de Apple y vuelve a firmar |
| La instalación falla; la firma es correcta pero el manifiesto no coincide | Se modificó un archivo después de generar el manifiesto; culpables habituales: PNG recodificados, BOM añadido, cambio de finales de línea, un .DS_Store colado | Recalcula los hashes de cada archivo y reconstruye manifest.json |
| «Pass type identifier doesn't match the certificate» | passTypeIdentifier en pass.json ≠ UID del certificado hoja; o teamIdentifier ≠ OU del certificado | Haz que ambos campos coincidan exactamente con el certificado |
| La instalación va bien pero los colores del pase salen mal | Se han usado hex o #RRGGBB para los colores | Cambia a rgb(R, G, B) con componentes enteros |
| La instalación va bien en Safari pero falla en Chrome iOS | El servidor devuelve un Content-Type incorrecto o sirve por POST | Sirve como application/vnd.apple.pkpass sobre GET |
| «El pase ya no es válido» | voided: true en pass.json, o el certificado hoja ha caducado | Vuelve a emitir el pase (y el certificado, si hace falta) |
| El ZIP contiene una carpeta inesperadamente | Quien lo creó comprimió el directorio en lugar de su contenido | Comprime el contenido, no el directorio que lo envuelve |
En caso de duda, suelta el pase en el Visor PKPASS: te dirá si el paquete siquiera se puede analizar, si la firma está presente, si pass.json valida y qué imágenes se incluyen. La mayoría de los pases que no se instalan se siguen analizando bien en el visor, lo que reduce el problema a la firma.
8. Crear un .pkpass
Tienes tres vías prácticas para crear un .pkpass.
- Usar una herramienta hospedada como WalletWallet. La vía más sencilla, rápida y gratuita: suelta un código de barras (o una foto de uno), elige los colores y obtén un
.pkpassfirmado. Pruébalo. Firmamos cada pase con nuestro propio certificado Pass Type ID, así que las instalaciones funcionan en cualquier iPhone, iPad, Watch y Mac sin que tengas que pasar por el Apple Developer Program. Guía completa de pase gratuito. - Hazlo tú con las herramientas de Apple. Registra un Pass Type ID en el portal de Apple Developer (membresía de 99 US$/año), descarga un certificado Pass Type ID y el intermedio WWDR correspondiente desde la página PKI de Apple, escribe tu propio
pass.json, genera el manifiesto y la firma con OpenSSL o con la herramientasignpassde Apple, y comprime. Las bibliotecas maduras específicas de cada lenguaje —passkit-generator(Node),alvinbaena/passkit(Go),applepassgenerator(Python),walletkit(Rust)— se encargan por ti del hashing del manifiesto y de los pasos de firma PKCS#7. - Usar una plataforma emisora hospedada. Passcreator, PassNinja, Passslot y servicios similares te permiten plantillar un pase, conectar tu propio certificado y enviar valores por POST para generar pases firmados. Útil cuando quieres actualizaciones push y una API pero no quieres hacerte cargo de la renovación del certificado.
Un pase es «gratis» de hospedar pero no de emitir a escala: la membresía de Apple Developer Program cuesta 99 US$ al año por equipo, los certificados se renuevan anualmente y el push de APNs para actualizaciones de pases es gratuito pero tiene límite de tasa.
9. Preguntas frecuentes
¿Es seguro abrir archivos .pkpass?
Un .pkpass es solo un ZIP de JSON y PNG; no se ejecuta código en tu dispositivo cuando lo añades a Wallet. La firma solo demuestra qué equipo de Apple Developer emitió el pase, no que el pase sea inocuo. El vector de estafa habitual no es malware, sino ingeniería social: un correo de phishing con una tarjeta de embarque falsa que enlaza a un sitio que recolecta credenciales. Trata los adjuntos .pkpass con el mismo escepticismo que cualquier otro enlace.
¿Puedo editar un .pkpass después de recibirlo?
No de ninguna forma que Apple Wallet acepte. La firma cubre manifest.json, que cubre todos los demás archivos, así que cambiar un solo byte invalida el paquete entero. Puedes leer todo lo que hay dentro (renómbralo a .zip o usa un visor), pero instalar una versión editada requiere una firma fresca con un certificado Pass Type ID.
¿Cuál es el tamaño máximo de un .pkpass?
Apple no publica un límite duro. En la práctica, los pases se mantienen muy por debajo de 1 MB porque los recursos son pequeños; los timeouts de descarga HTTPS y las pasarelas de correo se vuelven el techo práctico. El límite de 10 KB que se ve en algunas documentaciones de terceros se refiere a las cargas útiles de actualización push a través de relés concretos del emisor, no al archivo en sí.
¿Puede un .pkpass actualizarse automáticamente?
Sí, cuando el emisor incluye un webServiceURL y un authenticationToken (mínimo 16 caracteres). Apple Wallet registra el pase con el emisor, el emisor envía una notificación APNs vacía cuando algo cambia y Wallet descarga el nuevo pase por HTTPS. Un campo solo genera una notificación visible en la pantalla de bloqueo si su diccionario incluye una plantilla changeMessage (por ejemplo, "Puerta cambiada a %@"); sin ella, el pase se actualiza en silencio. Si el push o la descarga HTTPS fallan, Wallet reintenta con su propio backoff y el usuario sigue viendo la versión cacheada; no hay UI de fallo. Casos comunes: cambios de puerta en una tarjeta de embarque, actualizaciones de saldo en una tarjeta de fidelidad, revocación de una llave de hotel.
¿Por qué los archivos .pkpass siguen firmándose con SHA-1 en 2026?
Compatibilidad hacia atrás. Apple presentó PassKit en iOS 6 en 2012 con manifiestos SHA-1, y SHA-1 sigue siendo el algoritmo documentado y mejor soportado. La propiedad de integridad se mantiene porque la firma PKCS#7 cubre el manifiesto en su conjunto y utiliza algoritmos de firma modernos: una colisión SHA-1 sobre un archivo individual aún tendría que satisfacer el manifiesto firmado.
¿Es .pkpass lo mismo que .pkpasses?
Casi. .pkpass es un único pase; .pkpasses es un paquete de varios pases en un mismo ZIP, que se utiliza cuando un emisor quiere entregar, por ejemplo, las tarjetas de embarque de un padre y un hijo juntas. Apple Wallet muestra una pila y los añade todos con un único toque.
Herramientas y lecturas adicionales
- Visor PKPASS →
Inspecciona cualquier .pkpass en tu navegador: campos, imágenes, código de barras y
pass.jsonen bruto. - Conversor PKPASS a PDF →
Suelta un .pkpass y obtén un PDF A4 imprimible con un código de barras escaneable.
- Conversor PKPASS a Google Wallet →
Genera un enlace de guardado de Google Wallet con un solo toque a partir de cualquier .pkpass.
- Cómo crear un pase de Apple Wallet gratis →
La guía completa para pasar de un código de barras a un .pkpass firmado sin cuenta de desarrollador.
- iOS 27 añade un botón nativo para crear pases →
Lo que el creador de pases nativo de Apple hará y no hará cuando llegue iOS 27.