代替タイトル(検索を支援するため)
iOSアプリは、100 MB未満の場合、3G経由でのみダウンロードできます。アプリのサイズを縮小するための最良の戦略は何ですか?
私が注目したい分野は次のとおりです。
NB:元の質問は、この質問の改訂で表示できます
PNGは、ロスレスイメージ圧縮に最適なオプションです。 [〜#〜] pngout [〜#〜] を使用すると、サイズに合わせてPNGを最適化できますが、どのファイルが特に多くのスペースを使用しているかを問い合わせることができますか?デバッグ以外のリリースと比較してどうですか?
編集:無料のGUIバージョンのPNGOUTが必要な場合は、 PNGGauntlet を参照してください。
IOSアプリの画像は、そのサイズの大部分を占める可能性があります。これは、すべての画像を3重にする必要があるユニバーサルアプリ(iPhone Standard、iPhone Retina iPad)の場合に特に当てはまります。
iOSアプリで使用するのに最適なタイプの画像はPNGです 。デザイナーがこれらの画像をPhotoshopで作成した場合、それらは破棄できる大量のメタデータと共に保存されます。
ただし、デザイナーが画像を変更する必要がある場合に役立つため、これらのデータを完全に失う必要はありません。
PNGファイルを最適化するためのツールはいくつかありますが、pngout
が最適なオプションのようです。
pngout
をプロジェクト内のディレクトリにコピーします。バイナリをプロジェクトディレクトリに追加すると、任意のシステムでプロジェクトを構築するすべての人が利用できます。ビルドルールはターゲット固有であるため、ターゲットが複数ある場合は、それぞれにルールをコピーする必要があります。
ビルド構成にDEBUGマクロとDISTRIBUTIONマクロを追加します。PNGの最適化は非常にプロセッサを集中的に使用するため、ディストリビューションビルドでのみ実行する必要があります。 ご覧のとおり、DEBUG_BUILD=1
とDISTRIBUTION_BUILD=1
を追加しました。
PNGファイルのビルドルールを追加します。ビルドルールは、ビルドプロセス中に特定のファイル(またはファイル)を処理するだけです。これの威力は、ルールを連鎖させることができることです。 ビルドルール-Xcode 4 http://tinypic.com/images/404.gif
「ルールの追加」ボタンをクリックします。
*.png
に設定します。このコードをスクリプトボックスに貼り付けます
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"
注目すべきいくつかの環境変数があります。
${INPUT_FILE_PATH}
—画像ファイルへのフルパス${INPUT_FILE_NAME}
—画像ファイル名(拡張子付き)${DERIVED_FILES_DIR}
— Xcodeがビルドファイルなどを格納する場所${GCC_PREPROCESSOR_DEFINITIONS}
—上で設定したマクロ作業は次の行で行われます。
"${PROJECT_DIR}/build-process/pngout" -y -q -force "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}"
${PROJECT_DIR}
はプロジェクトへの完全パスであり、-y
は既存のファイルを上書きし、-q
はpngout
s出力を制限し、-force
はpngout
を禁止しますファイルを最適化できない場合にステータス2で終了し、Xcodeレポートのビルドエラーが発生します。
このスクリプトは単に${GCC_PREPROCESSOR_DEFINITIONS}
をテストしてDISTRIBUTION_BUILD
かどうかを確認し、そうであればpngout
を使用してファイルを最適化します。それ以外の場合は${DERIVED_FILES_DIR}
にコピーしてXcodeが続行できるようにしますそれを処理します。
最後に、「出力ファイル」リストに${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}
を追加することを忘れないでください。これは、Xcodeがあなたが持っているファイルを見つける方法を知る方法です処理されました。
通常、デバッグビルドはリリースビルドよりはるかに大きくなります。リリースモードでビルドしてみてください。
役立ついくつかのコンパイラオプションもあります。しかし、iPhoneリリースモードのデフォルトが何なのかわかりません。 -Osは、より小さいバイナリ用に最適化します。また、実行できないコードを削除するデッドコードストリッピングのオプションもあります。また、バイナリを削除してみることもできますが、それがiphoneバイナリで機能するかどうかはわかりません。
これは、問題が実行可能バイナリサイズによるものであり、イメージリソースによるものではないことを前提としています。
アプリのサイズを縮小するために ImageOptim および ImageAlpha を使用しました。詳細については、このケーススタディをご覧ください。 iPad用のTweetbot
過去数か月でiOSアプリを90MBから50MBに減らしました。ここにいくつかのヒントとツールがあります:
iOSアプリのサイズをプロファイルするには
ipaを解凍して、ビデオ、フォント、画像ファイルなどのリソースを確認します。
Linkmapファイルと XCode Linkmap Parser を使用して、ライブラリとオブジェクトファイル(クラス)でバイナリファイルのプロファイルを作成します。
画像ファイルを削減するには
バイナリファイルを削減するには
@rjstellingには本当にいい答えがあり、私はそれをよりよく言うことができませんでしたが、それには1つの小さな問題があります。ローカライズされた画像では機能しません。これは画像にテキストを埋め込む場合にのみ問題になります。回避できる場合は絶対にしないことを強くお勧めします。ただし、ローカライズされた画像を使用する必要がある場合は、以下を使用する代わりに、rjstellingのすべての手順に従ってください。
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
以下のコードを使用してください:
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
唯一の変更点は、エクスポートファイルのパスです。画像のローカリゼーションを正しく機能させるには、エクスポートパスの前にINPUT_FILE_REGION_PATH_COMPONENT
を追加する必要があります。 INPUT_FILE_REGION_PATH_COMPONENT
は、特定のファイル用にローカライズされたフォルダーがない限り、通常は空です。その場合、フォルダー名と末尾のスラッシュが提供されるため、その必要はありません。
これを機能させるには、Output Files
設定を${DERIVED_FILES_DIR}/${INPUT_FILE_REGION_PATH_COMPONENT}${INPUT_FILE_NAME}
に変更する必要もあります。
私がその問題を経験した唯一の人かどうかはわかりませんが、うまくいけば誰かの役に立つでしょう。
。ipaファイルの検査
.ipaファイルの拡張子を.Zipに変更し、Finderで開いて解凍するだけです。解凍された.appバンドルを右クリックし、[パッケージの内容を表示]を選択して、内部のリソースを表示します。これにより、何が最もスペースを使用しているかがわかります。
ターミナルを開いて次のコマンドを実行すると、.ipa内の各アイテムの圧縮サイズを確認できます。
unzip -lv /path/to/your/app.ipa
Size列には、.ipaファイル内の各ファイルの圧縮サイズが含まれています。アプリのリソースのサイズを減らすために作業するときは、このサイズを評価する必要があります。リソースのサイズを大幅に減らすことができますが、.ipaファイルを作成した後、そのリソースの圧縮サイズがそれほど大きく変化していないことに気付く場合があります。 .ipaファイルのサイズを削減する最も効果的な方法は、不要なリソースを削除することです。
記事全体にアクセスするには、Apple開発者のWebサイトから link を参照してください。