comunidadbóvedaborrar cuenta · app store

Borra la cuenta sin que Apple te rechace

Si estás haciendo una app con Claude y la vas a subir a la App Store de Apple, espera: hay un detalle que te la va a tumbar en la revisión — y peor, el consejo que anda rondando en redes para arreglarlo te puede meter en problemas legales. Apple exige un botón de borrar cuenta dentro de la app, y la forma correcta de hacerlo es un soft delete con anonimización irreversible — y Claude lo arma por ti.

App Store · Guideline 5.1.1(v) · obligatorio desde jun 2022 · GDPR + CCPA

La regla que tumba apps → por qué el consejo de redes es ilegal → el soft delete con anonimización irreversible que sí cumple

Desde el 30 de junio de 2022, Apple obliga: si tu app deja crear una cuenta, también tiene que dejar iniciar el borrado de esa cuenta desde dentro de la app. Solo ofrecer “desactivar” no basta — 5.1.1(v) es una de las causas más comunes de rechazo. El mensaje típico: “App allows account creation but there is no user-initiated delete account option.”

El consejo que circula en redes — “deja un placeholder con valores vacíos pero guarda el correo y el nombre reales escondidos” — falla por todos lados: viola GDPR Art. 17 y CCPA (el dato sigue ahí, la persona sigue siendo identificable) y Apple igual lo trata como un “disable” y rechaza. Lo correcto es soft delete con anonimización irreversible: sobrescribir el dato personal sin vuelta atrás (email → deleted-<uuid>@deleted.invalid), conservar el cascarón anónimo para no romper la app, y borrar la identidad de auth. Esta guía es la versión detallada del reel: la regla, la trampa, el patrón correcto, el flujo del botón y los prompts para que Claude lo implemente por ti.

App Store · Guideline 5.1.1Obligatorio desde jun 2022GDPR + CCPASoft delete + anonimizaciónClaude lo arma por ti

01 · La regla

La regla que te tumba la app

La Guideline 5.1.1(v) de la App Store es clara y es obligatoria desde el 30 de junio de 2022: si tu app permite crear una cuenta, también tiene que permitir iniciar el borrado de esa cuenta dentro de la app. No vale mandar a la persona a un correo, ni a un formulario web escondido. El botón tiene que estar ahí, fácil de encontrar — normalmente en Ajustes.

Y ojo con la trampa más común: ofrecer solo “desactivar” o “deshabilitar” la cuenta NO cumple. Apple lo dice con todas sus letras.

Lo que dice Apple, textual

“If your app supports account creation, you must also offer account deletion within the app… only offering to temporarily deactivate or disable an account is insufficient.”

Traducido: desactivar o deshabilitar NO basta. Y el botón debe ser fácil de encontrar (normalmente en Ajustes). Lo lees completo en la página oficial de Apple Developer.

Si tu app usa Sign in with Apple, hay un paso extra: cuando alguien borra su cuenta tienes que revocar el token con la REST API de Sign in with Apple. Y no creas que te salvas por tener login corporativo o SSO sin registro público: hasta apps con login solo para empleados han sido rechazadas por no ofrecer el borrado.

El mensaje de rechazo que le llega a tanta gente es siempre el mismo: “App allows account creation but there is no user-initiated delete account option.” Si lo recibiste, no es un misterio: te falta este botón.

02 · El consejo peligroso

El consejo peligroso de redes

Entonces la gente busca el atajo, y en redes circula uno que suena listo y es un desastre: “cuando borren la cuenta, deja un placeholder con valores vacíos en la pantalla, pero por debajo guarda el correo y el nombre reales escondidos”. Así —dicen— Apple ve la cuenta “borrada” y tú no pierdes tus datos. Suena práctico. Es ilegal y además no funciona.

Compara los tres caminos posibles antes de elegir. Solo uno cumple por las tres columnas.

Hard delete (borrar en seco)

¿Cumple Apple?

Sí borra la cuenta, eso cumple.

¿Cumple la ley?

El dato desaparece de verdad.

¿Rompe tu app?

Truena las foreign keys: pedidos y posts quedan huérfanos.

Esconder el dato (placeholder)

¿Cumple Apple?

Apple lo ve como un 'disable' y rechaza igual.

¿Cumple la ley?

Viola GDPR Art. 17 y CCPA: el dato sigue ahí.

¿Rompe tu app?

No rompe nada, pero por las razones equivocadas.

Soft delete + anonimización

¿Cumple Apple?

