Skip to content

docs(spec): especificar la simetría de los providers de iOS (breaking, sin implementar) - #22

Closed
rndevelo wants to merge 3 commits into
feature/010-ios-build-hygienefrom
feature/011-ios-provider-symmetry
Closed

docs(spec): especificar la simetría de los providers de iOS (breaking, sin implementar)#22
rndevelo wants to merge 3 commits into
feature/010-ios-build-hygienefrom
feature/011-ios-provider-symmetry

Conversation

@rndevelo

Copy link
Copy Markdown
Collaborator

Sale de #21. Draft a propósito: es un spec sin implementar y declara un breaking change.

Qué propone

GoogleSignInProviderIOS es el único de los seis providers de iOS que es class + companion object
en vez de object, así que se alcanza como .Companion.shared mientras los otros cinco son
.shared. Como fue el primero que existió, alguien copió su bloque de ejemplo a los otros cinco: de
ahí salió la documentación falsa que el #14 parcheó.

El 003 arregló los síntomas. Esto cierra la causa: una sola forma, X.shared, para los seis.

Por qué está parado

Rompe a cualquier host Swift ya integrado, Fledge incluido. Lo que lo hace aceptable es que falla
en compilación, no en runtime
— el host se entera al bumpear el pin, no un mes después con un
botón muerto. Aun así necesita:

  1. Coordinarse con el bump del pin en apptolast/Fledge, un commit aquí y dos líneas de Swift allí.
  2. Decidir qué pasa con getClientId(), que depende del constructor que se vacía. La propuesta es
    quitarla; la alternativa es getClientId(config:). Se decide en /plan.
  3. Bump a 1.2.0 por honestidad semántica, aunque nadie consuma por versión.

Lo que sí es mergeable ya

El segundo commit arregla el README, que hoy usa las dos formas para el mismo objeto con 24 líneas
de diferencia
(líneas 609 y 633). Va aparte justo para poder cherry-pickearlo a develop si el
011 se queda esperando a Fledge.

Verificado en Windows: :custom-login:ktlintCheck + :custom-login:testDebugUnitTest (254 tests, 0 fallos). El Swift de esta rama no se ha compilado nunca: pendiente de Mac.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E41idMYhfgBSz2EeuNUn5Q

rndevelo and others added 2 commits August 16, 2026 02:46
Convertir GoogleSignInProviderIOS en object cierra la causa que el 003
parcheó: es el único de los seis providers con forma distinta, y de ahí
salió la documentación falsa que se copió a los otros cinco.

Queda escrito y sin implementar. Rompe a los hosts Swift ya integrados,
así que necesita ir coordinado con el bump del pin en Fledge, y arrastra
una decisión abierta sobre getClientId().

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E41idMYhfgBSz2EeuNUn5Q
La línea 609 usaba .companion y la 633 .Companion.shared para el mismo
objeto, con 24 líneas de diferencia. Las dos compilan; tener las dos es
lo que enseña al lector que hay dos contratos.

Va aparte del spec 011 a propósito: si el 011 se queda esperando a
Fledge, esto se puede cherry-pickear a develop por su cuenta.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E41idMYhfgBSz2EeuNUn5Q
…e Swift

Cierra la causa que el spec 003 solo pudo parchear. Google era el unico de
los seis providers de iOS con forma de `class` + `companion object`, porque
recibia GoogleSignInConfig en el constructor. Kotlin/Native exportaba ese
companion por su cuenta, asi que el mismo seam tenia dos escrituras validas
en Swift, y el README acabo publicando ejemplos con la equivocada.

Ahora es un `object` como los otros cinco y la config viaja en signIn(config),
igual que AppleSignInProviderIOS.signIn(scopes).

Verificado en el header de Objective-C del framework, no solo por grep:
ComposeAppGoogleSignInProviderIOSCompanion desaparece y la clase pasa a
exponer `getter=shared`, identica a los providers que ya eran object.

getClientId() se elimina: quien pudiera llamarla ya tiene en la mano la
GoogleSignInConfig de la que leia. Cero call sites en toda la organizacion.
getTopViewController() y onSignInResult() se quedan con el @deprecated que
les puso el spec 010.

De paso, dos cosas que la verificacion saco a la luz:
- El KDoc de AppleSignInProviderIOS explicaba que `.companion` existe "para
  el companion object de una clase, como GoogleSignInProviderIOS". Ya no es
  cierto.
- CLAUDE.md documentaba `:custom-login:linkDebugFrameworkIosSimulatorArm64`,
  que no existe: la libreria no declara binaries.framework propio, se exporta
  a traves del ComposeApp del demo. El task correcto vive en :composeApp.

BREAKING CHANGE: los hosts Swift pasan de
GoogleSignInProviderIOS.Companion.shared.* a GoogleSignInProviderIOS.shared.*
Sale en 2.0.0, junto al renombrado custom-login -> baselogin, para que los
consumidores migren una sola vez. Comprobado que hoy no rompe a nadie: ni
Fledge ni Paparcar nombran este provider en Kotlin ni en Swift.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hgarciaalberto

Copy link
Copy Markdown
Contributor

Sustituida por #26. GitHub cerró esta PR automáticamente al borrarse su rama base (feature/010-ios-build-hygiene) tras el merge de #21, y una PR cerrada no admite cambio de base ni reapertura. El trabajo es el mismo, rebasado sobre develop e implementado — el spec ya no está solo especificado.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants