Domanda

Titoli alternativi (per aiutare le ricerche)

PNG Compressione

Ridurre le dimensioni di un archivio iPhone (.ipa)

Aggiunta di una regola di accumulo per comprimere le immagini in Xcode


iOS Apps può essere scaricato solo tramite 3G se sono meno di 100 MB. Quali sono le migliori strategie per ridurre la dimensione di un App?

Aree mi piacerebbe mettere a fuoco sono:

NB: La domanda originale può essere vista nelle revisioni della presente domanda

È stato utile?

Soluzione

PNG è davvero la migliore opzione per la compressione delle immagini senza perdita di dati. È possibile ottimizzare i file PNG di dimensione utilizzando PNGOUT , ma posso chiedere quali file specificamente stanno prendendo molto spazio ? Come ci si confronta con un rilascio non-debug?

Edit: Se vuoi una GUI-versione gratuita di PNGOUT, dare un'occhiata a PNGGauntlet .

Altri suggerimenti

Aggiunta di una regola di Xcode Crea per comprimere PNG

Immagini in un App iOS possono fare la maggior parte delle dimensioni di esso. Ciò è particolarmente vero se si tratta di un App Universale imponendole di avere tutti image in triplice copia (iPhone standard, iPhone Retina iPad).

Il miglior tipo di immagine da utilizzare in un app iOS è un PNG . Quando il progettista ha creato queste immagini in Photoshop vengono salvati con un sacco di meta dati che possono essere scartato.

Tuttavia non si vuole perdere tutti i dati completamente, come è utile per i progettisti se hanno bisogno di alterare l'immagine.

PNGOUT ottimizzazione

Ci sono diversi strumenti per ottimizzare i file PNG, ma sembra pngout essere l'opzione migliore.

  1. Scarica la versione Mac di PNGOUT .
  2. Copia il file binario dell'applicazione pngout della riga di comando in una directory con nel progetto. Aggiunta del binario alla directory di progetto si assicura che si è disponibile a chiunque la costruzione del progetto su qualsiasi sistema.

Creazione di una regola di costruzione (Xcode 4)

Costruire regole sono target specifico, quindi se avete più di un bersaglio è necessario copiare la regola in ciascuna.

  1. Aggiungi DEBUG e distribuzione macro per le configurazioni di compilazione. Ottimizzazione del PNG è abbastanza intenso del processore e come tale si desidera solo farlo sulla distribuzione costruisce. macro pre-processore  Come si può vedere tra gli altri ho aggiunto DEBUG_BUILD=1 e DISTRIBUTION_BUILD=1.

  2. Aggiungi una regola di generazione per i file PNG. Una regola di accumulo elabora semplicemente un file specifico (e / o) tipo di file durante il processo di compilazione. La potenza di questo è le regole possono essere concatenati. costruire Regola - Xcode 4 http://tinypic.com/images/404.gif

  3. Fare clic sul pulsante "Aggiungi regola";

    • Imposta processo per "Sorgenti con nomi corrispondenti" e il suo valore di *.png.
    • Imposta tramite per "script personalizzato"

Incolla questo codice nella casella di script

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"

Ci sono diverse variabili di ambiente che sono di nota:

  • ${INPUT_FILE_PATH} - percorso completo del file di immagine
  • ${INPUT_FILE_NAME} - nome del file immagine (con estensione)
  • ${DERIVED_FILES_DIR} - dove i negozi Xcode costruire file etc
  • ${GCC_PREPROCESSOR_DEFINITIONS} - le macro si imposta sopra

Il lavoro è svolto su questa linea:

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

${PROJECT_DIR} è il percorso completo al progetto, il -y sovrascrive i file esistenti, limiti -q pngouts di uscita e -force impedisce pngout di uscire con lo status di 2 quando un file non può essere ottimizzato e causando rapporto Xcode costruire errori.