Inicia el borrado real desde la app.

¿Cumple la ley?

El dato personal se sobrescribe sin vuelta atrás.

¿Rompe tu app?

El cascarón anónimo conserva las relaciones.

Por qué esconder el dato viola la ley. El GDPR Art. 17 (derecho de supresión) más el Recital 26 dicen que mientras el dato siga existiendo, la persona sigue siendo “identificable” — o sea, no lo borraste. Y la CCPA §1798.105 usa el verbo “delete”: esconder no es borrar.

Por qué Apple igual te rechaza. Para Apple, dejar el dato escondido es lo mismo que un “disable” — la cuenta no se borró de verdad. Así que ni siquiera te ahorra el rechazo que querías evitar.

¿Y borrar la fila en seco (hard delete)? Tampoco. Si eliminas el usuario de golpe, todo lo que apunta a él —publicaciones, pedidos, comentarios— queda colgando de un id que ya no existe. Eso rompe las foreign keys y te truena la app.

03 · Lo correcto

Soft delete con anonimización irreversible

El patrón correcto tiene nombre y es más simple de lo que suena. En lugar de borrar la fila, la vacías de datos personales de forma que no haya vuelta atrás, y dejas un “cascarón” anónimo en su lugar. La cuenta ya no identifica a nadie, pero la fila sigue ahí para que las relaciones de la base no se rompan.

Esto es lo que se hace, campo por campo. La regla de oro: sobrescribir, no esconder, y que sea irreversible.

Email

Se reemplaza por un token aleatorio tipo deleted-<uuid>@deleted.invalid. Nunca un hash del correo original — un hash todavía permite identificar a la persona.

Nombre

Se sobrescribe con un valor genérico: "Usuario eliminado".

Teléfono · dirección · bio

Se vacían por completo. No queda rastro del texto original.

Foto de perfil

Se BORRA el archivo del storage, no solo el enlace. Si solo quitas la URL, la imagen sigue viva y descargable.

Estado de la cuenta

Se marca deleted_at con la fecha y hora. La fila sigue existiendo, pero ya está identificada como borrada.

El cascarón conserva las relaciones. Como la fila no desaparece, las foreign keys de pedidos, posts y comentarios siguen apuntando a algo válido. La app no se rompe; simplemente ese usuario ahora se llama “Usuario eliminado”.

No copies los originales a ningún lado. Nada de mandar el email y el nombre reales a una tabla de auditoría, logs o backup “por si acaso”. Eso anula todo el borrado: el dato sigue identificable en otro lugar.

Borra la identidad de auth y las sesiones. Si dejas viva la identidad del proveedor de auth, el mismo correo podría recuperar la cuenta vieja. Hay que borrarla para que, si la persona vuelve, empiece una cuenta nueva.

Retención legal. ¿Tienes que guardar facturas por obligación fiscal? Conserva la fila de la transacción, pero quítale el dato personal (pseudonimízala). Guardas el monto, no a quién.

Con esto cumples las tres cosas a la vez: cumples Apple (borraste de verdad desde la app), cumples la ley (el dato personal ya no es recuperable) y no rompes la app (el cascarón sostiene las relaciones).

04 · El botón

El flujo del botón (lo que Apple espera ver)

Apple no solo quiere que el borrado exista: quiere ver un flujo claro. Así se ve uno que pasa revisión sin dramas.

1. Dónde vive. En Ajustes o Perfil, fácil de encontrar. Nada de esconderlo tres menús adentro. 2. Confirmación. Pide reautenticación o que la persona escriba ELIMINAR — para que no sea un toque accidental. 3. Aviso de irreversibilidad. Deja claro que no hay deshacer. 4. Aviso de suscripción. Apple NO cancela la suscripción al borrar la cuenta; avisa y enlaza a apps.apple.com/account/subscriptions. 5. Cierre. Cierra sesión y muestra una pantalla de confirmación.

Estos son los casos borde que se le olvidan a casi todos — y que la revisión o la ley te pueden cobrar después.

Suscripciones

Apple NO cancela la suscripción cuando borras la cuenta. Hay que avisarle a la persona y enlazarla a apps.apple.com/account/subscriptions para que la cancele desde su Apple ID.

Retención legal

Facturas y registros financieros que la ley te obliga a guardar: conservas la fila de la transacción, pero le quitas el dato personal (la pseudonimizas). Guardas el monto, no a quién.

Backups que rotan solos

