Salir a bolsa: dos tiendas, dos rechazos, cero calma
English Deutsch Français Português 中文 Italiano 日本語 한국어 Русский Türkçe Polski Nederlands Bahasa Indonesia
Moneyflow ya está en App Store y en Google Play. Nos encantaría decir que fue sin sobresaltos. No lo fue. Por el camino cosechamos dos rechazos de Apple, enseñamos a un script de compilación a decir que no, descubrimos que un Lambo era una bandera a cuadros desde el principio y arreglamos un fallo que Google pasó por alto y Apple no.
Esta es la historia completa, reconstruida a partir de nuestras notas de versión, nuestros manuales de procedimiento y los mensajes de commit que escribimos con prisa. Es larga, un poco descarada y, si estás a punto de lanzar una app propia, contiene consejos de verdad. Prepárate un café, o un pequeño préstamo con tus activos como garantía.
La versión corta, en fechas
- La versión 1.2.8 sale en Google Play. El anuncio llega esa misma tarde, en seis idiomas.
- iOS alcanza a Android en la 1.2.8, después de rescatar una pantalla de bienvenida que nadie podía leer.
- El primer envío a Apple va sin sus compras dentro de la app. El segundo entra con las 39. Primera respuesta de Apple: Se necesita información.
- Una limpieza de primavera de marcas registradas, y la compilación 31 para devolver a la app una clave que faltaba.
- Segundo rechazo, desde un iPad: los dos botones de inicio de sesión muestran un error, y el revisor no encuentra la Tienda.
- El culpable es un parámetro que faltaba. Android lo había estado perdonando discretamente todo el tiempo.
- Compilación 34, firmada como es debido. Iniciar sesión con Apple por fin funciona.
- La versión 1.2.9 se despliega en Google Play.
- Los jugadores nos cuentan que sus móviles se calientan. Hacemos que el juego deje de hacerlo.
- Cinco versiones en un fin de semana, de la 1.2.10 a la 1.3.1.
- El enlace de App Store llega a nuestra página de inicio. Aquí estás tú.
Antes de la OPV: un juego de navegador con miedo al compromiso
Moneyflow nació como un juego de navegador. Eliges un personaje con un trabajo de verdad, facturas de verdad y un sueldo de verdad, tiras los dados e intentas construir ingresos pasivos suficientes para escapar del 9 a 5 y pagar dos sueños. Hacer las dos cosas es la única forma de ganar, tanto en un jugador como en multijugador. También hay una boda, un acuerdo prenupcial y un divorcio, y llegaremos a eso.
Luego decidimos que pertenecía a tu móvil y descubrimos que una tienda de aplicaciones es un juego completamente distinto. Sin dados, sin cartas, solo formularios, cuestionarios y una banca que siempre gana. Ya escribimos antes el papeleo de Google Play, en Publicar Moneyflow en Google Play. Esta es la secuela: lo que pasó después, en las dos tiendas, y lo que nos diríamos a nosotros mismos si pudiéramos volver atrás.
Primera ronda: Google Play dice que sí (después de pedirlo todo)
Google Play fue primero, y se portó como un banco cuando solicitas una hipoteca: simpático, minucioso y deseoso de ver todos los documentos que tienes. El formulario de Seguridad de los datos, la clasificación de contenido, la página de eliminación de cuenta, el periodo de pruebas cerradas. La entrada anterior cubre todo eso, así que aquí va lo que cambiamos una vez terminada la primera ficha.
Dejamos de pulsar botones. Las 39 compras dentro de la app (18 fichas, 14 diseños de dados, 4 temas de tablero y 3 paquetes, todas cosméticas) se crearon con un script en lugar de a mano, con RevenueCat entre la app y las dos tiendas para que la lógica de compra sea la misma en todas partes. Las versiones también salen por la API de Android Publisher. Un script abre una edición, sube el bundle, asigna la pista y confirma, y si falla algún paso borra la edición, de modo que una ejecución fallida no deja nada atrás. Es lo más ordenado de toda esta historia.
Play tiene sus manías. Rechaza cualquier número de compilación que haya visto alguna vez, incluidos los que subiste y nunca publicaste, así que los números de compilación se comportan como el efectivo en el juego: gástalo y se acabó, hayas conseguido algo o no. También tenemos dos cuentas de servicio, y solo una de ellas puede publicar. La otra puede abrir una edición, subir un bundle completo, asignarlo a una pista y luego llevarse un 403 en el último paso. Todo ese esfuerzo, y un "no" rotundo cuando la tarta ya está en la mesa.
El 7 de septiembre salió la versión 1.2.8. Esa tarde publicamos el anuncio en seis idiomas, porque si vas a emocionarte en público, más vale hacerlo además en alemán, español, francés, portugués y chino.
Google Play dijo que sí. Apple tenía otras ideas.
Segunda ronda: Apple se hace de rogar
Mientras Android corría por delante, iOS seguía aparcado en la versión 1.2.1 en App Store Connect. El 10 de septiembre se puso al día: versión 1.2.8, compilación 30, diez capturas de pantalla nuevas y texto promocional en ocho idiomas. Antes de todo eso hubo el pequeño asunto del acuerdo de Apps de pago. Apple no te deja crear ni una sola compra dentro de la app hasta que lo has aceptado y has presentado tus datos bancarios y fiscales. Hasta entonces, cada intento devuelve un 409, que es la forma que tiene Apple de decir "todavía no, y no hasta que haya visto tu papeleo".
Luego automatizamos las 39 compras con la API de App Store Connect. La primera ejecución falló en 24 de ellas con UNEXPECTED_ERROR. La lanzamos otra vez y salió limpia. El manual de procedimiento contiene ahora la frase más zen del repositorio: volver a ejecutar en lugar de depurar.
La pantalla de bienvenida que no era
En un móvil de verdad, nuestra pantalla de lanzamiento era ilegible, por dos motivos distintos. El storyboard llenaba la pantalla con una ilustración cuadrada, así que en un móvil alto se escalaba hasta que la altura encajaba y recortaba cerca del 54 % del ancho. El logotipo y todo el marco decorativo se salían por el borde. Peor aún, las versiones en modo oscuro eran solo la figura desnuda a un 5 % aproximadamente de un lienzo crema, que es un logotipo invisible en cualquier móvil configurado en oscuro.
Pasamos a ajustar la ilustración dentro de la pantalla sobre su propio fondo crema, descartamos las variantes oscuras y metimos el logotipo completo al 88 % del lienzo. La carpeta de imágenes pasó de 55 MB a 9,1 MB. Una primera impresión no debería pesar 55 MB.
Cómo enviar una app cuya Tienda no vende nada
Aquí hay una trampa con un camuflaje excelente. Las compras dentro de la app son elementos de revisión independientes, y Apple no revisará una que no esté en tu envío. La primera vez que enviamos, la app entró en revisión con los 39 productos dejados atrás en "Listo para enviar". Si la hubieran aprobado, habríamos publicado un juego sobre comprar y vender cuya Tienda no podía vender nada. Retirarla nos costó una Retirada de revisión y nuestro puesto en la cola.
La trampa es que Apple te deja empezar un borrador de envío desde la página de Compras dentro de la app que nunca se podrá enviar. Sin ninguna versión de la app dentro, cada producto falla al añadirse con "No se puede añadir para revisión", y enviar el borrador falla con "añade una versión de la app para la plataforma seleccionada". Ninguno de los dos mensajes te dice que la versión tiene que ir primero. Intentamos automatizar el arreglo, naturalmente. La API no tiene ninguna relación de compra dentro de la app con un envío. Probamos tres grafías antes de aceptar que esta puerta es solo de interfaz, y el manual de procedimiento ahora lo dice, con educación, para que nadie lo vuelva a intentar.
El número que por fin nos hizo felices fue cuarenta: una versión de la app, más treinta y nueve cosas que comprar para ella.
Rechazo número uno: Apple quiere conocerte mejor
El 11 de septiembre respondió Apple. El asunto era Directriz 2.1, Se necesita información. No era un fallo, un cierre inesperado ni una infracción. Apple no informaba de ningún defecto. Era el cuestionario que Apple envía a cuentas con poco historial de revisiones, y venía con la petición de una grabación de pantalla. Piénsalo menos como un rechazo y más como una comprobación de antecedentes.
La lista tenía siete puntos: una grabación de pantalla, para qué sirve la app y a quién va dirigida, cómo entrar y probarlo todo, qué servicios externos usa, si algo cambia según la región, si está regulada o construida sobre material de otros, y cómo funcionan las compras. Eran preguntas razonables, como lo son las de una primera cita. El Centro de resolución limita una respuesta a 4000 caracteres y la nuestra ocupó 3917, que es lo más largo que le hemos dicho nunca a alguien a quien acabábamos de conocer.
Luego, la grabación. Apple quería el flujo real a velocidad real en un móvil real: un arranque en frío, una partida de un jugador, la Tienda y su hoja de compra, el registro, el inicio de sesión, una sala multijugador y la eliminación de la cuenta otra vez. Cuatro minutos de imágenes de iPhone a 60 fotogramas por segundo pesan unos 240 MB, demasiado para adjuntar, así que ffmpeg lo comprimió a menos de 10 MB con la interfaz todavía legible. Escribimos la lista de planos completa, porque si este proyecto nos ha enseñado algo es que olvidaremos cómo hicimos cualquier cosa.
Las respuestas fueron a dos sitios: la respuesta del Centro de resolución y las notas de revisión de la ficha de la app, de modo que cada envío futuro llega ya habiendo respondido a las preguntas. Los revisores siguen esas notas al pie de la letra. Escríbelas para alguien que nunca ha visto tu app, tiene cuarenta segundos libres y sostiene un iPad. Las tres cosas resultarán ciertas.
Una cosa más apareció mientras ensayábamos. Eliminar una cuenta se quedó colgado en "Eliminando..." una vez y luego funcionó al segundo intento. Sospechamos que el servidor se había quedado dormido, lo que para un revisor se ve exactamente igual que un botón roto. Mantén despierto tu servidor mientras el revisor está en la ciudad.
La limpieza de primavera de las marcas
Mientras teníamos la atención de Apple, recorrimos el juego buscando cualquier cosa que sonara a marca. Las reglas de derechos de contenido de Apple nos hicieron mirar, y no nos gustó lo que encontramos. Dos personajes tenían un "BMW Serie 3 (CPO)" y un "Honda Civic". Los nombres no aportaban nada al juego y atraían muchos problemas, así que ahora son un "Deportivo (CPO)" y un "Sedán básico". La palabra "monopoly" salió de las palabras clave de nuestra App Store.
Luego estaba el Lambo. Resultó que la ficha Lambo nunca fue un coche. Era un emoji de bandera a cuadros todo el tiempo, así que el nombre antiguo prometía un superdeportivo y entregaba una bandera de carreras. Financieramente hablando, eso es solo marketing. Ahora se llama Bandera a cuadros. El tema de tablero llamado El Tanque pasó a ser Piscina de tiburones.
La única regla que no rompimos.
Cambiamos los nombres visibles y dejamos cada ID de producto exactamente donde estaba. La ficha de la bandera sigue siendo pawn.lambo bajo el capó y siempre lo será. Esos ID están activos en las dos tiendas, ligados a precios y nombrados en las concesiones de los paquetes, y renombrar uno le habría retirado el artículo a todos los que ya lo tienen. Los nombres son texto. Los ID son contratos.
Rechazo número dos: el incidente del iPad
El 17 de septiembre Apple volvió, y esta vez había encontrado problemas de verdad. El revisor usaba un iPad Air (11 pulgadas, M3) con iPadOS 27, porque las apps solo para iPhone se ejecutan en iPad en modo de compatibilidad y se revisan ahí. Hubo dos hallazgos. Directriz 2.1(a): al pulsar Continuar con Apple o Continuar con Google salía un error. Directriz 2.1(b): el revisor no encontraba nuestras 39 compras dentro de la app.
Las dos cosas eran culpa nuestra, y en cierto sentido eran la misma culpa.
El fallo
El plugin de inicio de sesión quiere un objeto options en cada llamada. En iOS, si falta, el plugin rechaza con "Missing provider or options" antes de que ninguna hoja de inicio de sesión tenga ocasión de aparecer. En Android el mismo plugin asume discretamente uno vacío y sigue adelante. Así que la misma línea de código pasó la revisión de Google Play sin problema y se cayó con el primer toque en el lado de Apple, tanto en todos los iPhone como en todos los iPad.
Un parámetro que faltaba. Android lo perdonó. iOS no.
La Tienda que nadie encontraba
Las compras eran un malentendido aparte que encajó a la perfección con el primero. Nuestras antiguas notas de revisión le decían al revisor que comprar cosas requería iniciar sesión. El inicio de sesión estaba roto. Así que el revisor nunca llegó a la Tienda, en un bucle cerrado fabricado por nosotros.
Empeoró cuando miramos más de cerca, porque la Tienda tenía tres maneras más de decepcionar. Si la lista de productos cargaba sin paquetes, la Tienda lo trataba como "no hay nada a la venta" y ocultaba todos los artículos que aún no tenías. Los tres paquetes (de 5 fichas, de temas y de inicio de personajes) llevaban ocultos desde junio. Y un invitado que comprara el Paquete de 5 fichas habría pagado sin desbloquear nada, porque nuestro servidor solo desglosaba los paquetes en sus artículos para jugadores con sesión iniciada. Un invitado, por supuesto, es exactamente lo que es un revisor. Quedarte con el dinero de alguien y entregarle una caja vacía es una excelente lección financiera. Simplemente no es una que quisiéramos dar.
La lista de arreglos, para que conste. Pasar el parámetro. Hacer que las dos hojas de inicio de sesión se anclen a la ventana activa de la app en iPad, porque el plugin se anclaba a la primera ventana y en iPadOS esa no siempre es la visible. Enseñar a la Tienda que cero productos cargados significa "todavía no ha cargado" y no "vacío". Recuperar los paquetes. Enseñar a la app a desglosar los paquetes para invitados. Y reescribir las notas de revisión para decir, con palabras sencillas, que para comprar no hace falta iniciar sesión y que aquí está el camino exacto hasta la Tienda.
El resultado fue la 1.2.9. Su nota de versión empieza con las dos frases que más nos costaron: "Arreglos de inicio de sesión: Continuar con Google muestra el selector de cuentas al pulsar a propósito, y el inicio de sesión nativo ya no da error. La Tienda siempre muestra sus artículos, incluso antes de que carguen los precios." Dos frases, diez días de nuestras vidas.
Compilaciones 32 y 33: de las que no hablamos
Pensarías que podíamos simplemente publicar el arreglo. Lo hicimos, dos veces, y estaba mal las dos. En las compilaciones 32 y 33 de TestFlight, el inicio de sesión con Google funcionaba, pero Iniciar sesión con Apple, el botón de Apple en el programa de pruebas de Apple, fallaba con AuthorizationError 1000.
La causa es obvia a posteriori e invisible antes. Los entitlements viajan en la firma del código. Nuestro script de subida archivaba la app con la firma desactivada y dejaba la firma para el paso de exportación, que puede firmar una app pero no puede darle entitlements que nunca tuvo. El entitlement de Iniciar sesión con Apple nunca llegó a la compilación. En lenguaje de desarrollador, la app había salido de casa sin pantalones.
El script de subida ahora firma en el momento de archivar y se niega a subir cualquier archivo cuya firma no tenga el entitlement. Construimos un portero. Comprueba los carnés. Las compilaciones 32 y 33 están muertas, y la 34, la bien vestida, es la que enviamos de vuelta a Apple.
Y entonces Apple dijo que sí.
Cosas calientes
El 24 de septiembre los jugadores nos habían contado que sus móviles se calentaban. iPhone 15, iPhone 16 Pro Max, y la versión web también un poco caliente. Nos encantaría decir que era el puro magnetismo del interés compuesto. Era un temporizador.
El juego incrementaba un contador cada segundo, en todos los modos, y cada tic volvía a renderizar todo el juego: el tablero, cada casilla, cada panel. Para siempre. Mientras tanto, las fichas animadas se repintaban hasta 120 veces por segundo en móviles con pantallas rápidas, para dibujar una animación de 30 fotogramas por segundo. El desenfoque de pantalla completa detrás de cada carta se recalculaba en cada fotograma porque la ficha no paraba de moverse por debajo. Y los resplandores que hacían que el tablero pareciera vivo animaban sombras de caja, lo que obliga a repintar en cada fotograma.
Arreglamos las cuatro. El contador pasó a ser un único timeout. Las fichas dibujan solo fotogramas completos, y se pausan cuando están fuera de pantalla, con movimiento reducido o tapadas por una carta. Los resplandores y los anillos animan opacidad y posición en lugar de sombras, y laten tres veces y luego descansan. El trabajo en reposo del tablero cayó de 624 ms a 15 ms durante diez segundos de pruebas sin interfaz. Con una carta abierta y la ficha del dragón en el tablero cayó de 1188 ms a 11 ms. Nuestras animaciones muestran ahora más autocontrol del que hemos mostrado en cualquier otra parte de este proyecto.
Salió como la 1.2.10, con el titular "Móviles más frescos", junto con una regla de despidos más justa. Solo se detiene tu sueldo cuando te echan. Tus ingresos extra siguen pagando, y las facturas siguen venciendo. Que te despidan debe doler. No debería borrarte tus ingresos paralelos.
El libro mayor: todas las notas de versión, leídas de seguido
Guardamos nuestras notas de versión en un solo archivo, el mismo que alimenta las dos tiendas. Leídas en orden, forman una especie de diario extraño, así que aquí lo tienes con el subtexto añadido. Las fechas son fechas de commit. El archivo salta de la 1.0.1 directamente a la 1.2.6, así que lo que pasara entre medias pasó sin diario. Cada número de versión de abajo enlaza a su propia entrada.
1.0.0
Primera versión de Moneyflow. Construye tu imperio financiero con bienes raíces, acciones y negocios. Escapa de la carrera de la rata, entra en la Vía Rápida y persigue tus sueños.
Sincera, breve y un poco aterrada. Mira lo pequeña que era.
1.0.1
Google Play Ya están disponibles las compras desde la web en playmoneyflow.com. Mejoras de estabilidad y de la experiencia de usuario en toda la app.
App Store Mejoras de estabilidad y de rendimiento. Varias correcciones de errores en el panel del estado financiero y en las animaciones de los dados.
La misma versión, dos juegos de notas. Las tiendas tienen ideas distintas sobre lo que se puede contar a la gente, así que mantenemos un juego para cada una y procuramos no mezclarlos.
1.2.6
Llegan los impuestos: impuesto sobre la renta en tu sueldo, 15 % en los ingresos extra, 15 % de ganancias de capital en las ventas con beneficio. Los personajes ahora cobran salarios reales de EE. UU. de 2025. Los alquileres y la rentabilidad de los negocios siguen a la economía: escasos en la crisis, generosos en el auge.
Llega Hacienda. Nadie lo pidió y todos lo necesitaban. Toda rentabilidad del juego se juzga ahora después de impuestos, porque es la única rentabilidad que importa.
1.2.7
Negocia tratos, ofertas y propuestas de préstamo: un cara o cruz al 50 %, con condiciones un 20 % mejores o un 20 % peores. Elige qué propiedad vender en una Guerra de ofertas y qué activos se van en un divorcio, o firma un Acuerdo prenupcial.
El regateo en su primera forma inocente. También la primera aparición del Acuerdo prenupcial, que dice mucho de lo que teníamos en la cabeza.
1.2.8 7 sept
Regatea dos veces: negocia y renegocia, pero la otra parte puede retirarse (10 %, luego 15 %). Sin divorcio antes de la boda, sin venta de acciones si no tienes. El divorcio reparte tu patrimonio neto y tu ex puede asumir préstamos.
La romántica. A la segunda, se ofenden. Hasta esta versión la baraja podía darte un divorcio antes de estar casado, que es más caótico que una capilla de Las Vegas. También es la versión que nos llevó a la puerta de Apple.
1.2.9 22 sept
Arreglos de inicio de sesión: Continuar con Google muestra el selector de cuentas al pulsar a propósito, y el inicio de sesión nativo ya no da error. La Tienda siempre muestra sus artículos, incluso antes de que carguen los precios.
Escrita bajo coacción, por dos rechazos y un parámetro que faltaba.
1.2.10 26 sept
Móviles más frescos: el juego ya no mantiene tu dispositivo trabajando sin parar mientras juegas. Las animaciones laten unas veces y luego se detienen, y el tablero deja de redibujarse cada segundo. Despidos más justos: solo se detiene tu sueldo, los ingresos extra siguen llegando y los gastos se pagan igual en los días de cobro perdidos.
Aquella en la que dejamos de darle fiebre a tu móvil.
1.2.11 26 sept
Novedades en el menú Comprar: un piso en la ciudad, una tintorería y un motel de carretera. … Cada carta tiene su propia ilustración y tus decisiones aparecen justo debajo. Invita a amigos a una sala multijugador privada.
La versión más concurrida y una de las de vida más corta, porque la 1.2.12 llegó esa misma tarde. Las salas privadas son el titular para quien tenga amigos: un anfitrión, de dos a cuatro asientos y un código de seis caracteres.
1.2.12 26 sept
¿Te falta efectivo? Ahora eliges cómo cubrirlo y ves lo cerca que estás de la bancarrota: préstamos de emergencia seguidos, margen de crédito y días de cobro restantes. Los préstamos de emergencia ahora cuestan menos que la tarjeta.
La bancarrota ahora viene con cuenta atrás, que es la forma más amable que conocemos de enseñar a temer. Los préstamos de emergencia ahora cuestan menos que la tarjeta de crédito, que es más de lo que hará la vida real por ti. También arreglado: los dados se tiraban solos al cerrar una carta, lo que era o un fallo o nuestra función más pasivo-agresiva.
1.3.0 27 sept
24 cartas nuevas, desde un motel de carretera y una empresa SaaS hasta La gran apuesta, y ahora con rareza: aparecen cartas poco comunes y raras. Oculta una carta para ver el tablero y pulsa «Volver a la carta». Los despidos y las emergencias ya no se pueden descartar.
Veinticuatro cartas nuevas, un sistema de rareza y, discretamente, el cambio más importante del mes: las cartas ahora llegan desde el servidor. Más sobre eso abajo.
1.3.1 27 sept
Pide prestado con tus activos como garantía: cualquier inmueble, negocio o acción sin préstamo puede respaldar ahora un préstamo más barato, solo intereses, al tipo de mercado más 0,5 %.
Apalancamiento, otra vez. Es un juego de finanzas y no podemos evitarlo. Llegó después de la 1.3.0 ese mismo día.
1.4.0 1 oct
Nuevos bots Experto que planean cada jugada y leen la economía, y ahora todos los bots pueden comprar sueños, ganar y pedir prestado con sus activos como garantía. La economía pesa más: los tipos de interés siguen el ciclo de auge y crisis, la recesión te baja los impuestos y las rentas de lo que posees suben en el auge y bajan en la recesión.
Aquella en la que los bots aprendieron a ganar. Hasta ahora ninguno podía, porque ninguno compraba nunca un sueño. Llegaron los bots Experto, la economía empezó a mover tipos, impuestos y alquileres según su humor, y la app aprendió ocho idiomas más.
1.4.1 1 oct
… Las hipotecas se devuelven ahora en 25 años, los préstamos de negocio en 15 y los de coche en 6; los préstamos bancarios son de solo intereses y puedes endeudarte hasta que los pagos lleguen al 67% de tus ingresos. …
Las hipotecas por fin tienen fecha de fin. El trabajo de préstamos llegó después de cortar la 1.4.0, así que salió como la 1.4.1 esa misma tarde, junto con una tarjeta de noticias en la pantalla de inicio.
1.4.2 1 oct
Un solo fallo, corregido menos de veinte minutos después de la 1.4.1: el botón Préstamo puente ahora ofrece la cantidad que el banco aprobará de verdad. No tiene notas de tienda propias.
El fin de semana de las cinco versiones.
Sábado 26 de septiembre
- 14:241.2.10Móviles más frescos, despidos más justos
- 16:271.2.11Ofertas, plazos de préstamos, ilustraciones de cartas
- 19:401.2.12La cuenta atrás hacia la bancarrota
Domingo 27 de septiembre
- 09:311.3.024 cartas nuevas, rareza, contenido remoto
- 13:191.3.1Pide prestado con tus activos como garantía
Horas de los commits, hora de Sofía. No todas las versiones llegaron a todas las tiendas como ellas mismas: en Google Play, la 1.2.12 pasó a producción en lugar de la 1.2.11, y en iOS se envió en su lugar. En ese mismo fin de semana la baraja ganó 130 ilustraciones, dibujadas con código.
La mejor actualización es la que nadie tiene que aprobar
Al final de aquel fin de semana habíamos aprendido algo útil. La parte más lenta de publicar una actualización no es construirla. Es esperar a que una tienda la mire. Así que la 1.3.0 hizo algo un poco distinto: enseñó a la app a aceptar entregas.
Las cartas nuevas ahora llegan desde nuestros servidores, así que la mayor parte del contenido nuevo ya no necesita una actualización de la app. Costó una versión de la app instalar la maquinaria. Después, las cartas nuevas están a un despliegue de distancia, con traducciones e ilustraciones incluidas.
La Tienda funciona igual. Apple revisa una compra nueva dentro de la app por separado, sin una compilación nueva, así que una ficha nueva tampoco necesita una versión nueva.
Lo ingenioso es la red de seguridad. A nadie le sale nunca una carta que su app no pueda jugar, así que las versiones antiguas y las nuevas pueden compartir mesa sin problemas. Cuando inventamos una mecánica realmente nueva, seguimos volviendo a la cola como todo el mundo.
La misma versión trajo la rareza, que significa que algunas cartas salen mucho menos que otras. Cuánto menos es nuestro secreto, pero las más raras aparecen más o menos con la frecuencia con que App Review te aprueba a la primera. A nosotros nos tocó una común.
El marcador
Para la gente de las hojas de cálculo.
- 10números de compilación usados en 20 días, del 30 al 40
- 39compras dentro de la app, todas cosméticas
- 2rechazos de Apple, más un envío que retiramos nosotros mismos
- 3917caracteres en nuestra respuesta, de 4000 permitidos
- 24 de 39compras que fallaron al crearse en la primera ejecución del script. La segunda ejecución salió limpia
- 2compilaciones muertas, la 32 y la 33, enviadas sin sus entitlements
- 5versiones confirmadas en un fin de semana
- 624 → 15milisegundos de trabajo en reposo por cada diez segundos, antes y después de enfriar el juego
Lo que nos diríamos a nosotros mismos al principio
Lo que antes era una tarde de pulsar botones ahora es un cambio de versión, una nota y un puñado de comandos por tienda. La espera es lo único que no podemos automatizar. Todo lo demás se ha metido en esta lista.
- Pon la versión en el envío antes que las compras dentro de la app. Apple te deja hacerlo al revés y luego se niega a decir por qué.
- Escribe tus notas de revisión para un revisor que nunca ha visto la app. Tiene cuarenta segundos y un iPad, y sigue las notas al pie de la letra. Dale el camino exacto a todo.
- Nunca pongas un inicio de sesión delante de tu Tienda. Los invitados también tienen cartera, y los revisores son invitados.
- Firma tu archivo y haz que el script se niegue a subir uno que no lleve puestos sus entitlements. Constrúyete un portero.
- Haz que las claves que faltan griten. La compilación 30 salió sin su clave de pagos y nada se quejó en voz alta, así que la Tienda salió simplemente en blanco. Un fallo silencioso es un rechazo con retraso.
- Prueba en las dos plataformas aunque el código sea compartido. Android perdonó lo que iOS rechazó, y una línea de código tenía dos personalidades distintas.
- Cambia el nombre de los productos, nunca sus ID. Los nombres son texto. Los ID son contratos.
- Automatízalo, hazlo repetible, déjalo por escrito. La API de Apple a veces simplemente tiene un momento, así que vuelve a ejecutar antes de depurar. Nuestros manuales de procedimiento existen porque lo olvidamos todo dos veces.
- Mantén notas de versión separadas cuando las tiendas tienen reglas separadas. La misma versión, frases distintas.
- Entrega el contenido desde el servidor y reserva la cola de la tienda para las mecánicas nuevas. La mejor actualización es la que nadie tiene que aprobar.
- Prueba en el hardware caliente que tus jugadores tienen de verdad. El simulador nunca se ruborizó. Un iPhone 16 Pro Max sí.
- Mantén despierto el servidor mientras el revisor está en la ciudad. Un servidor dormido se ve exactamente igual que un botón roto.
Anda, llévanos a dar una vuelta
Moneyflow es gratis en App Store, gratis en Google Play y gratis en cualquier navegador. No hay anuncios y no necesitas una cuenta para empezar. Todo lo que hay en la Tienda es cosmético. Nada de lo que contiene te ayuda a ganar, lo que en un juego sobre dinero es o muy de principios o muy mal negocio.
¿Y lo próximo? Más cartas, que ahora llegan desde el servidor, más formas de jugar con amigos y, si el universo es amable, una semana entera sin un número de versión.
Nos vemos en el tablero.