Come ridurre la dimensione della mia applicazione iPhone?
-
21-09-2019 - |
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:
- Immagini
- Database
- Codice
- Static Biblioteche
NB: La domanda originale può essere vista nelle revisioni della presente domanda
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.
- Scarica la versione Mac di PNGOUT .
- 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.
-
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. Come si può vedere tra gli altri ho aggiunto
DEBUG_BUILD=1
eDISTRIBUTION_BUILD=1
. -
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
-
Fare clic sul pulsante "Aggiungi regola";
- Imposta processo per "Sorgenti con nomi corrispondenti" e il suo valore di
*.png
. - Imposta tramite per "script personalizzato"
- Imposta processo per "Sorgenti con nomi corrispondenti" e il suo valore di
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
pngout
s 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
-
decomprimere l'ipa per controllare le risorse come i file video, di font e immagini.
-
Profilo il file binario biblioteca e file oggetto (classi) con file di Linkmap e XCode Linkmap Parser .
per ridurre file di immagini
- ImageOptim-CLI per il processo automatico immagine comprimere
- inutilizzato-immagine per trovare i file di immagine inutilizzati
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.