Wie die Größe meiner iPhone-Anwendung zu reduzieren?
-
21-09-2019 - |
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 ReduzierungBereiche Ich mag würde konzentrieren, sind:
- Bilder
- Datenbanken
- Code
- Statische Bibliotheken
Hinweis: Die ursprüngliche Frage in den Revisionen dieser Frage betrachtet werden
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.
- Laden Sie die Mac Version von PNGOUT .
- 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.
-
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. Wie Sie unter anderem sehen, kann ich hinzugefügt haben
DEBUG_BUILD=1
undDISTRIBUTION_BUILD=1
. -
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
-
Klicken Sie auf die "Regel hinzufügen" klicken;
- Set-Prozess „Quelldateien mit identischen Namen“ und sein Wert
*.png
. - Set verwenden zu "Custom Script"
- Set-Prozess „Quelldateien mit identischen Namen“ und sein Wert
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 pngout
s 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
-
unzip Ihre ipa Ressourcen wie Video, Schrift- und Bilddateien zu überprüfen.
-
Profil Binärdatei von Bibliothek und Objektdateien (Klassen) mit LINKMAP Datei und XCode LINKMAP Parser .
Reduzieren von Bilddateien
- verwenden ImageOptim-CLI automatischen Bildkomprimierungsprozess
- verwenden Ungenutzte-Bild nicht verwendete Bilddateien finden
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.