Si tu base hace backups automáticos, el dato viejo puede vivir ahí un tiempo. Está bien siempre que los backups expiren solos en un plazo razonable y no los uses para 'recuperar' a la persona.

Reuso del correo

Hay que borrar la identidad de auth y las sesiones para que el mismo correo no recupere la cuenta vieja. Si la persona vuelve, empieza una cuenta nueva, no la anterior.

Sin tablas de auditoría con datos personales

No copies el email y el nombre originales a una tabla de logs, auditoría o backup 'por si acaso'. Eso anula todo el borrado: el dato sigue identificable en otro lado.

Y el borrado de la identidad de auth no es manual: cada proveedor tiene su forma, siempre desde el servidor, nunca desde el cliente.

Supabase

auth.admin.deleteUser, llamado desde el servidor con la service_role key (nunca desde el cliente).

Firebase

Pide reautenticar a la persona y luego corre user.delete() para borrar la identidad.

Clerk

clerkClient.users.deleteUser desde tu backend, con tu secret key.

05 · El prompt

El prompt para que Claude lo haga por ti

Esta es la pieza central. No necesitas escribir el código tú: pega estos prompts en Claude Code o Cowork y deja que Claude inspeccione, arme la migración, escriba la anonimización y agregue el botón. Úsalos en orden: primero el diagnóstico, luego la implementación, y la variante de retención legal solo si guardas facturas por ley.

Primero diagnostica: ¿mi app cumple la Guideline 5.1.1?

Pégalo en Claude Code o Cowork antes de tocar nada. Claude inspecciona tu base de datos, tu proveedor de auth y tu UI, y te reporta si la app cumplirá la revisión de Apple. NO escribe código todavía.

Voy a subir esta app a la App Store de Apple y necesito saber si cumple la Guideline 5.1.1(v): si la app permite crear cuenta, tiene que permitir INICIAR el borrado de la cuenta DENTRO de la app. Desactivar o deshabilitar no basta.

Quiero un diagnóstico, NO que escribas o cambies nada todavía. Inspecciona el proyecto y repórtame en español simple.

1. Esquema de la base de datos
   - Lista las tablas y dime cuál guarda los usuarios.
   - Marca qué columnas tienen datos personales (email, nombre, teléfono, dirección, bio, foto, lo que sea identificable).

2. Relaciones (foreign keys)
   - Dime qué tablas apuntan al usuario (publicaciones, pedidos, comentarios, etc.).
   - Esto importa: si borráramos el usuario en seco, esas relaciones se romperían.

3. Proveedor de auth
   - Detecta si uso Supabase, Firebase, Clerk u otro, y si la app ofrece "Sign in with Apple".
   - Dime desde dónde se borraría la identidad (servidor vs cliente).

4. ¿Ya existe un botón de borrar cuenta?
   - Busca en la UI una opción de "Eliminar cuenta" / "Borrar cuenta" en Ajustes o Perfil.
   - Si solo existe "Desactivar" o "Cerrar sesión", márcalo: para Apple eso NO cumple.

5. Veredicto
   - ¿La app cumple 5.1.1 hoy? Sí / No / Parcial.
   - Si no cumple, lista en bullets qué falta, en orden de importancia.
   - No escribas código ni hagas cambios. Cuando apruebe el veredicto, te paso el prompt de implementación.

Mi stack es: [PON AQUÍ tu framework / base de datos / proveedor de auth].

Implementa el soft delete con anonimización irreversible

El prompt maestro. Claude inspecciona, hace la migración, escribe la anonimización irreversible, agrega el botón en Ajustes, borra la identidad de auth y cierra sesión — mostrándote cada paso antes de seguir. Llena los [corchetes] con tu stack.

Quiero que mi app cumpla la Guideline 5.1.1(v) de la App Store con la solución correcta: un soft delete con anonimización IRREVERSIBLE. Nada de esconder el dato; el dato personal se sobrescribe sin vuelta atrás, pero conservamos un "cascarón" anónimo para no romper las relaciones de la base.

Mi stack es: [framework / lenguaje]. Base de datos: [Postgres / Supabase / Firebase / otra]. Proveedor de auth: [Supabase / Firebase / Clerk / otro]. Uso "Sign in with Apple": [sí / no].

Hazlo EN ESTE ORDEN y muéstrame cada paso antes de continuar al siguiente. Explica en español simple qué hace cada parte y qué debo probar.

