Frage

Alternative Titel (zu Hilfe Suche)

Kompression PNGs

Reduzieren Sie die Größe eines iPhone Archiv (.ipa)

Hinzufügen eines Build-Regel zu komprimieren Bilder in Xcode


iOS Apps können nur über 3G heruntergeladen werden, wenn sie kleiner sind als 100 MB. Was sind die besten Strategien, um die Größe einer App?

zur Reduzierung

Bereiche Ich mag würde konzentrieren, sind:

  • Bilder
  • Datenbanken
  • Code
  • Statische Bibliotheken

Hinweis: Die ursprüngliche Frage in den Revisionen dieser Frage betrachtet werden

War es hilfreich?

Lösung

PNG ist wirklich die beste Option für verlustfreie Bildkompression. Sie können Ihre PNGs für Größe mit PNGOUT , optimieren aber darf ich fragen, welche speziell Dateien viel Platz einnehmen ? Wie vergleicht es mit einer nicht-Debug-Version?

Edit: Wenn Sie eine kostenlose GUI-Version von PNGOUT möchten, werfen Sie einen Blick auf PNGGauntlet .

Andere Tipps

eine Xcode Build-Regel zu komprimieren PNGs Hinzufügen

Bilder in einem iOS-App können die meisten davon Größen bilden. Dies gilt insbesondere, wenn es sich um eine Universal-App erfordert es ist, alle Bild in dreifacher Ausführung zu haben (iPhone Standard iPhone Retina iPad).

Die beste Art von Bild zu Verwendung in einem iOS-App ist ein PNG . Wenn Ihr Designer diese Bilder in Photoshop erstellt werden sie mit einer Menge von Meta-Daten gespeichert, die verworfen werden können.

Allerdings wollen Sie nicht alle verlieren, dass die Daten vollständig, wie es Designer nützlich ist, wenn sie das Bild ändern müssen.

PNGOUT Optimierung

Es gibt verschiedene Tools für die Optimierung von PNG-Dateien, aber pngout scheint die beste Option zu sein.

  1. Laden Sie die Mac Version von PNGOUT .
  2. Kopieren Sie die Binär-Befehlszeilenanwendung pngout in ein Verzeichnis mit in Ihrem Projekt. , um die binären in das Projektverzeichnis Hinzufügen stellt sicher, ist für jeden zugänglich Bau des Projektes auf jedem System.

Erstellen einer Build-Regel (Xcode 4)

Build-Regeln sind Ziel spezifisch, so dass, wenn Sie mehr als ein Ziel, das Sie die Regel in jedem kopieren.

  1. Hinzufügen DEBUG und DISTRIBUTION Makros auf Ihren Buildkonfigurationen. , um die PNGs Optimierung ist ziemlich Prozessor intensiv und als solche Sie wollen nur, es zu tun auf den Vertrieb aufbaut. Pre-Prozessor-Makros  Wie Sie unter anderem sehen, kann ich hinzugefügt haben DEBUG_BUILD=1 und DISTRIBUTION_BUILD=1.

  2. Fügen Sie eine Build-Regel für PNG-Dateien. Eine Build-Regel verarbeitet einfach eine bestimmte Datei (und / oder) Dateityp während des Erstellungsprozesses. Die Kraft dieser ist Regeln miteinander verkettet werden können. Build-Regel - Xcode 4 http://tinypic.com/images/404.gif

  3. Klicken Sie auf die "Regel hinzufügen" klicken;

    • Set-Prozess „Quelldateien mit identischen Namen“ und sein Wert *.png.
    • Set verwenden zu "Custom Script"

Fügen Sie diesen Code in das Skript Feld

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"

Es gibt mehrere Umgebungsvariablen, die von Bedeutung sind:

  • ${INPUT_FILE_PATH} - Der vollständige Pfad zur Bilddatei
  • ${INPUT_FILE_NAME} - Bilddateinamen (mit Erweiterung)
  • ${DERIVED_FILES_DIR} - wo Xcode speichert Build-Dateien usw.
  • ${GCC_PREPROCESSOR_DEFINITIONS} - die Makros, die Sie oben gesetzt

Die Arbeit an dieser Linie erfolgt:

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

${PROJECT_DIR} ist der vollständige Pfad zu einem Projekt, die -y Überschreibungen Dateien bestehenden, -q Grenzen pngouts Ausgang und -force verhindert pngout aus mit dem Status von 2 Verlassen, wenn eine Datei nicht optimiert werden kann und verursacht Xcode Bericht Buildfehler.

