Jak zmniejszyć rozmiar mojej aplikacji na iPhone ' a?

alternatywne tytuły (pomoc w wyszukiwaniu)

Kompresowanie PNGs

Zmniejsz rozmiar archiwum iPhone ' a (.ipa)

Dodawanie reguły kompilacji do kompresji obrazów w Xcode


Aplikacje na IOS można pobrać tylko przez 3G, jeśli mają mniej niż 100 MB. Jakie są najlepsze strategie zmniejszania rozmiaru aplikacji?

Obszary, na których chciałbym się skupić to:

  • Images
  • bazy danych
  • Kod
  • Biblioteki Statyczne

NB: oryginalne pytanie można obejrzeć w wersji tego pytania

Author: Community, 2010-03-22

7 answers

PNG jest naprawdę najlepszą opcją dla bezstratnej kompresji obrazu. Możesz zoptymalizować swoje pliki png pod kątem rozmiaru używając PNGOUT, ale czy mogę zapytać, które pliki zajmują dużo miejsca? Jak to wygląda w porównaniu z wydaniem bez debugowania?

Edit: jeśli chcesz mieć darmową wersję GUI PNGOUT, spójrz na PNGGauntlet .

 6
Author: Paul Lammertsma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-22 09:05:01

Dodawanie reguły budowania Xcode do kompresji PNGs

Obrazy w aplikacji na iOS mogą stanowić większość jej rozmiaru. Jest to szczególnie ważne, jeśli jest to uniwersalna aplikacja wymagająca, aby cały obraz był w trzech egzemplarzach (standard iPhone, iPhone Retina iPad).

W aplikacji na iOS najlepszym typem obrazu jest PNG . Gdy projektant stworzył te obrazy w programie Photoshop, są one zapisywane z dużą ilością metadanych, które można wyrzucić.

Jakkolwiek nie chcesz stracić wszystkie te dane są całkowicie przydatne projektantom, jeśli chcą zmienić obraz.

Optymalizacja PNGOUT

Istnieje kilka narzędzi do optymalizacji plików PNG, ale pngout wydaje się być najlepszą opcją.

  1. Pobierz wersję pngout dla komputerów Mac.
  2. skopiuj binarną aplikację linii poleceń pngout do katalogu z in your project. dodanie pliku binarnego do katalogu projektu sprawia, że jest on dostępny dla każdego, kto buduje projekt na dowolnym systemie.

Tworzenie reguły budowania (Xcode 4)

Reguły budowania są specyficzne dla celu, więc jeśli masz więcej niż jeden cel, musisz skopiować regułę do każdego z nich.

  1. Dodaj makra debugowania i dystrybucji do konfiguracji kompilacji. Optymalizacja PNGs jest dość intensywna dla procesorów i jako taka chcesz to robić tylko na kompilacjach dystrybucyjnych. makra przed procesorem http://i52.tinypic.com/jtteg4.png Jak widać m.in. I dodali DEBUG_BUILD=1 i DISTRIBUTION_BUILD=1.

  2. Dodaj regułę budowania dla plików PNG. reguła budowania po prostu przetwarza określony typ pliku (i/lub) podczas procesu budowania. Moc reguł is może być połączona łańcuchami. reguła budowania-Xcode 4 http://i56.tinypic.com/ioovut.png

  3. Kliknij przycisk "Dodaj regułę";

    • Ustawia Proces na "pliki źródłowe z pasującymi nazwami" i jego wartość *.png.
    • Set Using to " Custom Skrypt "

Wklej ten kod do pola skryptu

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"

Istnieje kilka zmiennych środowiskowych, które są warte uwagi:

  • ${INPUT_FILE_PATH} - Pełna ścieżka do pliku obrazu
  • ${INPUT_FILE_NAME} - nazwa pliku obrazu (z rozszerzeniem)
  • ${DERIVED_FILES_DIR} - gdzie Xcode przechowuje pliki budowania itp
  • ${GCC_PREPROCESSOR_DEFINITIONS} - makra ustawione powyżej

Praca jest wykonywana na tej linii:

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

${PROJECT_DIR} jest pełną ścieżką do twojego projektu, the -y nadpisuje istniejące pliki, -q ogranicza wyjście pngout S I -force zapobiega wyjściu pngout ze statusem 2, gdy plik nie może być zoptymalizowany i powoduje błędy kompilacji Xcode.

Ten skrypt po prostu testuje ${GCC_PREPROCESSOR_DEFINITIONS}, aby sprawdzić, czy jest to DISTRIBUTION_BUILD jeśli tak, używa pngout do optymalizacji pliku, w przeciwnym razie kopiuje go do ${DERIVED_FILES_DIR}, aby Xcode mógł kontynuować jego przetwarzanie.

