Pregunta

Títulos alternativos (para ayudar en las búsquedas)

Comprimir archivos PNG

Reducir el tamaño de un archivo de iPhone (.ipa)

Agregar una regla de compilación para comprimir imágenes en Xcode


Las aplicaciones de iOS sólo se pueden descargar a través de 3G si tienen menos de 100 MB.¿Cuáles son las mejores estrategias para reducir el tamaño de una App?

Las áreas en las que me gustaría centrarme son:

  • Imágenes
  • Bases de datos
  • Código
  • Bibliotecas estáticas

NÓTESE BIEN: La pregunta original se puede ver en las revisiones de esta pregunta.

¿Fue útil?

Solución

PNG es realmente la mejor opción para la compresión de imágenes sin pérdida. Usted puede optimizar sus archivos PNG de tamaño utilizando PNGOUT , pero puede que preguntar específicamente qué archivos están llevando mucho espacio ? ¿Cómo se compara con un comunicado de no depuración?

Editar: Si desea una GUI-versión libre de PNGOUT, echar un vistazo a PNGGauntlet .

Otros consejos

Adición de una regla de Xcode Construir para comprimir PNG

Las imágenes en una aplicación para iOS pueden compensar la mayoría de tamaño de la misma. Esto es especialmente cierto si se trata de una aplicación universal según los cuales debe tener toda la imagen por triplicado (iPhone estándar, el iPhone Retina del iPad).

El mejor tipo de imagen para su uso en una aplicación para iOS es un PNG . Cuando el diseñador creó estas imágenes en Photoshop que se guardan con una gran cantidad de metadatos que puede ser descartada.

Sin embargo, usted no desea perder todos esos datos por completo, ya que es útil para los diseñadores si necesitan alterar la imagen.

PNGOUT optimización

Hay varias herramientas para la optimización de archivos PNG, pero pngout parece ser la mejor opción.

  1. descargar la versión para Mac de PNGOUT .
  2. Copia el pngout aplicación de línea de comandos binario a un directorio con su proyecto. Añadir el binario al directorio del proyecto se asegura de que se encuentra disponible a cualquier persona la construcción del proyecto en cualquier sistema.

Creación de una regla de construcción (Xcode 4)

Construir reglas son objetivo específico, por lo que si usted tiene más de un objetivo que debe copiar la regla en cada uno.

  1. Añadir DEBUG y distribución macros para sus configuraciones de construcción. Optimización del PNG es bastante procesador intensa y, como tal, sólo quiere hacerlo en construye distribución. macros pre-procesador  Como se puede ver, entre otros, he añadido DEBUG_BUILD=1 y DISTRIBUTION_BUILD=1.

  2. Añadir una regla de generación de archivos PNG. Una regla de construcción simplemente procesa un archivo específico (y / o) Tipo de archivo durante el proceso de construcción. El poder de este es reglas pueden ser encadenados juntos. Construir Regla - Xcode 4 http://tinypic.com/images/404.gif

  3. Haga clic en el botón "Añadir regla";

    • Establecer proceso para "Los archivos de origen con nombres que coinciden con" y su valor *.png.
    • Establecer usando a "Script"

Pega este código en el cuadro de secuencia de comandos

echo "----------------------------------------------------------------" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${INPUT_FILE_PATH}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
echo ${GCC_PREPROCESSOR_DEFINITIONS} >> "${DERIVED_FILES_DIR}/pngout-log.txt"

BUILD=`echo ${GCC_PREPROCESSOR_DEFINITIONS} | grep -o DISTRIBUTION_BUILD`

echo $BUILD >> "${DERIVED_FILES_DIR}/pngout-log.txt"

if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi

echo "...done." >> "${DERIVED_FILES_DIR}/pngout-log.txt"

Hay varias variables de entorno que son muy estimados:

  • ${INPUT_FILE_PATH} - ruta completa al archivo de imagen
  • ${INPUT_FILE_NAME} - nombre de archivo de imagen (con extensión)
  • ${DERIVED_FILES_DIR} - donde las tiendas de Xcode construir archivos, etc.
  • ${GCC_PREPROCESSOR_DEFINITIONS} - las macros que ha ajustado anteriormente

El trabajo se realiza en esta línea:

    "${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"

${PROJECT_DIR} es la ruta completa a su proyecto, el -y sobrescribe los archivos existentes, límites -q pngouts de salida y evita -force pngout salga con el estado de 2 cuando un archivo no puede ser optimizado y causando informe Xcode errores de compilación.