Dieses Skript einfach testet die ${GCC_PREPROCESSOR_DEFINITIONS}, wenn es eine DISTRIBUTION_BUILD zu sehen, ob so es pngout verwendet die Datei zu optimieren, sonst ist es kopiert sie in die ${DERIVED_FILES_DIR} so Xcode weiter zu verarbeiten.

Schließlich , vergessen Sie nicht ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME} auf die „Output-Dateien“ -Liste hinzufügen dies ist, wie Xcode weiß, wie die Dateien finden Sie bearbeitet haben.

Ein Debug-Build wird in der Regel viel größer als ein Release-Build. Versuchen Sie im Release-Modus zu bauen.

Es gibt ein paar Compiler-Optionen, die auch helfen können. wenn auch nicht sicher, was Standard für iphone Freigabemodus. -Os wird für eine kleinere binäre optimieren. Es gibt auch eine Option für toten Code, dass Strippen werden jeden Code entfernen, die nie ausgeführt werden können. Auch könnten Sie versuchen, die binären Strippen .. nicht sicher, ob das funktioniert für iphone Binärdateien though.

Das setzt voraus, dass Ihr Problem zu ausführbare Binärdatei Größe zurückzuführen ist und nicht das Bild Ressourcen.

Ich benutzen ImageOptim und ImageAlpha für App-Größe zu reduzieren. Werfen Sie einen Blick auf diese Fallstudie für weitere Informationen. Tweetbot für iPad

@rjstelling hat eine wirklich schöne Antwort, und ich konnte nicht beginnen, es zu sagen, besser, aber es gibt ein kleines Problem mit ihm. Es wird nicht mit lokalisierten Bildern arbeiten. Dies ist nur ein Problem, wenn Sie Text in Bilder einbetten, das etwas, was ich nie tun sehr empfehlen, wenn Sie es vermeiden können. Wenn Sie jedoch haben lokalisierte Bilder zu verwenden, werden alle von rjstelling ‚s Schritte außer statt mit:

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

verwenden Sie den Code unten:

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

Beachten Sie die einzige Änderung in die Exportdatei Pfad ist. Sie haben INPUT_FILE_REGION_PATH_COMPONENT auf den Exportpfad vorangestellt wird richtig Lokalisierung von Bild zur Arbeit zu kommen. INPUT_FILE_REGION_PATH_COMPONENT ist normalerweise leer, es sei denn es Ordner für die jeweilige Datei lokalisiert ist. Wenn das der Fall, es bietet die Ordnernamen und einen Schrägstrich, so dass Sie nicht haben.

Sie müssen auch Ihre Output Files Einstellung ${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}, um diese an der Arbeit ändern.

Nicht sicher, ob ich der einzige bin, der jemals hatte das Problem, aber hoffentlich hilft es jemand.

Ich habe einen iOS-App von 90MB auf 50MB in den letzten monaten reduzieren. Hier sind einige Tipps und Tools:

iOS App Größe zum Profil

  1. unzip Ihre ipa Ressourcen wie Video, Schrift- und Bilddateien zu überprüfen.

  2. Profil Binärdatei von Bibliothek und Objektdateien (Klassen) mit LINKMAP Datei und XCode LINKMAP Parser .

Reduzieren von Bilddateien

Reduzieren Binärdatei

  • Streifen Debug-Symbole
  • Finden ungenutzt Einfuhren mit fui

Inspizieren eine .ipa Datei

  

Ändern Sie einfach die Erweiterung einer .ipa-Datei   .zip, dann öffnen Sie sie mit Finder sie entpacken. Rechtsklick auf die   entpackten .app-Bundle und wählen Sie „Paketinhalt zeigen“ das sehen   Ressourcen im Innern. Dies kann Ihnen eine Vorstellung davon, was das Beste ist, mit   Raum.

     

Sie können die komprimierte Größe der einzelnen Elemente in Ihrem .ipa untersuchen, indem   Öffnen der Klemme und den folgenden Befehl ausführen:

     

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

     

Die Größe Spalte hat die komprimierte Größe jeder Datei in Ihrem .ipa   Datei. Sie sollten diese Größe bewerten, wie Sie die Größe zu reduzieren, arbeiten   Ressourcen in Ihrer Anwendung. Sie können die Größe einer Ressource durch eine Menge reduzieren,   aber nach einer .ipa Datei produzieren, können Sie die komprimierte Größe entdecken   diese Ressource wird als nicht dramatisch verändert. Der effektivste   Technik für die Größe einer .ipa Datei zu reduzieren, ist zu entfernen   unnötig Ressourcen.

Um den ganzen Artikel zuzugreifen, finden Sie in der Link aus Apple Developer Webseite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top