Questo script verifica semplicemente la ${GCC_PREPROCESSOR_DEFINITIONS} per vedere se un DISTRIBUTION_BUILD se in modo che utilizza pngout per ottimizzare il file, altrimenti lo copia al ${DERIVED_FILES_DIR} modo Xcode può continuare a elaborarlo.

Infine , non dimenticare di aggiungere ${DERIVED_FILES_DIR}/${INPUT_FILE_NAME} al "I file di output" lista questo è come Xcode sa come trovare i file che sono stati elaborati.

Una build di debug di solito è molto più grande di una build di rilascio. Provare a costruire nella modalità di rilascio.

Ci sono alcune opzioni del compilatore che possono aiutare anche. Non sono sicuro che cosa è l'impostazione predefinita per la modalità di rilascio iPhone però. -Os ottimizzerà per un binario più piccolo. C'è anche un'opzione per strippaggio codice morto che rimuoverà qualsiasi codice che non può mai essere eseguito. Inoltre si potrebbe provare a nudo il binario .. non so se questo funziona per i binari di iphone però.

Ciò presuppone che il problema è dovuto al eseguibile formato binario e non le risorse di immagine.

ImageOptim e ImageAlpha per la riduzione delle dimensioni app. Date un'occhiata a questo casestudy per ulteriori informazioni. Tweetbot per iPad

@rjstelling ha una risposta veramente bello, e non ho potuto cominciare a dire meglio, ma c'è un piccolo problema con esso. Non funzionerà con le immagini localizzate. Questo è solo un problema se si incorpora testo in immagini, che è qualcosa che mi raccomando non fare mai se si può evitare. Tuttavia, se si deve utilizzare le immagini localizzate, seguire tutti rjstelling passi 's tranne che invece di utilizzare:

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

utilizzare il codice qui sotto:

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

Si noti l'unico cambiamento è per il percorso del file di esportazione. Bisogna anteporre INPUT_FILE_REGION_PATH_COMPONENT al percorso di esportazione per ottenere la localizzazione di immagine per funzionare correttamente. INPUT_FILE_REGION_PATH_COMPONENT è vuoto normalmente meno che non v'è localizzato cartella per il file specifico. Stando così le cose, fornisce il nome della cartella e una barra finale, in modo da non dover.

È necessario modificare anche l'impostazione Output Files a ${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME} in modo che questo funzioni.

Non sono sicuro se io sono l'unico che ha mai avuto quel problema, ma si spera che aiuta qualcuno.

Ho ridurre un app iOS da 90 MB a 50 MB negli ultimi monthes. Ecco alcuni suggerimenti e strumenti:

Per Profilo iOS App Size

  1. decomprimere l'ipa per controllare le risorse come i file video, di font e immagini.

  2. Profilo il file binario biblioteca e file oggetto (classi) con file di Linkmap e XCode Linkmap Parser .

per ridurre file di immagini

per ridurre file binario

  • Striscia di simboli di debug
  • Trova le importazioni non utilizzati utilizzando fui

Controllo di un file .ipa

  

È sufficiente modificare l'estensione di un file .ipa a   .zip, quindi aprirlo con il Finder per decomprimerlo. Pulsante destro del mouse sul   decompresso .app fagotto e scegli "Mostra contenuto pacchetto" per vedere la   risorse all'interno. Questo può dare un'idea di ciò che sta utilizzando le più   spazio.

     

È possibile esaminare la dimensione compressa di ogni elemento nella vostra .ipa da   apertura terminale ed eseguendo il seguente comando:

     

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

     

La colonna dimensione ha la dimensione compressa di ogni file all'interno del vostro .ipa   file. Si dovrebbe valutare questa dimensione come si lavora per ridurre le dimensioni del   risorse nella vostra app. Si può ridurre la dimensione di una risorsa da un sacco,   ma dopo aver prodotto un file .ipa, si può scoprire la dimensione compressa   di tale risorsa non è cambiata in modo drammatico. Il più efficace   tecnica per ridurre la dimensione di un file .ipa è quello di rimuovere   risorse non necessarie.

Per accedere all'articolo completo, vedere la da apple Developer sito web.

scroll top