Este script simplemente pone a prueba la ${GCC_PREPROCESSOR_DEFINITIONS} para ver si es un DISTRIBUTION_BUILD si lo que utiliza pngout para optimizar el archivo, de lo contrario lo copia en el modo ${DERIVED_FILES_DIR} Xcode puede continuar para procesarla.

último , no se olvide de añadir ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME} a la lista de "Los archivos de salida" así es como Xcode sabe cómo encontrar los archivos que se han procesado.

Una versión de depuración por lo general será mucho más grande que una versión de lanzamiento. Intenta construir en modo de lanzamiento.

Hay algunas opciones del compilador que pueden ayudar también. No está seguro de cuál es el modo por defecto para la liberación iPhone sin embargo. -Os optimizará para un binario más pequeño. Hay también una opción para extracción de código muerto que eliminará cualquier código que no se puede ejecutar. También puede intentar separar el binario .. no está seguro de si eso funciona para binarios iphone sin embargo.

Esto es suponiendo que su problema se debe a ejecutable binario tamaño y no los recursos de imagen.

utilicé ImageOptim y ImageAlpha para reducir el tamaño de la aplicación. Echar un vistazo a este casestudy para más información. Tweetbot para iPad

@rjstelling tiene una respuesta muy agradable, y yo no podría empezar a decir mejor, pero hay un pequeño problema con él. No funcionará con imágenes localizadas. Esto sólo es un problema si incrusta texto en imágenes, que es algo que recomiendo no hacer nunca si puede evitarlo. Sin embargo, si usted tiene que utilizar imágenes localizadas, seguir todos los pasos rjstelling 's, excepto en lugar de utilizar:

if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
fi

usar el siguiente código:

if [ "${BUILD}" == "DISTRIBUTION_BUILD" ]; then
echo "COMPRESS" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
else
echo "COPY" >> "${DERIVED_FILES_DIR}/pngout-log.txt"
cp -f "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}"
fi

Tenga en cuenta que el único cambio es la ruta del archivo de exportación. Usted tiene que anteponer INPUT_FILE_REGION_PATH_COMPONENT a la ruta de exportación para obtener la localización de la imagen para que funcione correctamente. INPUT_FILE_REGION_PATH_COMPONENT está vacía normalmente a menos que se localiza la carpeta del archivo específico. Siendo ese el caso, se proporciona el nombre de la carpeta y una barra al final, por lo que no tiene que hacerlo.

También debe cambiar la configuración de Output Files a ${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME} para que esto funcione.

No está seguro de si soy el único que ha tenido ese problema, pero es de esperar que ayude a alguien.

Tengo reducir una aplicación para iOS de 90 MB a 50 MB en los últimos meses. Estos son algunos consejos y herramientas:

Para Perfil iOS App Tamaño

  1. descomprimir su IPA para comprobar los recursos como archivos de vídeo, tipo de letra y las imágenes.

  2. perfil de su archivo binario de biblioteca y archivos de objetos (clases) usando el archivo Linkmap y XCode Linkmap Analizador .

Para Reducir archivos de imagen

Para Reducir el archivo binario

  • Tira de símbolos de depuración
  • Encuentra las importaciones que no utiliza mediante fui

Inspección de un archivo .ipa

  

Simplemente cambiar la extensión de un archivo a .ipa   .zip, a continuación, abrirlo con el Finder para descomprimirlo. Haga clic en el   descomprimido paquete .app y seleccione "Mostrar contenido del paquete" para ver la   recursos en el interior. Esto le puede dar una idea de lo que está utilizando la mayor parte   espacio.

     

Puede examinar el tamaño comprimido de cada elemento en su .ipa por   la apertura de la terminal y ejecutar el siguiente comando:

     

descomprimir -lv /path/to/your/app.ipa

     

La columna de tamaño tiene el tamaño comprimido de cada archivo dentro de su .ipa   archivo. Debe evaluar este tamaño a medida que trabaja para reducir el tamaño de   recursos en su aplicación. Es posible reducir el tamaño de un recurso por una gran cantidad,   pero después de producir un archivo .ipa, puede descubrir el tamaño comprimido   de ese recurso no ha cambiado tan dramáticamente. El mas efectivo   técnica para reducir el tamaño de un archivo .ipa es eliminar   recursos innecesarios.

Para acceder al artículo completo, consulte la href="https://developer.apple.com/library/content/qa/qa1795/_index.html" enlace de rel="nofollow"> manzana sitio web del desarrollador.

scroll top