Cómo redujimos el tamaño de la aplicación de Pinterest para iOS en más de un 30% / 50 MB

Por Liang Ma | Ingeniero de software, App Foundations (Desarrollo de aplicaciones)

Todos sabemos que el tamaño de las aplicaciones es importante (el tamaño de descarga[1] y el tamaño de instalación local[2]). Además, existe una correlación entre el tamaño de la aplicación y la interacción de los clientes. Con frecuencia, las personas toman decisiones sobre el uso de software en función del tamaño e incluso pagan el ancho de banda por megabyte. Sin olvidar que las tasas de desinstalación podrían aumentar cuando se incrementa el tamaño de la aplicación y, en consecuencia, los usuarios intentan liberar espacio en el disco de sus dispositivos.

Recientemente, hicimos una mejora en la aplicación de Pinterest para iOS v9.1, que redujo significativamente su tamaño:

Tabla 1: El iPhone 11 Pro es nuestro dispositivo objetivo.

Como consecuencia, estamos viendo un aumento en las instalaciones de aplicación (los usuarios descargan aplicaciones de la tienda de aplicaciones) de las nuevas versiones desde el lanzamiento.

Cuál es el problema

Para ponerte en contexto, en Pinterest usamos Bazel para nuestras compilaciones para iOS. Si no conoces Bazel, vale la pena leer este artículo.

Para crear nuestros archivos de localización, tenemos un trabajo de integración continua (CI) que escanea automáticamente todo el código fuente de la aplicación (a través de una consulta de Bazel) y lo envía a Mojito para su traducción. Esto funcionó bien hasta que agregamos varias extensiones.

Cada extensión es un módulo con su propio archivo BUILD. Después de que se implementó Bazel, el proceso copiaba las cadenas localizadas del paquete de la aplicación principal a cada paquete de extensiones. Sin embargo, esto generaba copias del archivo Localizable.strings en cada extensión, lo que aumentaba el tamaño global del paquete de la aplicación.

Así que decidimos eliminar las copias de localización de las extensiones.

Solución

Primero actualizamos el archivo BUILD para que las extensiones dejaran de copiar las cadenas localizadas del paquete de la aplicación principal.

Sin embargo, con este cambio NSLocalizedString no puede cargar correctamente la cadena localizada. Tras investigar más a fondo, supimos que ambas macros usan +[NSBundle mainBundle], pero +[NSBundle mainBundle] arroja el paquete que contiene el “ejecutable de la aplicación actual”, que es una subcarpeta de la aplicación cuando se llama desde una extensión. Por ejemplo: es `/path/to/Pinterest.app/PlugIns/SiriExtension.appex/` en lugar de `/path/to/Pinterest.app/`. Hicimos un cambio para establecer la ruta deseada a fin de que NSLocalizedStringWithDefaultValue pueda leer las cadenas localizadas del paquete de la aplicación principal.

El ahorro de espacio que generaron todos estos cambios — (tamaño de todos los archivos Localizable.strings) * (recuento de extensiones que tienen dichas localizaciones duplicadas) — representa alrededor del 30% del tamaño total de la aplicación.

Plan a largo plazo

A modo de seguimiento, planeamos colocar los recursos de localización en su respectiva extensión/SDK, en lugar de depender del paquete de la aplicación, lo que supone las siguientes ventajas:

● Cada paquete será autónomo, por lo que no requerirá el paquete de la aplicación principal para ejecutar o probar localizaciones, y podría incluirse en una aplicación independiente.

● NSLocalizedString y las API de localización trabajan normalmente en el código de la extensión.

● Podríamos hacer que los paquetes sean de código abierto.

También hay otras áreas que pueden mejorarse, como eliminar la localización innecesaria de código no orientado al consumidor, investigar formatos de imagen que sean más eficientes en tamaño y otras optimizaciones en el nivel del compilador. Mantente al tanto para enterarte de más novedades y visita nuestra página de empleo si te interesan las oportunidades de este tipo.

[1] El tamaño de descarga es el tamaño real transferido al descargar la aplicación desde la tienda de aplicaciones, que solo se mostrará si la aplicación supera el límite de 200 MB determinado por Apple y el usuario no está conectado a wifi, a menos que el usuario cambie la configuración predeterminada. Además, está comprimido, por lo que es menor que el tamaño de instalación habitual.

[2] El tamaño de instalación local es el tamaño real que ocupa la aplicación (Configuración->Almacenamiento de iPhone->Pinterest->Tamaño de la app) en el disco de tu teléfono. Se encuentra reducido para el modelo de tu teléfono, por lo que generalmente es menor que el tamaño universal.

Estamos construyendo el primer motor de descubrimiento visual del mundo. Más de 475 millones de personas de todo el mundo usan Pinterest para soñar, planear y preparar lo que quieren hacer en la vida. ¡Únete a nuestro equipo!


Cómo redujimos el tamaño de la aplicación de Pinterest para iOS en más de un 30% / 50 MB was originally published in Pinterest Engineering Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: Pinterest

Leave a Reply

Your email address will not be published.


*