Na koniec , nie zapomnij dodać ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME} do listy "pliki wyjściowe". pliki, które zostały przetworzone.

 22
Author: rjstelling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-02 09:16:39

Debug build zazwyczaj jest znacznie większy niż release build. Spróbuj zbudować w trybie release.

Jest kilka opcji kompilatora, które również mogą pomóc. Nie jestem pewien, co jest domyślne dla trybu Wydania iphone ' a. - Os zoptymalizuje dla mniejszej binarnej. Istnieje również opcja usuwania martwego kodu, która usunie każdy kod, który nigdy nie może być uruchomiony. Możesz też spróbować rozebrać plik binarny .. nie jestem pewien, czy to działa w przypadku plików binarnych iphone ' a.

Zakładając, że twój problem jest ze względu na wykonywalny rozmiar binarny, a nie zasoby obrazu.

 4
Author: Michael Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-22 09:05:13

Użyłem ImageOptim i ImageAlpha do zmniejszenia rozmiaru aplikacji. Więcej informacji na ten temat można znaleźć w tej analizie. Tweetbot dla iPada

 3
Author: Amit Vaghela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-27 00:56:29

@rjstelling ma naprawdę ładną odpowiedź, i nie mogłem zacząć mówić tego lepiej, ale jest z tym jeden mały problem. Nie będzie działać z zlokalizowanymi obrazami. Jest to tylko problem, jeśli osadzasz tekst w obrazach, co jest czymś, czego zdecydowanie zalecam, aby nigdy nie robić, jeśli możesz tego uniknąć. Jednak, jeśli musisz użyć zlokalizowanych obrazów, wykonaj wszystkie kroki rjstelling za wyjątkiem zamiast używać:

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

Użyj poniższego kodu:

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

Uwaga jedyną zmianą jest wyeksportowanie ścieżki do pliku. Ty trzeba przygotować INPUT_FILE_REGION_PATH_COMPONENT do ścieżki eksportu, aby Lokalizacja obrazu działała poprawnie. INPUT_FILE_REGION_PATH_COMPONENT jest puste normalnie, chyba że istnieje lokalny folder dla określonego pliku. W tym przypadku zawiera nazwę folderu i końcowy ukośnik, więc nie musisz.

Aby to zadziałało, musisz również zmienić swoje ustawienie Output Files na ${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}. Nie wiem, czy tylko ja miałem ten problem, ale mam nadzieję, że to komuś pomoże.
 1
Author: btomw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-01 21:54:35

W ciągu ostatnich kilku miesięcy zmniejszyłem aplikację na iOS z 90MB do 50Mb. Oto kilka wskazówek i Narzędzi:

Aby profilować rozmiar aplikacji na iOS

  1. Rozpakuj ipa, aby sprawdzić zasoby, takie jak pliki wideo, czcionki i obrazy.

  2. Profiluj swój plik binarny według bibliotek i plików obiektowych (klas) za pomocą pliku Linkmap i parsera XCode Linkmap .

Aby Zmniejszyć Pliki Obrazów

Aby Zmniejszyć Plik Binarny

  • Strip debug symbols
  • Znajdź nieużywany import za pomocą fui
 0
Author: Jakehao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-25 08:46:57

Kontrola an .plik ipa

Wystarczy zmienić rozszerzenie an .plik ipa do .zip, a następnie otwórz go za pomocą Findera, aby go rozpakować. Kliknij prawym przyciskiem myszy na rozpięty .pakiet aplikacji i wybierz "Pokaż Zawartość pakietu", aby zobaczyć zasoby w środku. To może dać ci wyobrażenie o tym, co jest najbardziej przydatne miejsce.

Możesz sprawdzić skompresowany rozmiar każdego elementu w Twoim .ipa przez otwarcie terminala i wykonanie następującego polecenia:

Unzip-lv / ścieżka / do / Twojej / aplikacji.ipa

Kolumna rozmiar ma skompresowany rozmiar KAŻDEGO pliku w Twoim .ipa plik. Należy ocenić ten rozmiar podczas pracy, aby zmniejszyć rozmiar zasoby w Twojej aplikacji. Możesz znacznie zmniejszyć rozmiar zasobu, ale po wyprodukowaniu .plik ipa, możesz odkryć skompresowany rozmiar tego zasobu nie zmieniło się tak dramatycznie. Najskuteczniejszy technika zmniejszania rozmiaru an .plik ipa jest do usunięcia niepotrzebne zasoby.

Aby uzyskać dostęp do całego artykułu, zobacz link ze strony Apple Developer Website.

 0
Author: Murat Yasar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-16 06:59:34