1. Inspecciona el esquema actual
   - Identifica la tabla de usuarios, las columnas con datos personales y las tablas que tienen foreign keys al usuario.
   - Muéstrame el mapa antes de tocar nada.

2. Migración: añade deleted_at
   - Agrega una columna deleted_at (timestamp, nulo por default) a la tabla de usuarios.
   - Muéstrame la migración antes de aplicarla.

3. Función de anonimización IRREVERSIBLE
   - email → un token aleatorio tipo deleted-<uuid>@deleted.invalid. NO un hash del email original.
   - nombre → "Usuario eliminado".
   - teléfono y dirección → vacío.
   - foto de perfil → BORRAR el archivo del storage, no solo el enlace.
   - deleted_at → ahora.
   - Importante: NO copies los datos originales a ninguna tabla de auditoría, logs o backup. Eso anularía todo el borrado.

4. Botón "Eliminar cuenta" en Ajustes
   - Colócalo en Ajustes/Perfil, fácil de encontrar.
   - Pide confirmación (reautenticación o escribir "ELIMINAR").
   - Advierte que es irreversible.
   - Avisa que la suscripción de Apple NO se cancela sola y enlaza a https://apps.apple.com/account/subscriptions.

5. Borra la identidad de auth desde el servidor
   - Según mi proveedor: Supabase (auth.admin.deleteUser con service_role), Firebase (reautenticar + user.delete()), Clerk (clerkClient.users.deleteUser).
   - Si uso Sign in with Apple, revoca el token con la REST API de Sign in with Apple.
   - Asegura que el MISMO correo no pueda recuperar la cuenta vieja: la identidad y las sesiones se borran.

6. Cierra sesión y confirma
   - Cierra la sesión en el dispositivo.
   - Muestra una pantalla de confirmación de que la cuenta fue eliminada.

Al final dime: qué archivos tocaste, qué probar paso a paso, y un checklist corto de lo que Apple espera ver en la revisión.

Variante: conservar facturas por ley, pero sin el dato personal

Para apps con obligación legal de guardar registros financieros. Claude conserva la transacción (monto, fecha, impuestos) pero la pseudonimiza: le quita el dato personal y avisa al usuario qué se guarda y por qué.

Mi app tiene una obligación legal de conservar registros financieros (facturas, pagos, impuestos) durante cierto tiempo. Aun así quiero cumplir la Guideline 5.1.1 de Apple y el derecho de supresión, así que cuando alguien borra su cuenta NO puedo simplemente conservar sus datos personales.

La solución: conservar la fila de la transacción pero pseudonimizarla — quitarle el dato personal y dejar solo lo que la ley exige.

Mi stack es: [framework / base de datos]. La obligación legal que aplica en mi caso es: [describe brevemente, p. ej. conservar facturas X años].

Hazlo en orden y muéstrame cada paso.

1. Encuentra las tablas con obligación legal
   - Lista las tablas de facturas, pagos o transacciones.
   - Dime qué columnas son el dato financiero que debo conservar (monto, fecha, impuestos, id de transacción) y cuáles son dato personal (nombre, email, dirección de facturación).

2. Pseudonimiza al borrar la cuenta
   - Cuando se anonimiza al usuario (del prompt de soft delete), en estas filas reemplaza el dato personal por una referencia neutra: en vez del nombre y email, deja solo el id anónimo del usuario ya borrado.
   - Conserva el monto, la fecha, los impuestos y el id de transacción. Esos sí se quedan.

3. Avísale a la persona
   - En la pantalla de confirmación de borrado, agrega una línea honesta: "Por obligación legal conservamos tus registros de facturación sin tu información personal durante [plazo]."

4. Verifica
   - Confírmame que después del borrado no queda ningún dato personal identificable en las tablas financieras.
   - Dime qué probar para asegurarme de que la factura sigue siendo válida fiscalmente pero ya no identifica a la persona.

Explica todo en español simple. No asumas mi jurisdicción; si algo depende de la ley de mi país, dímelo para consultarlo con un abogado.

Esto no es asesoría legal. Es una guía educativa de la comunidad para entender el patrón técnico. Para tu caso concreto —tu país, tu tipo de datos, tus obligaciones de retención— consulta a tu abogado. Y antes de enviar a revisión, verifica las guidelines vigentes de Apple, porque cambian.

¿Qué app estás construyendo o qué quieres subir a la App Store? Cuéntanos en la comunidad tododeia. Aquí traducimos, simplificamos y armamos los prompts para que Claude haga el trabajo pesado por ti.