Agregador de canales de noticias
Dónde comprar el iPhone más barato durante las ofertas del Prime Day de Amazon
Amazon ha dado comienzo a su Prime Day 2026, y no son pocas las que podemos encontrar ahora mismo. Algunas se mantendrán hasta el viernes y otras irán llegando poco a poco. En cualquier caso, ¿hay ofertas en iPhone? En este artículo vamos a repasar los mejores chollos que tiene tanto la propia Amazon como otras tiendas en los móviles de Apple.
Cabe mencionar que las ofertas de Amazon, en relación con los iPhone, no son exclusivas del Prime Day, por lo que cualquier persona, sea o no suscriptora de la plataforma, podrá acceder a todas ellas.
- iPhone 17e por 689 euros, el móvil más económico de la generación actual de Apple.
- iPhone 17 por 899 euros, el móvil con mejor relación calidad-precio de la marca.
- iPhone 17 Pro por 1.259 euros, un iPhone potente y compacto.
- iPhone 17 Pro Max por 1.429 euros, el móvil más completo de Apple.
- iPhone Air por 868,05 euros, el iPhone que más ha bajado de precio durante la campaña.
Si quieres comprar el iPhone 17e da igual hacerlo en Amazon (689 euros), MediaMarkt (689 euros) o El Corte Inglés (689 euros), porque en las tres tiendas tiene el mismo precio. Es el móvil más económico de Apple, pero no ha bajado de precio específicamente en el Prime Day, ya que llevamos viéndolo con el mismo descuento en estas últimas semanas.
iPhone 17Lo mismo ocurre con el iPhone 17, un móvil que ha destacado por bajar muy poco de precio desde su lanzamiento. En este caso, se puede comprar tanto en Amazon (899 euros) como en MediaMarkt (899 euros) por el mismo precio. Llevamos viéndolo a este precio desde mayo. No tiene una nueva oferta, pero su precio es el más bajo que hemos visto hasta la fecha y se trata del iPhone con mejor relación calidad-precio de esta generación.
iPhone 17 ProEl iPhone 17 Pro también se puede comprar en Amazon (1.259 euros) o en MediaMarkt (1.259 euros), porque en ambas tiendas el precio es el mismo. Es ideal si el iPhone 17 se te queda corto y buscas un móvil más potente y con mejor configuración fotográfica, pero manteniendo el diseño compacto con pantalla de 6,3 pulgadas.
iPhone 17 Pro MaxEn cambio, el iPhone 17 Pro Max es perfecto para aquellas personas que quieran lo bueno del iPhone 17 Pro, pero que tenga una pantalla más grande de 6,9 pulgadas. En este caso, casi todas las tiendas tienen precios similares, pero si buscamos la mejor oferta se puede comprar en Amazon (1.429 euros), MediaMarkt (1.429 euros) o El Corte Inglés (1.429 euros).
iPhone AirLlegamos a la última (y mejor) oferta que podemos encontrar en los móviles de Apple, y es que el iPhone Air ahora mismo protagoniza el mejor descuento durante el Prime Day. No es una oferta exclusiva de la campaña, pero Amazon (868,05 euros) lo tiene más barato que el resto de tiendas. ¿Para quién es este móvil? Para aquellas personas que busquen la potencia de los mejores iPhone, pero con una pantalla intermedia de 6,5 pulgadas y un diseño muy delgado.
Algunos de los enlaces de este artículo son afiliados y pueden reportar un beneficio económico a Applesfera. En caso de no disponibilidad, las ofertas pueden variar.
Imágenes | Pedro Aznar, Apple
En Applesfera | Qué iPhone comprar. Guía para elegir el smartphone de Apple más adecuado para ti
En Applesfera | Mejores accesorios Magsafe para tu iPhone
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
Dónde comprar el iPhone más barato durante las ofertas del Prime Day de Amazon
fue publicada originalmente en
Applesfera
por
Alberto García
.
Llevo años complicándome con el iPhone para poder enviar mi DNI con seguridad. Esta herramienta lo resuelve de un plumazo
No es extraño que se nos pida una copia del DNI en circunstancias como la de hacer el chek-in en un hotel. Lo importante es que lo enviemos de forma segura para evitar que en una filtración de datos pueda ser utilizado con fines fraudulentos. Por eso, modificar el DNI es legal en muchos de esos casos.
Hasta ahora, lo que yo hacía era añadir un texto sobre el DNI que no impidiese ver el resto de datos. En ese texto escribía algo así como "copia expedida en fecha X con el fin de X". De ese modo me aseguraba de que, incluso si llegaba a terceros, mi copia no pudiese ser utilizada para otros fines. Pero acabo de descubrir una herramienta que lo hace más rápido. ¡Aleluya!
Saferlayer, la herramienta que permite modificar el DNI de forma legal {"videoId":"x85wgv3","autoplay":true,"title":"¡NO SUBAS TU DNI A INTERNET! PELIGROS y CÓMO EVITARLOS", "tag":"", "duration":"305"}Esa modificación del DNI que yo hacía hasta ahora pasaba por usar apps como Vista Previa en iOS. No es que fuese complicado, aunque sí que reconozco que era tedioso. Por eso me alegré tanto al leer a mi compañero Pepu Ricca en Xataka Móvil hablar de una herramienta que lo facilita.
Se llama Saferlayer y se accede a través de una web. Es de origen español, existe ya desde hace un año y he podido verificar que es un sistema seguro y que no almacenará nuestras copias del DNI.
En Applesfera El DNI en el iPhone ha dejado de ser un experimento. A partir de ya tiene validez legal plena y nadie puede negarse a aceptarloHay dos opciones para usarlo, siendo una de pago y otra gratuita. En la de pago (por 4,99 dólares al mes) podemos procesar varios DNIs que podremos subir en formato PDF a la plataforma. La gratuita solo permite subir el documento en formato de foto y de forma individual.
Cómo validar el DNI en SaferlayerPersonalmente no me merece la pena la opción de pago y, creo, tampoco a la mayoría. Aunque si sueles viajar mucho o hacer varias gestiones al mes por las que tengas que adjuntar más de un documento, quizás sí te merezca la pena.
Con la opción gratis, el proceso es así de sencillo:
- Entra en la web de Saferlayer.
- Ve al apartado de Saferlayer Free y pulsa en Usar gratis.
- Selecciona desde donde vas a adjuntar la fotografía y añadela.
- Utiliza el dedo para añadir líneas negras que oculten los datos del DNI que no quieras mostrar (puedes cambiar el tamaño de la barra con las opciones que aparecen en pantalla).
- Pulsa en Continuar.
- Escribe en el cuadro de texto el motivo por el que vas a adjuntar el DNI y a quién autorizas para su uso.
- Pulsa de nuevo en Continuar.
- Elige ahora si quieres descargar la imagen modificada o la opción de compartir, la cual te permitirá también guardarla o adjuntarla por correo, WhatsApp, Mensajes, etc.
Lo que hará esta herramienta es añadir una marca de agua a toda la fotografía en la cual se refleja el motivo por el que la que se expidió. De ese modo podemos estar seguros de que no se usará de forma fraudulenta.
Mi consejo adicional es guardar esta web en favoritos para acceder cuando se necesite. Ya explicaba que en mi caso es esporádicamente y de ahí que no me compense la versión de pago, por lo que este método es al final lo mejor para hacerlo rápido cuando se necesite.
En Applesfera | Cómo llevar el DNI en el iPhone y que sea completamente legal: esto es lo que necesitas
En Applesfera | Así podemos instalar y utilizar el certificado digital de la Agencia Tributaria en nuestro iPhone, iPad o Mac mediante Safari
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
Llevo años complicándome con el iPhone para poder enviar mi DNI con seguridad. Esta herramienta lo resuelve de un plumazo
fue publicada originalmente en
Applesfera
por
Álvaro García M.
.
El iPhone plegable supera la prueba de fuego de Apple. Ya no hay marcha atrás
Llevamos meses con el mismo runrún de fondo. Cada pocas semanas aparecía un nuevo informe que ponía en duda la fecha del primer iPhone plegable: en mayo fue la bisagra. Antes habían sido los plazos de producción, y antes de eso, las dudas de si llegaría siquiera junto al iPhone 18 Pro en septiembre.
Esta semana el guion cambia de tercio. Samsung Display ha recibido de Apple la aprobación de producción de módulo para los paneles OLED del plegable, el paso que certifica que un proveedor puede fabricar en serie con la calidad exigida. Y lo ha hecho con margen: Apple pide un rendimiento mínimo del 70% y Samsung ha llegado a superar el 80%. Las líneas de la planta de Vietnam ya están en marcha para un primer pedido de tres millones de unidades.
{"videoId":"x9mvdvm","autoplay":true,"title":"Cadena de suministro de Apple", "tag":"", "duration":"54"} Samsung Display pasa el corte con notaLa aprobación de producción de módulo es el resultado de pruebas muy exigentes. Antes de llegar a este punto, un proveedor tiene que demostrar que su ensamblaje final tiene la calidad suficiente y que puede mantener la estabilidad de esa calidad a gran escala, no solo en una tirada de prueba. Apple exige un rendimiento mínimo del 70% para dar ese visto bueno y Samsung Display lo ha superado con holgura. Con rendimientos finales por encima del 80%.
Ese aprobado se traduce ya en algo físico: parte de las líneas de back-end de la planta de Samsung Display en Vietnam han empezado a operar para cubrir un primer pedido de unos tres millones de paneles que deben entregarse este mismo año. El back-end es la fase en la que se añaden los circuitos de control, las placas de circuito flexible y los componentes de protección antes de la inspección final y el envío. Así que hablamos de paneles que ya están entrando en su recta final antes de llegar a los iPhone montados.
La planta cuenta con unas 80 líneas de producción en total y unas 50 activas en este momento, así que hay margen de sobra para un pedido que, comparado con la capacidad instalada, resulta modesto.
El acuerdo entre ambas empresas es, además, de exclusividad: Samsung Display será la única proveedora de paneles OLED plegables para Apple durante tres años. Eso significa que no habrá un segundo fabricante de pantallas compitiendo por el mismo contrato, algo poco habitual en la estrategia de Apple de repartir pedidos entre varios proveedores para evitar depender de uno solo.
Una pantalla con tecnología nueva bajo el capóLos paneles emplearán tecnología Color Filter on Encapsulation, conocida como CoE, que elimina el polarizador y forma el filtro de color directamente sobre la capa de encapsulación. Quitar el polarizador era esencial en una pantalla plegable. Ese componente añade grosor y rigidez, justo lo contrario de lo que necesita un panel que tiene que doblarse miles de veces.
A esa base se suma el nuevo set de materiales M16 de Samsung Display, la generación más reciente de su tecnología OLED, que llega con mejoras en brillo, rendimiento de color, vida útil y eficiencia energética.
En Applesfera El nuevo CEO de Apple se ha marcado como prioridad lo que Tim Cook había dejado en el cajón: el diseñoSeptiembre está cada vez más cerca, y con cada semana que pasa hay menos margen para que un problema de última hora descarrile los planes. Las líneas de Vietnam ya están produciendo, los componentes ya circulan por la cadena de suministro y el calendario que Apple maneja internamente sigue intacto. Lo que quede por resolver, sea el nombre definitivo o algún ajuste de última hora en la bisagra, tendrá que decidirse en las próximas semanas.
Fuente | The Elec
En Applesfera | Nuevos iPhone 18 Pro y 18 Pro Max - Todo lo que creemos saber sobre ellos
En Applesfera | Nuevo iPhone plegable - Todo lo que creemos saber sobre él
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
El iPhone plegable supera la prueba de fuego de Apple. Ya no hay marcha atrás
fue publicada originalmente en
Applesfera
por
Guille Lomener
.
Decían poder secuestrar más de 300 millones de iPhone y pidieron un rescate a Apple. La compañía tardó poco en desmontarles
Hubo un día en el que unos hackers afirmaron poder hacer un secuestro masivo de cuentas de iCloud si Apple no cedía a sus chantajes. Las cifras que pedían a la compañía se podían incluso considerar asumibles sabiendo cuánto valen nuestros datos en el mercado negro. Sin embargo, Apple no se lo iba a poner tan fácil a los malhechores.
Los ciberdelincuentes, que se hacían llamar "La Familia Turca del Crimen" pedían 75.000 Bitcoin o 100.000 dólares en tarjetas de iTunes. Querían en cualquiera de los casos que la compañía cediese al chantaje o, según sus amenazas, se quedarían con los datos de más de 300 millones de cuentas de Apple propiedad de los usuarios.
Una amenaza con la que Apple saldría siempre perdiendo Imagen: Wikimedia CommonsHabrá quien piense que no tiene nada que ocultar y que si un ciberdelincuente quiere acceder a su cuenta de Apple, que lo haga. El problema es que los chantajistas de esta historia no solo afirmaban poder acceder a esos datos, sino que amenazaban con quedarse esas cuentas secuestradas. Y esto es problemático en tanto en cuanto perderían acceso a todas sus fotos, notas, contactos y resto de información sincronizada con iCloud.
Los hechos ocurrieron en marzo de 2017, cuando los ciberdelincuentes informaron a través de Vice de estar en posesión de más de 300 millones de cuentas de Apple. Mostraban para ello capturas de pantalla e incluso vídeos subidos a YouTube en los que, supuestamente, estaban accediendo a un montón de cuentas de usuarios a través de sus legítimas contraseñas.
En Applesfera Alerta de seguridad en Apple: descubren un fallo imposible de solucionar que afecta a estos dispositivosAfirmaban tener un listado de todas las contraseñas y tener suma facilidad para cambiarlas y apoderarse de las cuentas. Pretendían poner a la compañía californiana entre la espada y la pared ante una tesitura en la que, sobre el papel, saldrían perdiendo. O dinero o reputación. O ambas cosas en ambos casos.
Si Apple cedía al chantaje, perdería dinero, pero también prestigio al ceder a los chantajes de unos ciberdelincuentes que nadie conocía muy bien su origen. Si no aceptaba el chantaje, millones de usuarios perderían sus cuentas, llegarían demandas y la imagen de la empresa quedaría por los suelos. Para colmo, en ambos casos quedaban ya señalados por no tener barreras de seguridad suficientes.
Pues bien… nada de esto ocurrió.
Roma no paga a traidores. Y Apple tampoco {"videoId":"x90pfg8","autoplay":true,"title":"JAILBREAK: Que pasó con los hackers del iPhone", "tag":"webedia-prod", "duration":"820"}Apple se ha aprovechado muchas veces de los hackers y estos de Apple. En el buen sentido. Es habitual que compañías como Google ofrezcan recompensas por hackear sus sistemas. Lo hacen con el fin de detectar amenazas que su equipo no ha logrado detectar y, de paso, a un precio incluso inferior al que les cuesta mantener a sus equipos.
Apple llega incluso a contratar a hackers que vulneraron sus sistemas cuando creen aptos sus conocimientos y valías para formar parte de sus equipos. Sin embargo, lo han hecho con una diferencia más que sustancial con respecto a la Familia Turca del Crimen: no les hicieron chantaje.
Apple agradece y premia a quienes les muestran vulnerabilidades en sus sistemas y, en casos como estos, hace caso omiso. Sobre todo cuando saben que la amenaza no es real. Tanto es así que, según revelaron los propios ciberdelincuentes y reflejaron varios medios, un miembro de Apple les dijo lo siguiente:
"En primer lugar, les pedimos amablemente que eliminen el vídeo que han subido en su canal de YouTube, ya que solo pretenden llamar la atención. En segundo lugar, nos gustaría que sepan que no recompensamos a los delincuentes cibernéticos por violar la ley".Si bien la compañía de Cupertino nunca llegó a confirmar estos hechos, tampoco los desmintieron. El comunicado en sí, según expresaban en Vice, pudo ser visto por redactores que acreditaban que, efectivamente, la dirección web de ese comunicado acababa en @apple.com, como señal inequívoca de que fue un miembro de la compañía quien lo envió.
Y al final… nadaSi bien los ciberdelincuentes siguieron insistiendo en sus amenazas y en tratar de probar que tenían esa base de datos con más de 300 millones de contraseñas de cuentas de Apple, nunca llegaron a ejecutar su amenaza. Es esto lo que refuerza la idea de que, en realidad, nunca tuvieron semejante poder.
En Applesfera No todo es Siri AI: esta nueva función de IA de iOS 27 es lo mejor para cambiar todas las contraseñas automáticamenteApple optó por no ceder ante la presión y salió reforzada al mantener su postura firme. Mientras tanto, los usuarios tienen una oportunidad más para aprender a protegerse en un entorno digital cada vez más hostil.
Este intento fallido de chantaje sí logró dejar claro que, sean o no reales las amenazas, estas existen y no hay mejor forma de protegerse que añadir algo más que una contraseña. Es aquí donde entran factores que ya aplican las cuentas de Apple, como la autenticación de doble factor o las passkeys.
En Applesfera | Cómo saber si mi iPhone tiene un virus y qué puedo hacer para eliminarlo
En Applesfera | Qué hacer si te roban tu iPhone: paso a paso para recuperar, bloquear o borrarlo en remoto
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
Decían poder secuestrar más de 300 millones de iPhone y pidieron un rescate a Apple. La compañía tardó poco en desmontarles
fue publicada originalmente en
Applesfera
por
Álvaro García M.
.
Tráiler de anuncio de Dragon Ball Xenoverse 3
En el Apple Park ya no cabe un alfiler. Apple necesita llevarse sus proyectos fuera del anillo
El año pasado os contamos que Apple se había gastado 882 millones de dólares en poco más de un mes comprando oficinas en Silicon Valley. Pensábamos que con eso tendría suficiente para una temporada. Pues no. Apple acaba de volver a sacar la chequera y ha comprado otro edificio de oficinas en Sunnyvale por 162 millones de dólares. El Apple Park se queda pequeño, literalmente.
Lo curioso es que este edificio ya lo tenían alquilado desde el año pasado. Apple lleva tiempo convirtiendo arrendamientos en propiedades, y esta vez encima ha hecho un buen negocio: el edificio se vendió en 2022 por 222 millones, y Apple lo ha comprado ahora por 162. Un descuento del 27% sobre el precio anterior. No está mal para una empresa que compra a precio de mercado como cualquier hijo de vecino.
{"videoId":"x8y2seu","autoplay":true,"title":"Steve Jobs Theatre", "tag":"", "duration":"59"} 162 millones por un edificio que ya tenían alquilado, y encima de ofertaEl edificio está en el 684 de West Maude Avenue, en el barrio de Peery Park, a menos de un kilómetro de otros edificios que Apple ya tiene en Sunnyvale. Son cuatro plantas y casi 18.000 metros cuadrados de espacio de oficinas. Antes lo tenía alquilado LinkedIn, aunque no está claro si llegaron a mudarse. Apple firmó el subarrendamiento el año pasado y en cuanto tuvo la oportunidad lo compró.
El precio que pagó, 162 millones, queda muy por debajo de los 222 millones que costó en 2022. El mercado inmobiliario de oficinas en Silicon Valley lleva tiempo flojo, con tasas de desocupación que en algunas zonas superan el 18 o el 30 por ciento, y Apple está aprovechando ese momento para comprar a buen precio lo que ya usa o planea usar.
Apple lleva años siguiendo el mismo patrón: alquila un edificio, lo ocupa durante un tiempo, y cuando tiene la oportunidad lo compra. En diciembre pagó 216 millones por dos edificios en Cupertino que llevaba alquilando desde 2015. En junio del año pasado compró otro grupo de edificios por 167 millones. Y antes de eso, 350 millones por el Mathilda Commons y 365 millones por el Mathilda Campus, ambos en Sunnyvale y ambos ya ocupados en su mayor parte por Apple.
Apple es una de las empresas más estables del sector, no hace despidos masivos como Microsoft o Meta, y sabe que los equipos que trabajan en esos edificios van a seguir ahí durante mucho tiempo. Si vas a pagar alquiler durante décadas, en algún momento sale más a cuenta ser el propietario. Y más cuando el mercado está a la baja y puedes comprar con descuento.
¿Para qué tanto espacio?Apple tiene proyectos que necesitan instalaciones separadas del Apple Park, en parte por razones de seguridad y en parte porque algunos desarrollos requieren equipamiento muy especializado. Las gafas, por ejemplo, se desarrollan en una instalación de Santa Clara separada del campus principal precisamente para evitar filtraciones.
En total Apple tiene ahora mismo al menos 15 edificios en la zona de Sunnyvale, y eso sin contar el Apple Park, One Infinite Loop y el resto de instalaciones que tiene repartidas por Cupertino y Santa Clara.
882 millones gastados el año pasado, 162 millones más ahora. Apple juega al Monopoly con Silicon Valley y de momento no da señales de querer parar. Con todos los proyectos que tiene entre manos para los próximos años, probablemente necesite cada metro cuadrado que está comprando. Y con el mercado de oficinas como está, tampoco es el peor momento para hacerlo.
En Applesfera | Nuevas gafas de Apple - Todo lo que creemos saber sobre ellas
En Applesfera | Nuevos iPhone 18 Pro y 18 Pro Max - Todo lo que creemos saber sobre ellos
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
En el Apple Park ya no cabe un alfiler. Apple necesita llevarse sus proyectos fuera del anillo
fue publicada originalmente en
Applesfera
por
Guille Lomener
.
Tráiler oficial de gameplay de Bel's Fanfare
Auriculares, eReaders, bases de carga MagSafe y más: los cinco mejores chollos antes del Prime Day de Amazon
En las próximas horas, Amazon dará comienzo a su Prime Day 2026. Pero no hace falta esperar hasta entonces para encontrar buenas ofertas, y es que la tienda ha ido ofreciendo pequeños adelantos bastante atractivos. Hay bases de carga, lectores de libros electrónicos, auriculares y mucho más.
- Anker MagGo por 49,59 euros, una base de carga plegable que es ideal para llevarla de viaje.
- Fire TV Stick 4K Plus por 33,99 euros, un dispositivo que permite ver Apple TV y otras plataformas en casi cualquier tele.
- Soundcore Space Q45 por 69,99 euros, unos auriculares con una excelente relación calidad-precio.
- Kindle Colorsoft Signature Edition (pack) por 257,97 euros, un pack que incluye el eReader, una funda y una base de carga.
- Echo Show 11 por 154,99 euros, un altavoz con pantalla que es compatible con Alexa+.
Si ahora que se acerca el verano ya estás pensando en las vacaciones, mucho ojo al Anker MagGo. Se trata de una base de carga que destaca sobre todo porque se puede plegar, por lo que es muy cómodo de llevar en la mochila o en un bolsillo. Incorpora tres módulos para recargar un iPhone, un Apple Watch y unos AirPods y es compatible con MagSafe. Su precio es de 49,59 euros (antes 99,99 euros).
Fire TV Stick 4K PlusComo era de suponer, Amazon ha bajado el precio de los Fire TV Stick. Hay muy buenas ofertas, pero el más destacable es el Fire TV Stick 4K Plus, sobre todo si queremos un buen precio, un buen rendimiento y compatibilidad con Dolby Vision y Dolby Atmos. Es compatible con Alexa+ y permite reproducir contenido de plataformas como Apple TV o Netflix en casi cualquier tele, siempre y cuando esta cuente con un puerto HDMI. Su precio es de 33,99 euros (antes 69,99 euros).
Soundcore Space Q45Si quieres aprovechar el Prime Day para comprar unos buenos auriculares de diadema pero los AirPods Max 2 se te escapan de presupuesto, Amazon tiene los Soundcore Space Q45 por 69,99 euros (antes 149,99 euros). Se escuchan muy bien y son muy ligeros, pero destacan sobre todo por su cancelación de ruido y por lo cómodos que son. Los puedes llevar puestos durante horas sin sentir fatiga. Son los que utilizo yo mismo desde hace varios años y pocos le hacen frente por el precio que tienen ahora mismo.
Kindle Colorsoft Signature Edition (pack)De momento Amazon no ha lanzado ofertas en sus lectores, pero sí que podemos encontrarlos rebajados en algunos packs. El Kindle Colorsoft Signature Edition ahora mismo cuesta 257,97 euros (antes 322,08 euros) en un pack que incluye tanto una funda protectora como una base de carga inalámbrica. La pantalla del lector es a color y tiene una diagonal de siete pulgadas, su batería tiene una autonomía de semanas y cuenta con 32 GB de almacenamiento interno.
Echo Show 11Amazon también ha lanzado ofertas en los dispositivos Echo y el Echo Show 11 ahora mismo se encuentra a un precio de 154,99 euros (antes 239,99 euros). Se trata de un altavoz inteligente (parecido al Echo Dot), pero con una pantalla integrada de 11 pulgadas. Permite ver información relativa al tiempo, reproducir música o ver contenido en plataformas de streaming.
En Applesfera Qué AirPods comprar en 2026: los mejores auriculares de Apple y cuál elegir según tus necesidadesAlgunos de los enlaces de este artículo son afiliados y pueden reportar un beneficio económico a Applesfera. En caso de no disponibilidad, las ofertas pueden variar.
Imágenes | Amazon, Anker
En Applesfera | Qué iPhone comprar. Guía para elegir el smartphone de Apple más adecuado para ti
En Applesfera | Mejores accesorios Magsafe para tu iPhone
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
Auriculares, eReaders, bases de carga MagSafe y más: los cinco mejores chollos antes del Prime Day de Amazon
fue publicada originalmente en
Applesfera
por
Alberto García
.
Que watchOS 27 deje fuera a cinco Apple Watch ya tiene una explicación oficial. Otra cosa es que nos convenza
Cuando se anunció watchOS 27 se vivió un pequeño drama al ver que ni siquiera un Apple Watch Series 9 lanzado hace menos de tres años era compatible. Aquello fue un error de Apple y enseguida supimos la auténtica compatibilidad de watchOS 27, aunque seguía dejando fuera a varias generaciones.
Ahora, en declaraciones a TechRadar, varios portavoces de Apple han explicado a fondo el por qué de la incompatibilidad con cinco modelos de Apple Watch que sí soportaron watchOS 26. Tras leerla, vemos que tiene sentido la explicación, aunque es algo incoherente si miramos a iOS 27.
Hardware, el motivo de la limitación de software El primer Apple Watch Ultra, que aún no ha cumplido cuatro años, se queda fuera de watchOS 27Hay cinco modelos que no tendrán watchOS 27: Apple Watch Series 6, Series 7, Series 8, Ultra 1 y SE (2ª gen.). Cualquier otro posterior a ellos sí lo recibirá y con ello una serie de novedades que, a falta de ver si llegan a Europa, parecen requerir un determinado hardware. Y es eso lo que explican en Apple.
David Clark, director senior de ingeniería de software en watchOS, explicó a TechRadar que uno de los objetivos de watchOS 27 era convertir al Apple Watch en un auténtico compañero de IA con Apple Intelligence.
Según el ejecutivo, el reloj es muchas veces "la forma más conveniente de interactuar con Siri", por lo que querían que la experiencia fuese consistente entre el iPhone y la muñeca, con acceso a la misma información de la nueva Siri AI independientemente del dispositivo desde el que se invoque al asistente.
En Applesfera iOS 26.5 prometía mejorar su compatibilidad con relojes que no fuesen de Apple. Lo he probado y hay buenas noticiasCait Dooley, responsable de marketing del Apple Watch y el área de Salud de Apple, fue quien explicó que la compañía prioriza siempre el rendimiento y que las nuevas funciones ofrezcan la mejor experiencia. Y dicen que eso se podía lograr solo en dispositivos más recientes como los que finalmente han sido compatibles con watchOS 27.
Aunque Apple no ha detallado oficialmente los los requisitos técnicos, la línea de corte coincide con la llegada del chip S9 y un mayor almacenamiento interno en el reloj. Modelos como el Series 8 o el Ultra original utilizan el chip S8, mientras que el S9 incorporó un Neural Engine más potente orientado a tareas de aprendizaje automático, mientras que también disponen de 64 GB de espacio para instalar los modelos que se ejecutan en local.
El por qué no acaba de ser una excusa convincente El iPhone 11 debería ser un perfecto ejemplo para los Apple Watch antiguos que no recibirán watchOS 27¿Tiene razón Apple en ser tan restrictiva con las grandes novedades de watchOS 27? Creo que sí. El enfoque de la compañía en que muchos de los modelos de IA se ejecuten en local hacen que, muy a pesar de quienes tenemos Watch anteriores, solamente se pueda ejecutar en los más potentes.
El verdadero problema de todo esto está en que habrá muchos Apple Watch que se queden en una versión "inestable" como es watchOS 26. Y uso comillas porque hace casi un año que se lanzó oficialmente, que vamos ya por watchOS 26.5 y no es ninguna beta, sino que es una versión final.
Sin embargo, como ha sucedido también en iOS 26 y macOS 26 Tahoe, watchOS 26 ha sido una versión plagada de problemas: alto consumo de batería, apps que no funcionan como deberían... Y todo ello sigue sucediendo, aunque en menor medida, en watchOS 26.5, que es la última que se ha lanzado.
En iOS 27 sí encontramos dispositivos antiguos sin grandes novedades, pero sí con las mejoras de rendimientoEn watchOS 27 se centrarán también en pulir esos problemas, razón por la que personalmente me cuesta entender que no llegue a todos los relojes. Sobre todo por que ya tenemos el ejemplo perfecto en los iPhone. Más en concreto en los iPhone 11.
Estos dispositivos no tienen capacidades para tener la nueva IA de Apple y por tanto no la tendrán. Sin embargo, sí que actualizarán para recibir otras novedades como las citadas mejoras en rendimiento. Y creo que es justo lo que se podía haber hecho con los Apple Watch Series 6 y compañía, en lugar de dejarlos anclados en watchOS 26.
La vida que les queda a los relojes que no llegan a watchOS 27 {"videoId":"xaelf7u","autoplay":true,"title":"iOS 27 Las funciones que realmente usarás", "tag":"webedia-prod", "duration":"395"}Pese a que vayamos a tener cinco modelos que no se actualicen, en esas mismas declaraciones a TechRadar, Apple confirma que seguirá habiendo actualizaciones para ellos. No serán de watchOS 27, pero sí actualizaciones intermedias de watchOS 26.
En Applesfera El nuevo CEO de Apple se ha marcado como prioridad lo que Tim Cook había dejado en el cajón: el diseñoNo es ninguna sorpresa esto sabiendo que, de forma muy acertada, Apple sigue actualizando dispositivos que quedaron obsoletos hace ya años. Lo hacen por motivos de seguridad, ya que suelen añadir parches importantes cuando así se requiere.
Es aquí donde entra un atisbo de esperanza para quienes tenemos relojes que no recibirán watchOS 27. Es posible que en watchOS 26.6 (ya en beta) se corrijan de una vez por todas los problemas de rendimiento encontrados hasta la fecha y en los que incluso apps nativas como Recordatorios tienen algún fallo. Aunque sin duda, no serán arreglos con el mismo nivel de profundidad que en watchOS 27.
En Applesfera | Nuevo Apple Watch Series 12 - Todo lo que creemos saber sobre él
En Applesfera | Nuevos iPhone 18 Pro y 18 Pro Max - Todo lo que creemos saber sobre ellos
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
Que watchOS 27 deje fuera a cinco Apple Watch ya tiene una explicación oficial. Otra cosa es que nos convenza
fue publicada originalmente en
Applesfera
por
Álvaro García M.
.
La última filtración le pone precio al iPhone 18 Pro y cruzamos los dedos para que esta vez no acierten
La crisis de memorias y sus consecuencias para Apple está entrando en su época más difícil. Tim Cook lo confirmó, Gurman avisó de que las subidas llegarían antes de otoño, y nosotros ya os contamos qué comprar ahora y qué esperar. Pues bien, ahora hay un número encima de la mesa, y cuesta creerlo: 1.399 dólares de salida para el iPhone 18 Pro, lo que en euros podría traducirse en unos 1.500 euros para el iPhone 18 Pro y cerca de 1.700 euros para el iPhone 18 Pro Max.
Me niego a creérmelo del todo, y no lo digo por optimismo mal entendido sino porque la historia de Apple con los precios nos ha enseñado varias veces que los números que circulan antes de septiembre suelen ser peores de lo que termina pasando. Pasó con los aranceles, cuando todos los medios hablaban de iPhone a 2.000 dólares y al final el iPhone 17 mantuvo el precio. Que esta vez la situación sea diferente no significa que el resultado final tenga que ser tan extremo.
{"videoId":"x9xr9ly","autoplay":true,"title":"CRISIS de la RAM- PRECIOS un 300% más ALTOS en el componente que está en TODOS tus dispositivos", "tag":"memoria ram", "duration":"348"} El Wall Street Journal pone cifras encima de la mesaEl análisis parte de los costes de fabricación. La memoria DRAM que Apple pagó unos 39 dólares en el iPhone 17 Pro podría costar hasta 145 dólares en el iPhone 18 Pro. El almacenamiento flash de 256 GB, que salía por unos 13 dólares, podría subir hasta 51. En total, los costes de fabricación del iPhone 18 Pro subirían un 25% respecto al iPhone 17 Pro, llegando a unos 726 dólares por unidad.
Para mantener el margen de beneficio habitual de alrededor del 47%, Apple tendría que cobrar 1.371 dólares. Pero como Apple prefiere precios redondos y psicológicamente manejables, el análisis apunta a 1.299 dólares como escenario más probable, con un margen algo más ajustado del 44%. Y si encima sumamos el nuevo sistema de cámara, que según las filtraciones costará a Apple un 50% más que el de la generación anterior, el precio podría escalar hasta esos 1.399 dólares o más.
Aumento del precio de un módulo de 16GB de RAM Apple casi nunca sube tanto como dicen los rumoresAquí es donde conviene poner un poco de perspectiva. Apple lleva años gestionando sus precios de una forma muy particular, y raramente hace subidas tan agresivas como las que se predicen antes de septiembre. Con los aranceles de Trump se auguraba iPhone a 2.000 dólares y el iPhone 17 mantuvo el precio.
Con el iPhone 17 Pro utilizaron un truco: desapareció la versión de 128 GB y el modelo base pasó a ofrecer 256 GB, lo que técnicamente no era una subida de precio pero sí encarecía el acceso al modelo más económico.
Con los Mac ya hemos visto algo parecido. El Mac mini dejó de venderse en su configuración de 256 GB y el precio de entrada subió de golpe. No es que Apple subiera el precio, es que eliminó el modelo más barato. Y eso puede pasar perfectamente con el iPhone 18 Pro.
Las jugadas que puede hacer Apple para no parecer el maloHay varias formas en las que Apple puede gestionar esto sin que el titular sea "Apple sube el iPhone 200 euros". La más probable, siguiendo el patrón reciente, es que:
- El iPhone 18 Pro desaparezca en su versión de 256 GB y pase a ofrecer solo 512 GB como configuración base.
- El iPhone 17 Pro de 512 GB cuesta actualmente 1.569 euros, y el Pro Max de 512 GB sale a 1.719 euros.
- Esos números coinciden bastante con las proyecciones del análisis (traducido a euros).
- Aunque es una barbaridad de precio, al menos "nos llevamos algo a cambio".
La otra jugada es simplemente subir el precio base de forma moderada, unos 100 euros en España como pasó con el iPhone 14 Pro por la diferencia euro dólar, y negociar con los proveedores para absorber parte del coste extra.
Modelo
Almacenamiento
Precio EE.UU.
Precio ESPAñA
iphone 6
16 GB
649 dólares
699 euros
iphone 6s
16 GB
649 dólares
749 euros
iphone 7
32 GB
649 dólares
769 euros
iphone 8
64 GB
699 dólares
809 euros
iphone x
64 GB
999 dólares
1.159 euros
iphone xs
64 GB
999 dólares
1.159 euros
iphone 11 pro
64 GB
999 dólares
1.159 euros
iphone 12 pro
128 GB
999 dólares
1.159 euros
iphone 13 pro
128 GB
999 dólares
1.159 euros
iphone 14 pro
128 GB
999 dólares
1.319 euros
iphone 15 pro
128 GB
999 dólares
1.219 euros
iphone 16 pro
128 GB
999 dólares
1.219 euros
iPhone 17 Pro
256 GB
1.099 dólares
1.319 euros
iPhone 18 Pro (estimación 1)
256 GB
1.199 dólares
1.419 euros
iPhone 18 Pro (estimación 2)
512 GB
1.299 dólares
1.569 euros
Apple compra a un volumen que le da mucho margen de negociación, y no va a repercutir el 100% de la subida al consumidor porque sabe que hay un límite a partir del cual la gente empieza a mirar a otras marcas o a no renovar sus modelos.
Lo que sí parece claro es que algo va a subir. Los rumores de principios de año decían que Apple mantendría precios, y esos rumores los daban fuentes que parecían fiables. Pero las declaraciones públicas de Tim Cook pesan más que cualquier filtración, y Tim ha dicho que vienen subidas. La pregunta ya no es si suben sino cuánto, y la respuesta está en Cupertino guardada hasta septiembre.
Hasta entonces todo son proyecciones, y la experiencia nos dice que Apple suele encontrar la forma de que el golpe no sea tan brutal como parecía en los análisis previos. Ojalá esta vez no sea la excepción.
Fuente | The Wall Street Journal
En Applesfera | Nuevos iPhone 18 Pro y 18 Pro Max - Todo lo que creemos saber sobre ellos
En Applesfera | Qué iPhone comprar en 2026 - Guía para elegir el smartphone de Apple más adecuado para ti
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
La última filtración le pone precio al iPhone 18 Pro y cruzamos los dedos para que esta vez no acierten
fue publicada originalmente en
Applesfera
por
Guille Lomener
.
Guía Completa de Animaciones Fluidas en Jetpack Compose con AnimatedVisibility
A ver, si te dedicas al desarrollo de Android, ya sabrás que una aplicación que se siente «estática» es una aplicación que no engancha. Las animaciones no son solo adornos para que la app se vea bonita; son la herramienta clave para que el usuario entienda qué está pasando en la pantalla, ya sea que un dato se esté cargando o que una ventana se despliegue. Con la llegada de <strongdalam=»Jetpack Compose»>Jetpack Compose, hemos pasado de pelearnos con archivos XML complicados a un modelo declarativo donde decirle a la interfaz cómo moverse es mucho más intuitivo.
Lo cierto es que Compose nos ofrece un abanico de opciones tan amplio que, al principio, uno puede sentirse un poco perdido sobre qué herramienta sacar del cajón. Desde cosas sencillas que se hacen casi solas hasta controles de bajo nivel para los que queremos pixelar cada movimiento, hay una API para cada necesidad. En este artículo vamos a desgranar <strongdalam=»todos los mecanismos de animación»>todos los mecanismos de animación, desde el famoso AnimatedVisibility hasta la gestión de rendimiento, para que tus interfaces fluyan como la seda.
Dominando la Aparición y Desaparición con AnimatedVisibilityCuando queremos que un elemento aparezca o se vaya de la pantalla, la opción más directa es <strongdalam=»AnimatedVisibility»>AnimatedVisibility. Lo bueno de este componente es que no se limita a cambiar la opacidad, sino que gestiona la composición: cuando el elemento es invisible, Compose <strongdalam=»lo retira totalmente del árbol de nodos»>lo retira totalmente del árbol de nodos, lo cual es genial para la accesibilidad y el rendimiento. Si quieres darle un toque más profesional, puedes combinar efectos usando el operador <codedalam=»+»>+, mezclando por ejemplo un <codedalam=»fadeIn()»>fadeIn() con un <codedalam=»slideInVertically()»>slideInVertically() para que el contenido no solo aparezca, sino que se deslice suavemente.
Ahora bien, existe una alternativa si solo buscas un efecto de transparencia: <strongdalam=»animateFloatAsState»>animateFloatAsState aplicado al alfa. La diferencia crucial es que, con este método, el elemento <strongdalam=»sigue ocupando espacio»>sigue ocupando espacio en el diseño aunque no se vea, lo que puede dar problemas con los lectores de pantalla. Por eso, si el objetivo es que el componente desaparezca de verdad, AnimatedVisibility es la elección ganadora.
Animaciones Basadas en Estado: La Magia de animate*AsStatePara aquellos cambios de valores simples, Compose nos regala una familia de funciones muy cómodas. Si necesitas cambiar un color, un tamaño o una posición, tienes <strongdalam=»animateColorAsState, animateDpAsState o animateFloatAsState»>animateColorAsState, animateDpAsState o animateFloatAsState. Estas funciones son ideales porque mantienen el estado durante la recomposición, haciendo que la transición entre el valor A y el valor B sea fluida sin que tengas que programar cada frame manualmente.
Un punto donde mucha gente mete la pata es en la animación de colores de fondo. En lugar de usar <codedalam=»Modifier.background()»>Modifier.background(), que puede provocar demasiadas recomposiciones, es mucho más eficiente emplear <strongdalam=»Modifier.drawBehind»>Modifier.drawBehind. Al dibujar el color directamente en la fase de dibujo, la app respira mejor y el rendimiento sube notablemente. Además, para ajustar la velocidad y el «feeling» de estas animaciones, disponemos de <strongdalam=»animationSpec»>animationSpec, donde podemos elegir entre un <codedalam=»spring»>spring (estilo muelle, más natural) o un <codedalam=»tween»>tween (duración fija con una curva de aceleración).
Coordinación Avanzada: updateTransition y AnimatableA veces no basta con animar una sola cosa. Imagina que quieres que un botón cambie de tamaño, rote 45 grados y cambie de color, todo a la vez y sincronizado. Para esto existe <strongdalam=»updateTransition»>updateTransition. El truco aquí es definir un estado (normalmente un Enum) y dejar que la transición gestione todas las propiedades dependientes. Así, todas las animaciones <strongdalam=»están perfectamente coordinadas»>están perfectamente coordinadas y no se desfasan entre sí.
Si lo que buscas es un control absoluto, casi quirúrgico, tienes que irte a <strongdalam=»Animatable»>Animatable. Esta es la API de bajo nivel. A diferencia de las anteriores, Animatable te permite <strongdalam=»interrumpir la animación»>interrumpir la animación, invertirla o cambiar el objetivo en tiempo real mediante funciones de suspensión como <codedalam=»animateTo()»>animateTo() o <codedalam=»snapTo()»>snapTo(). Es la herramienta perfecta para gestos complejos donde el usuario puede detener el movimiento con el dedo.
Transiciones de Contenido y NavegaciónCuando el cambio no es solo de una propiedad, sino de un componente entero por otro, entra en juego <strongdalam=»AnimatedContent»>AnimatedContent. Es ideal para cambiar entre pantallas de carga y pantallas de datos. Podemos personalizar la <codedalam=»transitionSpec»>transitionSpec para definir exactamente cómo sale el contenido antiguo y cómo entra el nuevo. Para los que usan <strongdalam=»navigation-compose»>navigation-compose, ya es posible integrar estas transiciones directamente en el NavHost mediante <codedalam=»enterTransition»>enterTransition y <codedalam=»exitTransition»>exitTransition, logrando que el salto entre destinos sea elegante y no un corte brusco.
Efectos Continuos y Animaciones de TextoPara aquellos elementos que nunca dejan de moverse, como un spinner de carga o un efecto de pulsación, <strongdalam=»rememberInfiniteTransition»>rememberInfiniteTransition es la solución. Permite crear bucles infinitos usando <codedalam=»infiniteRepeatable»>infiniteRepeatable, donde puedes decidir si la animación debe ir y volver (Reverse) o simplemente reiniciar desde el principio. En el caso del texto, hay un detalle vital: para que las transformaciones de escala o rotación se vean fluidas, debemos configurar el parámetro <strongdalam=»textMotion como TextMotion.Animated»>textMotion como TextMotion.Animated dentro del estilo del texto.
El Rincón del Rendimiento: Evitando el LagAnimar píxeles rápidamente puede consumir muchos recursos si no se hace con cabeza. La regla de oro en Compose es: <strongdalam=»evita la fase de recomposición»>evita la fase de recomposición siempre que puedas. Si animas un valor que cambia el layout, Compose tiene que volver a calcular el tamaño de todo, lo cual es costoso. La solución es delegar el trabajo a la fase de dibujo utilizando <strongdalam=»Modifier.graphicsLayer»>Modifier.graphicsLayer.
Al usar <codedalam=»graphicsLayer»>graphicsLayer para propiedades como la escala, rotación o alfa, estamos moviendo el trabajo a la GPU, saltándonos la recomposición y el rediseño. Asimismo, es muy recomendable usar <strongdalam=»las versiones lambda de los modificadores»>las versiones lambda de los modificadores, ya que permiten que la lectura del estado animado ocurra lo más tarde posible en el ciclo de renderizado, manteniendo así los 60 FPS incluso en dispositivos menos potentes.
Mirando al Pasado: El Enfoque LegacyAunque Compose es el presente, es bueno recordar que antes dependíamos de <strongdalam=»ObjectAnimator y archivos XML»>ObjectAnimator y archivos XML en la carpeta <codedalam=»res/anim»>res/anim. Aquellos sistemas se basaban en <codedalam=»PropertyValuesHolder»>PropertyValuesHolder para alterar la opacidad (ALPHA), la rotación o la traslación. Aunque eran potentes, requerían mucho más código repetitivo y la gestión de los listeners para saber cuándo terminaba una animación era bastante más tediosa que el sistema actual de corrutinas y estados de Compose.
Tener un dominio sólido de las APIs de animación, desde la sencillez de AnimatedVisibility hasta la potencia de Animatable, permite transformar una interfaz plana en una experiencia vibrante. La clave reside en elegir la herramienta adecuada según la complejidad del efecto y priorizar siempre el uso de graphicsLayer para que el rendimiento no se vea comprometido, asegurando que el usuario perciba una aplicación profesional, fluida y agradable al tacto. Comparte esta guía y más usuarios conocerán los trucos.
Sé que todos hablan de Siri AI, pero la "otra IA" que Apple trae en iOS 27 y macOS 27 es brutal
Casi dos semanas después de la WWDC26, empiezo a dejar de lado el disgusto de que Siri AI no llegue a Europa de momento. Esto me está permitiendo observar mejor las otras novedades de inteligencia artificial que sí llegarán a nuestro país. Y las de Safari y Contraseñas de Apple son dos de las más interesantes.
En iOS 27, iPadOS 27 y macOS 27 Golden Gate nos encontraremos con varios modelos de IAs agénticas. De esas que trabajan en segundo plano por ti para ahorrarte trabajo. Y aunque aún están en pañales, son de las funciones con más potencial de los nuevos sistemas. Al menos de lo que nos llegará a Europa.
Índice de Contenidos (4)- La mala noticia: solo para Apple Intelligence
- Un solo botón para cambiar todas las contraseñas
- Safari te notifica cuando algo cambia
- Extensiones personalizadas de Safari
Solo los dispositivos que tengan compatibilidad con Apple Intelligence podrán acceder a las funciones de IA que vamos a comentar. Así que si no se tiene uno de ellos, aunque el software esté actualizado a esas versiones, no lo tendrán.
MODELOS COMPATIBLES
IPHONE
- iPhone 15 Pro / iPhone 15 Pro Max
- iPhone 16e / iPhone 16 / iPhone 16 Plus / iPhone 16 Pro / iPhone 16 Pro Max
- iPhone 17e / iPhone 17 / iPhone 17 Pro / iPhone 17 Pro Max
- iPhone Air
IPAD
- iPad mini (A17 Pro - 2024)
- iPad Air (M1) / iPad Air (M2) / iPad Air (M3) / iPad Air (M4)
- iPad Pro (M1) / iPad Pro (M2) / iPad Pro (M4) / iPad Pro (M5)
MAC
- iMac (M1) / iMac (M3) / iMac (M4)
- Mac mini (M1) / Mac mini (M2/M2 Pro) / Mac mini (M4/M4 Pro)
- Mac Studio (M1 Max/M1 Ultra) / Mac Studio (M2 Max/M2 Ultra) / Mac Studio (M4 Max) / Mac Studio (M3 Ultra)
- Mac Pro (M2 Ultra)
- MacBook Neo (A18 Pro)
- MacBook Air (M1) / MacBook Air (M2) / MacBook Air (M3) / MacBook Air (M4) / MacBook Air (M5)
- MacBook Pro (M1/M1 Pro/M1 Max) / MacBook Pro (M2/M2 Pro/M2 Max) / MacBook Pro (M3/M3 Pro/M3 Max) / MacBook Pro (M4/M4 Pro/M4 Max) / MacBook Pro (M5/M5 Pro/M5 Max)
La primera función de IA agéntica que destaca en los nuevos sistemas operativos es la capacidad de la app Contraseñas de Apple para que baste con tocar un botón para que se cambien todas nuestras contraseñas vulnerables. Y sí, sin tener que ir una por una a cada web y app para cambiarlas.
Desde que llegó en iOS 18, esta aplicación tiene la capacidad de escanear si nuestras contraseñas son vulnerables en virtud de si han aparecido en alguna filtración de datos, si detecta que es muy sencilla o si hace mucho tiempo que no las cambiamos.
En Applesfera El 60% de las contraseñas se revientan en menos de una hora. La solución ya viene instalada de serie en el iPhoneLa diferencia ahora es que también aparece una nueva función de seguridad que servirá para cambiar una, varias o todas esas contraseñas vulnerables. Una IA lo hará en segundo plano sin que tengas que entrar en sus respectivos sitios web y generará una nueva contraseña aleatoria y segura que se quedará guardada en la propia app para que sepas cuál es.
Eso sí, hay que advertir que no todos los sitios web admiten esta funcionalidad, ya que deben tener una API que lo permita. Por suerte, cuentas de Google y otras plataformas importantes ya lo admiten.
Safari te notifica cuando algo cambiaEstás esperando para que vuelva a haber stock de un producto de una tienda online o si este baja de precio. O puede que simplemente quieras ver cuándo se publica un nuevo artículo en Applesfera. Hay muchas situaciones en las que sí o sí tendrás que estar pendiente de una web e ir refrescándola para ver los cambios.
Contra eso "peleará" Safari en el nuevo sistema operativo de Apple , ya que hay una nueva función llamada Notify me y que en castellano se ha traducido como Notificarme (en macOS 27) y Recibir notificaciones (en iOS 27 y iPadOS 27).
Una nueva IA agéntica de Apple hará esa labor de espera por ti. Estará en segundo plano refrescando una página web a la espera de que aparezcan cambios que te interesen y, cuando se producen, te avisan.
Esta función está dentro de las opciones de lectura de Safari y al acceder a ella se debe describir qué es lo que queremos que nos notifique. Ahí se puede usar lenguaje natural para explicar lo que queremos que nos notifique.
En la parte de abajo se puede elegir la frecuencia con la que queremos que Safari busque cambios. Por desgracia no es posible hacer que esté pendiente de forma continua, aunque sí se puede elegir que lo haga cada día, cada semana o cada semana en días alternos.
Cabe señalar que podrás tener la app de Safari cerrada porque el escaneo será en segundo plano. Lo único necesario es que tengas el Mac, iPhone o iPad encendido si quieres que te llegue la notificación.
Extensiones personalizadas de SafariLas extensiones llevan años siendo uno de los puntos débiles de Safari frente a navegadores como Chrome. Apple ha intentado reducir esa distancia con una nueva función que nos permitirá crear una extensión basándose en una descripción. Una que, como con las notificaciones, podremos escribir con lenguaje natural.
La idea es interesante porque elimina una de las mayores barreras de entrada para los usuarios. Hasta ahora había que buscar una extensión ya creada por un desarrollador, instalarla y esperar que siguiese recibiendo soporte. Con esta nueva función, cada usuario podrá crear pequeñas herramientas adaptadas exactamente a sus necesidades. Apple mostró el ejemplo de una extensión para guardar y puntuar recetas, pero las posibilidades parecen mucho más amplias.
En Applesfera El primer susto con macOS 27: una app incompatible y cómo prepararte para lo que vieneLo mejor es que no hace falta saber programar. Safari interpreta la descripción, genera la extensión y la añade directamente al navegador. Y todo a través del mismo botón de opciones de lectura donde ya encontrábamos las opciones de notificaciones.
Una vez que se crea, se guarda como cualquier otra extensión de Safari y puede activarse, desactivarse o eliminarse desde los ajustes del navegador. Además, Apple asegura que el código generado puede revisarse antes de instalarlo, así que así podremos comprobar la transparencia y seguridad para el usuario.
En Applesfera | Apple macOS: todas las versiones hasta la fecha, cómo saber la que estás usando y cómo actualizar el sistema operativo
En Applesfera | ¿Cuántos años de actualizaciones le quedan a mi iPhone? Así podemos saberlo
(function() { window._JS_MODULES = window._JS_MODULES || {}; var headElement = document.getElementsByTagName('head')[0]; if (_JS_MODULES.instagram) { var instagramScript = document.createElement('script'); instagramScript.src = 'https://platform.instagram.com/en_US/embeds.js'; instagramScript.async = true; instagramScript.defer = true; headElement.appendChild(instagramScript); } })(); -
La noticia
Sé que todos hablan de Siri AI, pero la "otra IA" que Apple trae en iOS 27 y macOS 27 es brutal
fue publicada originalmente en
Applesfera
por
Álvaro García M.
.
Guía Completa sobre la Creación de Modificadores Personalizados
Cuando nos metemos en el mundo del desarrollo y el diseño técnico, nos damos cuenta de que las herramientas estándar a veces se quedan cortas. Es ahí donde entra en juego la creación de modificadores personalizados, una funcionalidad que nos permite adaptar el comportamiento de un elemento, ya sea una pieza de software, un objeto físico en 3D o un producto en un catálogo de ventas, exactamente a nuestro antojo.
No importa si estás peleándote con el código de una app o ajustando la rigidez de una pieza impresa; saber cómo extender las capacidades base es lo que diferencia a un usuario promedio de un auténtico experto. En este artículo vamos a desgranar todas las formas de implementar estas personalizaciones desde cero, analizando diferentes entornos técnicos.
Desarrollo de Modificadores en Jetpack ComposeEn el ecosistema de Compose, los modificadores son la clave para alterar la interfaz de usuario. Aunque ya vienen muchos de serie, a veces necesitamos crear nuestra propia lógica. Básicamente, un modificador se divide en una fábrica (que es la función de extensión que usamos para encadenar elementos) y el elemento modificador en sí, donde ocurre la magia del comportamiento.
Si buscas algo sencillo, la mejor opción es encadenar modificadores existentes. Por ejemplo, si siempre usas el mismo relleno y color, puedes agruparlos en una sola función para no repetir código. Ahora bien, si necesitas algo más dinámico, puedes usar una fábrica de modificadores componible. Esto te permite aprovechar APIs de animación como animate*AsState, aunque hay que tener cuidado: estas funciones se ejecutan en cada recomposición, lo que puede afectar al rendimiento si no se gestionan bien.
Para los que buscan la máxima eficiencia, la API de nivel inferior es Modifier.Node. Es la forma más potente y es la que usa el propio equipo de Google. Para implementarlo, necesitas tres piezas: la lógica en el nodo (como DrawModifierNode para dibujar), un ModifierNodeElement que gestione la creación y actualización del nodo, y la fábrica pública. El truco aquí es que los nodos pueden mantener el estado entre recomposiciones, evitando cálculos innecesarios.
Dentro de Modifier.Node, existen situaciones avanzadas. Por ejemplo, si quieres leer valores de CompositionLocal, debes usar currentValueOf dentro de un ámbito específico para que el nodo reaccione a los cambios. Además, puedes optimizar la invalidación desactivando la automática mediante shouldAutoInvalidate = false, lo que permite que solo se redibuje la pantalla cuando cambie el color y no cuando cambie la posición, ahorrando recursos del sistema.
Personalización en la Impresión 3D y ModeladoEn el ámbito del 3D, los modificadores no son código, sino volúmenes de control que permiten cambiar la configuración de una zona específica del modelo sin afectar al resto. Esto es vital para ahorrar material y tiempo de impresión.
- Modificador de Rango de Altura: Permite establecer intervalos verticales donde, por ejemplo, se puede aumentar la densidad del relleno o cambiar el número de perímetros para dar más rigidez a una base.
- Mallas Modificadoras: Se basan en la intersección de una forma geométrica (cubo, esfera, cilindro) con el modelo. Si quieres que solo una esquina de tu pieza tenga propiedades de material distintas, colocas una malla modificadora justo ahí.
Estas herramientas cuentan con modos de ajuste. El modo avanzado se centra en capas y rellenos, mientras que el modo experto permite tocar parámetros críticos como la velocidad de extrusión o el ancho de la línea, permitiendo una precisión industrial en la pieza final.
Gestión de Modificadores en Puntos de Venta (POS)Llevando esto al mundo comercial, como en Square, los modificadores son opciones que el cliente elige al comprar, como añadir extra de queso a una hamburguesa. A diferencia de las variantes (que definen el tamaño), los modificadores son complementos dinámicos.
El proceso consiste en crear un conjunto de modificadores y asignarlo a los artículos correspondientes. Es fundamental configurar los canales de venta, ya que si un modificador no está asignado al canal donde se vende el producto, el cliente no lo verá. Además, se puede anular la configuración general a nivel de artículo individual para establecer reglas de cantidad o visibilidad específicas, permitiendo una gestión del inventario mucho más flexible.
Modificadores de Propiedades en Tekla StructuresFinalmente, en la ingeniería estructural, existen los modificadores de propiedad para componentes personalizados. Aquí se utilizan variables paramétricas para definir la clase y el tamaño de barras de armadura.
Para lograrlo, se crean variables en el editor de componentes y se enlazan mediante ecuaciones a las propiedades del modificador. Por ejemplo, se puede definir que si una variable es 0, se mantenga la clase original de la armadura. Esto permite que el usuario final pueda ajustar el diámetro de las barras desde un cuadro de diálogo sin tener que entrar en la edición profunda del modelo, agilizando enormemente el flujo de trabajo técnico.
Ya sea optimizando el renderizado de una aplicación móvil, ajustando la resistencia de una pieza plástica, personalizando un menú de restaurante o parametrizando estructuras de acero, el dominio de los modificadores permite pasar de soluciones genéricas a herramientas precisas y adaptadas a cada necesidad específica del proyecto. Comparte esta guía y más usuarios conocerán del tema.
Guía Maestra de Tipografías y Estilizado Avanzado de Texto en Jetpack Compose
Cuando nos ponemos manos a la obra con el diseño de interfaces en Android, el texto es probablemente el elemento más recurrente. No se trata solo de soltar un string en la pantalla, sino de cómo hacemos que ese contenido tenga personalidad y guíe al usuario a través de la jerarquía visual de la aplicación.
Jetpack Compose ha venido a simplificarnos la vida, sustituyendo el antiguo TextView por el componente Text. Aunque a simple vista parece sencillo, tiene una profundidad increíble que nos permite desde aplicar un simple color hasta crear efectos de marquesina o integrar fuentes que se descargan sobre la marcha.
Para empezar, el parámetro fontFamily es nuestra herramienta clave. Por defecto, Compose nos ofrece las clásicas serif, sans-serif, monoespaciadas y cursivas. Pero claro, si queremos que la app tenga un toque único, necesitamos fuentes personalizadas alojadas en la carpeta res/font. Para ello, definimos un objeto FontFamily donde asociamos cada archivo .ttf con su peso correspondiente, como FontWeight.Bold o FontWeight.Light.
Si no quieres cargar la app de archivos pesados, la API de fuentes descargables de Google es la solución ideal. A partir de la versión 1.2.0, podemos configurar un GoogleFont.Provider con las credenciales necesarias y cargar la fuente de forma asíncrona. Un truco vital aquí es establecer fuentes de resguardo (fallback); así, si la descarga falla por falta de conexión, el sistema utilizará una fuente local para que la interfaz no se rompa.
Configuración de Tipografías y Familias de FuentesAquí es donde la cosa se pone interesante. Las fuentes variables son archivos únicos que permiten ajustar ejes de diseño como el peso, la inclinación o el ancho sin necesidad de tener diez archivos diferentes. Esto solo es compatible con Android O en adelante, por lo que es obligatorio implementar una comprobación de la versión del SDK para ofrecer una fuente estática a los dispositivos más antiguos.
Lo más potente es que podemos manipular ejes personalizados. Por ejemplo, en fuentes como Roboto Flex, podemos alterar el ascenderHeight (la altura de las letras minúsculas) o el counterWidth mediante FontVariation.Settings. Esto nos permite un ajuste quirúrgico de la tipografía según el espacio disponible o la intención comunicativa.
El Poder de las Fuentes VariablesMás allá de la fuente, el componente Text nos permite jugar con el fontSize (usando sp o dp), el letterSpacing para airear el texto y el lineHeight para mejorar la legibilidad de párrafos largos. Si queremos que el texto se corte con elegancia, combinamos maxLines con TextOverflow.Ellipsis, lo que añade los típicos puntos suspensivos al final de la frase cuando el contenido no cabe.
Para llevar la estética al extremo, tenemos la API de Brush. En lugar de un color sólido, podemos aplicar un linearGradient para que el texto tenga un degradado de colores. Esto se puede aplicar a todo el texto o solo a una parte usando SpanStyle. Además, si necesitamos que un texto largo se desplace automáticamente, el modificador basicMarquee() crea ese efecto de cinta animada tan útil en notificaciones o títulos extensos.
A veces necesitamos que una sola línea tenga palabras en negrita, otras en azul y algunas en cursiva. Para esto existe AnnotatedString. Usando el constructor buildAnnotatedString, podemos intercalar diferentes estilos mediante bloques withStyle, permitiendo que cada segmento de la frase tenga su propia identidad visual.
Estilizado Detallado y Efectos VisualesOtra funcionalidad muy potente es la capacidad de renderizar HTML con vínculos mediante AnnotatedString.fromHtml(). Esto convierte etiquetas básicas de HTML en texto estilizado de Compose, permitiendo que los enlaces sean clicables y tengan un aspecto personalizado gracias a TextLinkStyles, lo que facilita enormemente la presentación de textos legales o informativos.
Para no ir definiendo estilos en cada pantalla, lo ideal es centralizar todo en el archivo Type.kt. Aquí definimos un objeto Typography que mapea los roles de Material Design 3 (como displayLarge, headlineMedium o bodySmall) a nuestros TextStyle personalizados. Al pasar este objeto al MaterialTheme, podemos invocar cualquier estilo simplemente llamando a MaterialTheme.typography.h6.
Si en algún momento un texto específico necesita un pequeño ajuste sobre el estilo global, no hace falta redefinirlo todo; basta con usar la función copy de la data class. De esta manera, podemos mantener la base del tema pero añadir, por ejemplo, una sombra personalizada mediante la clase Shadow, definiendo su desplazamiento y radio de desenfoque para ganar profundidad.
Dominando estas herramientas, desde la gestión de archivos de fuentes y el aprovechamiento de las variables de Android O, hasta la sofisticación de los gradientes y las cadenas anotadas, conseguimos que la interfaz no solo sea funcional, sino que tenga un acabado profesional y pulido que mejora drásticamente la experiencia de usuario en cualquier aplicación moderna. Comparte esta guía y más usuarios sabrán del tema.
Guía Completa para Implementar Material Design 3 en Jetpack Compose
Si te estás lanzando al mundo de Android, probablemente te hayas dado cuenta de que la era de pelearse con archivos XML interminables para definir estilos ha quedado atrás. Con la llegada de Jetpack Compose, el diseño de interfaces ha dado un giro de 180 grados, permitiéndonos definir la estética de nuestra aplicación directamente en Kotlin. Ya no hace falta ser un mago de los estilos para lograr que una app se vea profesional; ahora todo fluye de manera mucho más natural y declarativa.
En este sentido, Material Design 3 (también conocido como M3 o Material You) se presenta como la herramienta definitiva para crear experiencias que no solo sean funcionales, sino que tengan alma. No se trata solo de poner botones bonitos, sino de implementar un sistema completo donde el color, la tipografía y las formas trabajan juntos para guiar al usuario. Vamos a desgranar cómo aterrizar estos principios en tus componentes de Compose para que tus interfaces pasen de ser correctas a ser sencillamente espectaculares.
La columna vertebral: MaterialThemePara que todo el despliegue visual funcione, necesitamos un núcleo que distribuya las reglas de estilo. En Compose, esto se consigue envolviendo el contenido de la aplicación en el elemento MaterialTheme. Este componente es el encargado de gestionar los tres pilares fundamentales: el esquema de colores, la escala tipográfica y las formas de los contenedores. Cuando modificas un valor aquí, el cambio se propaga automáticamente a todos los componentes de M3 que estés utilizando, lo que ahorra un tiempo 말 increíble.
Es común crear una función Composable personalizada, como AppTheme, que determine si se debe aplicar la paleta clara o la oscura basándose en isSystemInDarkTheme(). De esta forma, la aplicación se adapta al entorno del sistema operativo sin que el desarrollador tenga que intervenir manualmente en cada pantalla.
Dominando la paleta de colores y el dinamismoEl sistema de color en M3 es mucho más sofisticado que en versiones anteriores. Ya no hablamos solo de un color primario y uno secundario, sino de un conjunto de roles. Tenemos colores base como primary, secondary y tertiary, pero lo realmente interesante son los contenedores (como primaryContainer) y los colores de contenido (onPrimary), que aseguran que el texto sea siempre legible sobre el fondo.
- Color Dinámico: Esta es la joya de la corona de Material You. A partir de Android 12 y su nueva interfaz, el sistema puede extraer colores del fondo de pantalla del usuario para generar un esquema de colores personalizado. En Compose, esto se implementa mediante funciones como dynamicLightColorScheme.
- Roles de énfasis: El color primario se reserva para las acciones más importantes, mientras que el secundario se usa para elementos menos destacados, como chips de filtro. El terciario sirve para crear contrastes acentuados y dirigir la mirada del usuario hacia puntos específicos.
- Tonal Elevation: A diferencia de las sombras tradicionales, M3 utiliza superposiciones de color tonal. Cuanto más elevación tenga una superficie, más se mezclará el color primario con el fondo, creando una separación visual más orgánica.
Para quienes no quieren romperse la cabeza eligiendo tonos, herramientas como el Material Theme Builder permiten exportar directamente el código de Color.kt y Theme.kt, facilitando la transición desde la marca de la empresa hacia el código real.
Tipografía y jerarquía visualOlvídate de definir tamaños de fuente al azar en cada texto. Material 3 propone una escala de escritura simplificada dividida en categorías: display, headline, title, body y label, cada una con variantes grande, mediana y pequeña. Esta estructura garantiza que haya un ritmo visual coherente en toda la aplicación.
Para implementar esto, se utiliza la clase Typography, donde puedes sobrescribir los estilos predeterminados usando TextStyle. Es fundamental prestar atención al interlineado (lineHeight) y al espaciado entre letras para mejorar la legibilidad. Una vez definida la tipografía, se accede a ella mediante MaterialTheme.typography.titleLarge, asegurando que cualquier cambio global en el tema se refleje en todos los textos de la app.
El lenguaje de las formasLas formas en M3 no son solo esquinas redondeadas; son herramientas para comunicar el estado y la marca. El sistema define categorías como extraSmall, small, medium, large y extraLarge. Dependiendo del componente, el sistema asignará una forma u otra: un botón suele usar la forma pequeña, mientras que un diálogo podría usar la mediana.
En Compose, podemos personalizar estas formas en el archivo Shape.kt usando RoundedCornerShape o incluso CutCornerShape si buscamos un look más agresivo. Además, es posible aplicar estas formas mediante modificadores como Modifier.clip() o directamente en el parámetro shape de componentes como Card o FloatingActionButton.
Hacia la expresividad: Material 3 Expressive (M3E)Google ha llevado el diseño un paso más allá con la versión Expressive, que se convierte en la estrella de Android 16. M3E no es solo un cambio cosmético, sino una evolución basada en la psicología del usuario para crear interfaces más humanizadas y emocionales. El objetivo es que la interacción no sea puramente transaccional, sino que genere satisfacción.
Entre las novedades más potentes destacan las animaciones elásticas (spring-based), que hacen que los elementos se muevan de forma más orgánica y natural, imitando la física del mundo real. También se introduce una biblioteca expandida con hasta 35 formas distintivas y la capacidad de realizar transiciones suaves entre ellas (shape-morphing), elevando la sofisticación visual de la interfaz.
Componentes de navegación y adaptabilidadUn aspecto crítico es cómo la app se comporta en diferentes tamaños de pantalla. M3 ofrece componentes específicos para cada caso: el NavigationBar es ideal para móviles con pocos destinos, mientras que el NavigationRail funciona mejor en tablets en modo horizontal. Para pantallas grandes, el NavigationDrawer permite mostrar más detalles sin saturar la vista.
La clave aquí es la ergonomía y la accesibilidad. No basta con que sea bonito; debe ser usable. Por ello, es vital respetar los contrastes de color (usando siempre la pareja color y onColor) y aprovechar que los componentes de Material 3 ya vienen con estándares de accesibilidad integrados para usuarios con discapacidades visuales o motoras.
Al final del día, integrar Material Design 3 en Jetpack Compose se resume en aprovechar el poder de MaterialTheme para centralizar la estética, permitiendo que el desarrollo sea más rápido y la interfaz sea coherente. Desde el uso de colores dinámicos que reflejan la identidad del usuario hasta la implementación de animaciones elásticas y tipografías jerarquizadas, el ecosistema de Android ofrece hoy una flexibilidad sin precedentes para crear productos digitales que sean atractivos, accesibles y profundamente expresivos. Comparte la información y más usuarios sabrán del tema.
Interoperabilidad en Android: Guía para integrar Vistas XML en Jetpack Compose
Si llevas un tiempo desarrollando para Android, sabrás que el salto hacia Jetpack Compose ha sido un auténtico cambio de paradigma. Pasar de definir interfaces en archivos XML a escribir código declarativo en Kotlin no es solo un cambio de sintaxis, sino una forma totalmente distinta de entender cómo se construye la UI, alejándonos de las órdenes imperativas para centrarnos en cómo debe verse la pantalla según el estado actual.
Lo mejor de todo es que no hace falta tirar todo el código antiguo a la basura para empezar. Google ha diseñado Compose pensando en una migración progresiva y segura, permitiendo que los componentes modernos y las vistas legacy convivan en la misma aplicación sin que la app explote en el intento. A continuación, desglosamos a fondo cómo lograr que estas dos tecnologías se lleven bien.
El camino hacia la migración de temasCuando decides dar el paso, el diseño visual es lo primero que choca. En el mundo de las vistas tradicionales, dependemos de Material Design a través de AppCompat o MDC-Android (versiones 1, 2 y 3). Por otro lado, Compose ofrece sus propias implementaciones de Material 2 y Material 3. Para que la app no parezca un Frankenstein visual, es vital aplicar un MaterialTheme antes de cualquier elemento componible que emita interfaz.
Si tu proyecto ya utiliza Material 3 en XML, lo ideal es que estandarices la versión también en Compose, pudiendo profundizar en la guía definitiva para explorar Material 3 Expressive. Recuerda que los componentes como botones o textos dependen totalmente de este tema; si no lo defines, el comportamiento de la UI es básicamente impredecible y podría dar problemas de renderizado.
Integración de Compose en layouts XMLPara meter un trozo de Compose dentro de un diseño basado en XML, la herramienta clave es el ComposeView. Básicamente, añades este componente en tu archivo de layout y, desde el código Kotlin, utilizas la función setContent para inyectar tus funciones @Composable. Un detalle fundamental aquí es configurar la estrategia de composición, utilizando DisposeOnViewTreeLifecycleDestroyed para evitar fugas de memoria y asegurar que el ciclo de vida de una aplicación de Android se gestione correctamente.
Si necesitas hacer el proceso inverso, es decir, crear un componente basado en Compose que pueda ser usado como si fuera una vista tradicional en XML, debes extender de AbstractComposeView. En este caso, creas una clase que actúe como wrapper, donde el método Content se encarga de renderizar el Composable, permitiendo que el componente sea totalmente reutilizable en cualquier parte de la app, independientemente de la tecnología de la pantalla.
Gestión de estados y la Fuente de ConfianzaUno de los puntos más peliagudos es decidir quién manda sobre los datos. En el desarrollo moderno, aplicamos el Flujo Unidireccional de Datos (UDF). Si Compose y el sistema de vistas deben compartir información, lo más sano es encapsular ese estado en un ViewModel que exponga flujos de datos actualizables para ambas plataformas.
Si Compose es el dueño de la verdad, puedes usar SideEffect para enviar actualizaciones al sistema de vistas. Por el contrario, si el sistema de vistas es el propietario, se recomienda utilizar mutableStateOf para que la comunicación sea segura entre hilos y Compose pueda reaccionar instantáneamente a los cambios del estado mutable.
Arquitectura y ViewModels en entornos mixtosEl uso de ViewModels es fundamental, pero hay que tener ojo con el alcance del ciclo de vida. Al llamar a viewModel() dentro de un Composable, se obtiene una instancia ligada al dueño del ciclo de vida (como la Actividad o el Fragmento). Para evitar errores, no pases el ViewModel directamente a componentes hijos; es mucho mejor pasar solo los datos necesarios y las funciones de callback.
Si utilizas la librería de navegación de Jetpack, el alcance del ViewModel se ajusta al destino del gráfico de navegación, lo que permite que se cree una instancia fresca cada vez que el usuario navega a una pantalla nueva, limpiando la memoria cuando el destino desaparece de la pila.
Pruebas, RecyclerView y WindowInsetsPara testear una interfaz híbrida, ya no basta con ActivityScenarioRule. Ahora debemos recurrir a createAndroidComposeRule, que combina la capacidad de probar elementos de Compose y vistas tradicionales simultáneamente. En cuanto al rendimiento, si necesitas meter elementos componibles dentro de un RecyclerView, asegúrate de usar la versión 1.3.0-alpha02 o superior para evitar tirones y optimizar la carga.
Finalmente, el tema de los WindowInsets puede ser un dolor de cabeza. Cuando tienes una jerarquía mixta, debes decidir explícitamente quién consume las inserciones de la pantalla. Si el diseño externo es de View, este debe consumirlas y Compose debe ignorarlas; si el root es Compose, haz lo contrario y ajusta el padding en los AndroidView según sea necesario para que el contenido no quede oculto tras la barra de estado, similar a como se hace al activar la barra de navegación transparente en Android.
Dominar la convivencia entre el sistema imperativo y el declarativo permite que las aplicaciones evolucionen sin necesidad de reescribirlas desde cero, aprovechando la reducción de código y la independencia del sistema operativo que ofrece Compose mientras se mantiene la estabilidad de las vistas legacy mediante una gestión coherente del estado y el ciclo de vida. Comparte la guía y más usuarios conocerán del tema.
Guía Completa de Jetpack Compose: Domina la UI Declarativa en Android
Si te dedicas al desarrollo de software, ya sabrás que montar una interfaz de usuario que no dé guerra suele ser un quebradero de cabeza. Durante años, los que programamos en Android estuvimos encadenados al sistema de XML, donde teníamos que irle diciendo a la aplicación paso a paso cómo cambiar cada elemento, un proceso imperativo que a menudo resultaba tedioso y propenso a errores.
Pero las cosas han cambiado a pasos agigantados. Hemos entrado en la era de Jetpack Compose, el toolkit nativo de Google que ha venido a romper los esquemas. Básicamente, se trata de dejar de pelearse con archivos externos y empezar a diseñar la UI directamente en Kotlin, haciendo que el desarrollo sea mucho más ágil y, sobre todo, más intuitivo para cualquiera que quiera modernizar sus aplicaciones.
El salto conceptual: Del «cómo» al «qué»Para los desarrolladores más curtidos, el mayor reto no es el código, sino la mentalidad. El antiguo enfoque imperativo era como darle instrucciones detalladas a un robot: buscabas el elemento por su ID y le ordenabas cambiar el texto o hacerse visible. En cambio, con Compose adoptamos un enfoque declarativo. Aquí no damos órdenes de cambio, sino que describimos el estado final que queremos ver en pantalla.
En lugar de manipular vistas, definimos funciones que emiten la interfaz basándose en los datos actuales. Lo mejor de todo es que, cuando los datos varían, el framework actualiza inteligentemente solo los trozos de la pantalla que han cambiado, eliminando así gran parte del código repetitivo y esos fallos tan molestos de sincronización entre la lógica y lo que el usuario ve.
Construyendo con Funciones @ComposableEn este nuevo ecosistema, los ladrillos fundamentales son las funciones anotadas con @Composable. Ya no necesitamos clases gigantescas ni layouts en XML; ahora todo se reduce a componer pequeñas funciones reutilizables que el compilador de Compose procesa de forma especial para gestionar la renderización.
Para que estas funciones trabajen como es debido, deben seguir unas reglas básicas: tienen que ser rápidas y sin efectos secundarios, ya que pueden ejecutarse muchísimas veces por segundo, especialmente durante las animaciones. Además, Compose puede ejecutar estas funciones en paralelo o en cualquier orden para optimizar el rendimiento al máximo.
Tu primer contacto con la UIPara crear un simple texto, ya no hace falta un TextView. Usamos el componente Text dentro de una función Composable. Una herramienta que te salva la vida aquí es la anotación @Preview, que te permite ver cómo queda el diseño en tiempo real dentro de Android Studio sin tener que lanzar el emulador cada dos minutos.
El poder de los ModifiersSi quieres añadir margen, cambiar colores o gestionar eventos de clic, entran en juego los Modifiers. En lugar de tener mil atributos diferentes en un XML, Compose centraliza todo en este sistema de decoración secuencial. Al encadenar modificadores, puedes definir el estilo y el comportamiento de un elemento de forma flexible, recordando que el orden en que los aplicas puede alterar el resultado visual.
Organizando la interfaz y el flujo de datosPara maquetar pantallas más complejas, Compose nos ofrece tres pilares básicos: Column para apilar elementos verticalmente, Row para colocarlos de lado a lado y Box para encimar componentes, funcionando de forma similar al antiguo FrameLayout.
Entendiendo el Estado y la RecomposiciónUna aplicación que no reacciona es solo un dibujo. Aquí es donde entra el concepto de Estado (State), que es básicamente cualquier valor que cambie y afecte a la UI. Cuando un estado varía, ocurre la Recomposición: el proceso donde Compose vuelve a ejecutar las funciones afectadas para reflejar el nuevo valor en la pantalla.
Para gestionar esto, usamos mutableStateOf para crear valores observables y remember para que el sistema no olvide la información cada vez que la función se vuelva a ejecutar. Esta combinación permite que la interfaz sea totalmente reactiva a las acciones del usuario.
La Elevação del Estado (State Hoisting)A medida que la app crece, dejar que un componente gestione su propio estado puede ser un problema de arquitectura. Para evitar que el código se vuelva un caos, aplicamos el State Hoisting. Consiste en mover el estado hacia un componente padre, convirtiendo al hijo en un Composable stateless (sin estado).
El hijo solo recibe el valor actual y notifica los eventos mediante lambdas, mientras que el padre controla la lógica. Esto crea un Flujo de Datos Unidireccional (UDF): los datos bajan y los eventos suben, lo que hace que la aplicación sea mucho más fácil de testear y escalar siguiendo patrones como MVVM.
Innovaciones y el Futuro de AndroidEl ecosistema no se detiene y la IA generativa se está integrando profundamente. Google ha introducido la API Prompt para Gemini Nano, permitiendo que los modelos de IA procesen datos directamente en el dispositivo, mejorando la privacidad y la velocidad. Además, herramientas como Firebase AI Logic están facilitando la creación de funciones multimodales que procesan audio, texto e imágenes de forma fluida.
Para los desarrolladores, la productividad ha dado un salto con el Modo Agente de Android Studio, capaz de planificar y ejecutar cambios complejos en múltiples archivos basándose en lenguaje natural. Asimismo, la llegada de Android XR abre la puerta a experiencias espaciales inmersivas, apoyándose en el SDK Jetpack XR para adaptar apps móviles a entornos de realidad extendida.
Novedades en Navegación y RendimientoLa reciente versión beta de Jetpack Navigation 3 redefine la forma de movernos entre pantallas, basándose enteramente en Compose State. Esto significa que la navegación ahora es completamente declarativa y adaptable. Respecto al rendimiento, aunque la carga inicial puede variar, la recomposición inteligente hace que las interfaces dinámicas sean más eficientes que el antiguo sistema de vistas.
Desde la interoperabilidad con XML mediante ComposeView hasta la gestión de listas masivas con LazyColumn y LazyRow, el camino está trazado. La clave para dominar esta tecnología es la práctica constante, aprovechando los Codelabs y la documentación oficial para convertir el código estático en experiencias vivas y fluidas.
La transición hacia un modelo declarativo no solo simplifica la escritura de código, sino que redefine la arquitectura de las apps mediante el control preciso del estado y la optimización de la recomposición. Al integrar estas bases con las nuevas capacidades de IA en Android Studio y las posibilidades de Android XR, el desarrollo de interfaces se vuelve una experiencia más potente, modular y orientada al rendimiento, dejando atrás la rigidez del XML para abrazar la flexibilidad total de Kotlin. Comparte la guía y más usuarios sabrán del tema.
Guía Completa de Navegación Avanzada en Jetpack Compose
Si te has lanzado a la aventura de desarrollar con Jetpack Compose, habrás notado que no solo cambia la interfaz, sino que trastoca por completo la forma en la que entendemos el flujo de una aplicación. Olvida los mundos complicados de los Fragmentos tradicionales; aquí nos movemos en un ecosistema donde la navegación se basa en funciones componibles que se intercambian dinámicamente.
Aprender a movernos entre pantallas no es moco de pavo, ya que implica gestionar un estado global que determine qué ve el usuario en cada momento. En este artículo vamos a desgranar desde los conceptos más básicos hasta las técnicas más avanzadas, como el paso de parámetros complejos y la integración de enlaces externos, para que tu app sea robusta y escalable.
Los pilares de Navigation ComposePara empezar a montar el tinglado, debemos entender que el sistema se apoya en tres patas fundamentales. Primero tenemos el NavController, que es el cerebro encargado de ejecutar los saltos entre pantallas y gestionar la pila de actividades. Luego está el NavGraph, que básicamente es el mapa donde definimos qué rutas existen y a qué componente se asocian. Por último, el NavHost actúa como el contenedor físico que renderiza la pantalla actual según la ruta activa.
Para poner esto en marcha, es vital utilizar rememberNavController() en el nivel más alto de la jerarquía, normalmente en la Activity principal. Esto asegura que el controlador sobreviva a los cambios de configuración y actúe como la fuente de verdad para toda la navegación de la aplicación, integrándose correctamente con el ciclo de vida de una aplicación de Android.
Definición de rutas y gestión del NavHostUna ruta es, sencillamente, una cadena de texto que identifica un destino, muy parecido a cómo funcionan las URLs en la web. Para evitar errores de escritura y mantener el código limpio, una práctica muy recomendada es utilizar clases de tipo enum. De este modo, podemos asociar cada ruta a un valor concreto y, si queremos ponernos más detallistas, añadir propiedades como el título de la pantalla directamente en el enum.
El NavHost se configura indicando el controlador y el destino inicial. Dentro de su bloque, utilizamos la función composable() para mapear cada ruta con su respectiva pantalla. Un punto clave aquí es la reutilización de componentes; por ejemplo, si tienes varias pantallas con el mismo diseño pero distintos datos (como una selección de sabores y otra de fechas), puedes usar la misma función componible pasando diferentes parámetros.
Navegación inteligente y flujo de datosUno de los errores más comunes es pasar el NavController a todas las pantallas. ¡Ni hablar! Eso rompe la reutilización y complica las previsualizaciones. Lo ideal es elevar la lógica de navegación: las pantallas deben recibir lambdas o callbacks (como un onNextButtonClicked) y dejar que el NavHost decida a dónde ir. Así, la IU es independiente de la lógica de negocio.
Pasando argumentos entre pantallasCuando necesitamos que una pantalla sepa qué elemento mostrar (por ejemplo, el detalle de un producto), utilizamos argumentos en la ruta. Esto se hace añadiendo el parámetro entre llaves, como "detalle/{id}". Podemos definir el tipo de dato, como NavType.IntType, para asegurar que la app no pete al recibir información inesperada.
Para recuperar este dato, accedemos al NavBackStackEntry dentro del NavHost. Desde ahí, extraemos el valor usando arguments?.getString() o el método correspondiente al tipo de dato, pasándolo finalmente como parámetro al componente de la pantalla de detalle.
Optimización de la pila de actividades y UXSi no controlamos la pila de actividades, el usuario podría terminar con diez copias de la misma pantalla al pulsar repetidamente un botón. Para evitar este caos, usamos el parámetro launchSingleTop = true, que garantiza que solo haya una instancia del destino en la cima. Además, el uso de popUpTo permite limpiar la pila hasta un punto concreto, evitando que el botón de retroceso del sistema se vuelva infinito.
Para que la experiencia sea fluida, podemos activar restoreState = true. Esto permite que, si el usuario navega fuera de una pantalla y luego vuelve, se conserve la posición del scroll y los datos introducidos, evitando que la pantalla se recargue desde cero y dando una sensación de mayor velocidad.
Integración de Deep Links e Intents externosLa navegación no tiene por qué limitarse al interior de la app. Los Deep Links permiten que un enlace externo (como un email o una notificación) abra una pantalla específica. Esto requiere configurar un intent-filter en el archivo AndroidManifest.xml definiendo el esquema y el host (por ejemplo, rally://cuenta).
En el NavHost, añadimos la propiedad deepLinks al destino correspondiente usando navDeepLink. Así, el sistema reconoce la URL y redirige al usuario automáticamente. Por otro lado, para interactuar con otras aplicaciones del sistema (como compartir un pedido), utilizamos los Intents de Android, específicamente ACTION_SEND, configurando el tipo de contenido como texto plano y lanzando el chooser del sistema.
Sincronización de la AppBar con la navegaciónPara que el usuario no se pierda, la barra superior debe reaccionar al cambio de pantalla. Podemos lograr esto observando el estado actual de la navegación mediante currentBackStackEntryAsState(). Al obtener la ruta activa, podemos actualizar el título de la TopAppBar dinámicamente.
Es fundamental implementar el botón Up (la flecha de volver). Este solo debe ser visible si existe una pantalla previa en la pila, lo cual comprobamos verificando que previousBackStackEntry no sea nulo. Al pulsarlo, ejecutamos navController.navigateUp() para regresar un paso atrás de forma natural.
Estrategias de Testing para la navegaciónProbar la navegación puede ser un quebradero de cabeza si no se hace bien. La clave es usar la librería navigation-testing y el TestNavHostController. En lugar de probar la Activity completa, creamos un entorno de prueba donde instanciamos el NavHost y verificamos que, tras un clic, el nodo con el contentDescription de la pantalla de destino esté visible.
También es muy útil comparar la ruta actual del controlador con la ruta esperada usando aserciones de JUnit. Esto nos permite validar flujos complejos sin necesidad de interactuar visualmente con cada elemento, asegurando que la lógica de enrutamiento sea sólida antes de desplegar la app a producción.
Dominar el ecosistema de navegación en Compose implica pasar de un esquema rígido de actividades a un flujo flexible basado en estados y rutas. Desde la configuración básica del NavHost y el uso de enums para evitar errores, hasta la implementación de argumentos dinámicos, Deep Links y una gestión eficiente de la pila de actividades con launchSingleTop, el objetivo es siempre el mismo: crear una experiencia de usuario intuitiva y un código mantenible que facilite las pruebas automatizadas y la escalabilidad del proyecto. Comparte la guía y más usuarios conocerán del tema.
Guía Completa para Crear Listas Infinitas y Eficientes con LazyColumn y LazyRow en Jetpack Compose
Cuando nos ponemos manos a la obra con el desarrollo de aplicaciones modernas, es muy común que necesitemos mostrar una cantidad ingente de datos, ya sea una lista de contactos, un feed de noticias o una galería de fotos. Si intentamos meter todo eso en un contenedor simple, la app se quedaría colgada antes de que el usuario pudiera siquiera hacer un gesto de scroll, ya que el sistema intentaría renderizar miles de elementos a la vez, fundiendo la batería y saturando la memoria del dispositivo.
Para evitar que nuestra interfaz se vuelva lenta como una tortuga, Jetpack Compose nos ofrece herramientas llamadas componentes diferidos o «lazy». Básicamente, estos componentes son los herederos espirituales del antiguo RecyclerView, pero con una sintaxis mucho más limpia y potente que hace que programar listados sea, sinceramente, pan comido comparado con el pasado.
¿Cuándo usar Column y Row frente a las versiones Lazy?Si tienes un grupo pequeño de elementos que sabes que no van a crecer mucho y que no requieren desplazamiento, usar Column o Row es la opción más directa. Simplemente iteras la lista con un forEach y listo. Incluso puedes añadir el modificador verticalScroll() para que la pantalla se mueva, pero ojo: esto es una trampa para el rendimiento si la lista es larga, porque todos los elementos se componen independientemente de si el usuario los está viendo o no.
Aquí es donde entran en juego LazyColumn y LazyRow. Estos componentes solo renderizan los elementos que están dentro del viewport (el área visible). En cuanto un elemento sale de pantalla, el sistema lo «recicla» para usarlo en el siguiente que va a entrar, lo que garantiza que la app vuele aunque tengas diez mil registros.
Dominando el DSL de LazyListScopeA diferencia de los diseños tradicionales, los componentes diferidos no usan un bloque de contenido normal, sino un LazyListScope. Esto es básicamente un lenguaje específico de dominio (DSL) que nos permite definir la estructura de la lista de forma muy flexible. Tenemos varias funciones clave: item() para añadir un elemento único (como un encabezado) y items() para volcar una colección completa de datos.
Si necesitas saber en qué posición estás, existe la variante itemsIndexed(), que te devuelve el índice del elemento actual. Esto es superútil para cambiar el color de fondo de las filas o gestionar clics específicos basados en la posición.
Cuadrículas: LazyVerticalGrid y LazyHorizontalGridA veces una lista simple no basta y necesitamos organizar el contenido en celdas. Para ello, Compose dispone de LazyVerticalGrid y LazyHorizontalGrid. Lo más potente aquí es la configuración de las columnas. Podemos usar GridCells.Fixed si queremos un número exacto de columnas, o GridCells.Adaptive, que es la joya de la corona, ya que define un tamaño mínimo para la celda y ajusta la cantidad de columnas automáticamente según el ancho de la pantalla del móvil o tablet.
Si el diseño es más irregular, como el estilo Pinterest, tenemos las cuadrículas escalonadas (StaggeredGrid). Estas permiten que los elementos tengan alturas o anchuras diferentes sin dejar huecos vacíos molestos, manteniendo la eficiencia del renderizado diferido.
Optimización del rendimiento y experiencia de usuarioPara que la lista no se sienta «tosca», es fundamental gestionar el espaciado. Podemos usar contentPadding para dejar un margen general alrededor de toda la lista y Arrangement.spacedBy() para inyectar espacio exacto entre cada ítem. Pero si queremos ir al siguiente nivel, debemos hablar de las claves (keys).
Por defecto, Compose usa la posición como clave. Si mueves un elemento de sitio, el estado se pierde. Al proporcionar una clave estable y única (como el ID de la base de datos), Compose sabe exactamente qué elemento es cuál, permitiendo que el estado recordado se mantenga y que las animaciones de movimiento funcionen a la perfección con el modificador animateItem().
Gestión avanzada del estado y el scrollSi queremos que nuestra app reaccione a lo que el usuario hace mientras desliza, necesitamos elevar el LazyListState mediante rememberLazyListState(). Con esto podemos saber cuál es el primer elemento visible y así, por ejemplo, mostrar un botón de «volver arriba» solo cuando el usuario haya bajado un poco en la lista.
Para evitar que la interfaz se redibuje constantemente, es recomendable envolver estas comprobaciones en un derivedStateOf(). Además, si queremos controlar el scroll programáticamente, podemos usar animateScrollToItem() dentro de una corrutina para crear transiciones suaves hacia una posición concreta.
Consejos de oro para evitar errores comunesUn error típico es intentar anidar un LazyColumn dentro de otro componente que ya tiene scroll en la misma dirección; esto lanzará una IllegalStateException. La solución es simple: mete todo dentro de un único LazyColumn y usa item() e items() para organizar las diferentes secciones.
Otro punto crítico es evitar los elementos de 0 píxeles. Si cargas imágenes asincrónicamente sin definir un tamaño previo, el componente lazy pensará que todo cabe en pantalla y renderizará todo de golpe. Es vital establecer un tamaño predeterminado o un marcador de posición (placeholder) para mantener la estabilidad del scroll.
Finalmente, para exprimir al máximo la CPU, conviene usar el parámetro contentType. Esto le dice a Compose qué tipo de elemento es cada uno, permitiendo que reutilice las composiciones solo entre elementos de la misma estructura, evitando así esfuerzos innecesarios de renderizado.
Tener una interfaz fluida depende de elegir el contenedor adecuado según la cantidad de datos, optimizar la reutilización mediante claves y tipos de contenido, y manejar correctamente los estados de desplazamiento para que la navegación sea intuitiva y sin tirones. Comparte la información y ayuda a más personas a que conozcan del tema.
Guía Completa de Gestión de Estado en Jetpack Compose: Dominando remember y mutableStateOf
Si vienes del mundo de las vistas tradicionales de Android, probablemente estés acostumbrado a pelearte con los ID de los XML y a llamar a métodos como setText para actualizar la pantalla. En el universo de Jetpack Compose, el chip cambia por completo: aquí la interfaz de usuario es una función del estado. Esto significa que no andamos empujando cambios manualmente a la vista, sino que definimos cómo debe lucir la app según los datos actuales y dejamos que el framework se encargue de la magia.
Entrar en este flujo declarativo puede costar un pelín al principio, pero una vez que le pillas el truco, te das cuenta de que es mucho más limpio. La clave de todo reside en entender que el estado es cualquier valor que pueda variar con el tiempo, desde un simple contador de likes hasta una base de datos compleja de Room, y que la UI reacciona a esos cambios de forma orgánica.
El corazón de la reactividad: mutableStateOfPara que Compose sepa que tiene que redibujar una parte de la pantalla, no basta con usar una variable común de Kotlin. Necesitamos algo que el sistema pueda «vigilar». Aquí es donde entra mutableStateOf, que crea un contenedor observable. Cuando el valor dentro de este contenedor cambia, Compose marca todas las funciones que leyeron ese valor como «inválidas» y lanza la recomposición.
Hay varias formas de declarar estos estados para que el código quede más limpio. Podemos usar la sintaxis de delegados de propiedad mediante el operador ‘by’, que nos permite tratar el estado como si fuera una variable normal sin tener que escribir .value todo el rato. Para que esto funcione, no olvides importar getValue y setValue del paquete de runtime de Compose, porque a veces el IDE se hace el sueco y no los pone automáticamente.
La memoria de la composición: el papel de rememberUn error muy típico al empezar es declarar el estado dentro de un composable sin protegerlo. Como la recomposición es básicamente volver a ejecutar la función, las variables normales se reinician en cada ciclo. Si tienes un campo de texto, verás que no escribe nada porque la variable vuelve a quedar vacía milisegundos después de cada tecla pulsada.
Para solucionar esto usamos remember, que almacena el valor en la composición durante la ejecución inicial y lo recupera en las siguientes. Es como decirle a Compose: «Oye, guarda este dato y no lo tires aunque tengas que volver a dibujar el componente». Ahora bien, remember tiene un límite: si rotas el móvil o la actividad se destruye, el dato se pierde. Para esos casos, la solución es rememberSaveable, que guarda la información en un Bundle, permitiendo que el estado sobreviva a los cambios de configuración.
Si necesitas guardar objetos complejos que no entran directamente en un Bundle, tienes varias opciones. Puedes usar la anotación @Parcelize para hacer que tus data classes sean parcelables, o si prefieres más control, implementar un mapSaver o un listSaver para definir exactamente cómo se convierte el objeto en datos guardables y viceversa.
Elevación de Estado (State Hoisting) y ReutilizaciónCuando un componente gestiona su propio estado, decimos que es un componente con estado. Esto está bien para cosas muy simples, pero hace que el componente sea difícil de testear y menos flexible. La solución es el State Hoisting, que consiste en subir el estado a un componente padre. De esta forma, el componente hijo se vuelve «stateless» (sin estado) y solo se encarga de mostrar lo que le piden y notificar los cambios.
El patrón estándar es sustituir la variable de estado por dos parámetros: uno para el valor actual y una función lambda para los eventos (como onValueChange). Esto crea un flujo unidireccional de datos donde el estado baja y los eventos suben, lo que evita que tengamos múltiples fuentes de verdad y reduce drásticamente los errores de sincronización.
Gestión Avanzada: Effects, Flows y ViewModelsA medida que la app crece, meter toda la lógica en los composables es un suicidio. Lo ideal es delegar esto a contenedores de estado como los ViewModels. Compose se integra genial con LiveData y Flow. Por ejemplo, puedes usar collectAsStateWithLifecycle para recolectar flujos de forma eficiente, asegurando que la app no consuma batería ni recursos cuando la pantalla no es visible.
Para manejar efectos secundarios, Compose ofrece herramientas específicas. LaunchedEffect permite lanzar corrutinas que se cancelan solas cuando el componente sale de la pantalla, mientras que DisposableEffect es perfecto para tareas de limpieza. Si tienes un valor que depende de otros estados, derivedStateOf es tu mejor aliado, ya que evita que se realicen cálculos costosos en cada recomposición si las dependencias no han cambiado realmente.
Optimización y RendimientoNo todo es escribir código, también hay que optimizar. La estabilidad es la palabra clave aquí. El uso de tipos inmutables marcados con @Immutable ayuda al compilador de Compose a saber que un objeto no ha cambiado, permitiéndole saltarse la recomposición de ciertos componentes (skipping) y ganar velocidad.
Para listas largas, es imprescindible usar LazyColumn o LazyRow, que solo renderizan lo que es visible en el momento. Además, es recomendable leer el estado lo más abajo posible en el árbol de componentes para que, cuando algo cambie, solo se invalide la pequeña parte de la UI afectada y no toda la pantalla, evitando así tirones en la experiencia del usuario.
Toda esta arquitectura, desde el uso de remember para la memoria local hasta la implementación de MVVM con flujos unidireccionales, permite que el desarrollo de Android sea mucho más predecible. Al separar la lógica de negocio en ViewModels y mantener los componentes de interfaz puros y reactivos, logramos que las aplicaciones sean escalables, fáciles de mantener y, sobre todo, que ofrezcan una navegación fluida y sin errores de estado. Comparte esta información y más usuarios conocerán del tema.
