代替タイトル (検索を支援するため)
PNG の圧縮
iPhone アーカイブ (.ipa) のサイズを縮小する
Xcode で画像を圧縮するビルド ルールを追加する
iOS アプリは、100MB 未満の場合、3G 経由でのみダウンロードできます。アプリのサイズを縮小するための最善の戦略は何ですか?
私が注目したい分野は次のとおりです。
- 画像
- データベース
- コード
- 静的ライブラリ
注意: 元の質問は、この質問のリビジョンで見ることができます
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
制限し、ファイルを最適化できず、Xcode レポートのビルド エラーが発生した場合にステータス 2 で終了することを防ぎます。pngout
-force
pngout
このスクリプトは単純に をテストして、ファイルを最適化するために使用するかどう${GCC_PREPROCESSOR_DEFINITIONS}
かを確認します。DISTRIBUTION_BUILD
pngout
${DERIVED_FILES_DIR}
最後に、「出力ファイル」リストに追加することを忘れないでください${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}
。これは、処理したファイルを見つける方法を Xcode が認識している方法です。
PNG は、ロスレス画像圧縮に最適なオプションです。PNGOUTを使用して PNG のサイズを最適化できますが、具体的にどのファイルが多くのスペースを占めているかお問い合わせしてもよろしいですか? 非デバッグ リリースと比較してどうですか?
編集: PNGOUT の無料の GUI バージョンが必要な場合は、PNGGauntletをご覧ください。
通常、デバッグ ビルドはリリース ビルドよりもはるかに大きくなります。リリースモードでビルドしてみてください。
役立つコンパイラ オプションもいくつかあります。ただし、iPhoneリリースモードのデフォルトが何であるかはわかりません。-Os は、より小さいバイナリ用に最適化します。実行できないコードを削除するデッド コード ストリッピングのオプションもあります。また、バイナリの削除を試みることもできますが、それが iphone バイナリで機能するかどうかはわかりません。
これは、問題の原因がイメージ リソースではなく、実行可能なバイナリ サイズにあると想定しています。
アプリのサイズを縮小するためにImageOptimとImageAlphaを使用しました。詳細については、このケーススタディをご覧ください。iPad用ツイートボット
@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}
。
私だけがその問題を抱えているかどうかはわかりませんが、誰かの助けになることを願っています.
ここ数か月で、iOS アプリのサイズを 90MB から 50MB に減らしました。いくつかのヒントとツールを次に示します。
iOS アプリのサイズをプロファイリングするには
ipa を解凍して、ビデオ、フォント、画像ファイルなどのリソースを確認します。
Linkmap ファイルとXCode Linkmap Parserを使用して、バイナリ ファイルをライブラリとオブジェクト ファイル (クラス) ごとにプロファイリングします。
画像ファイルを減らすには
バイナリファイルを減らすには
.ipa ファイルの検査
.ipa ファイルの拡張子を .zip に変更し、Finder で開いて解凍するだけです。解凍した .app バンドルを右クリックし、[パッケージの内容を表示] を選択して、内部のリソースを表示します。これにより、何が最も多くのスペースを使用しているかがわかります。
ターミナルを開いて次のコマンドを実行すると、.ipa 内の各項目の圧縮サイズを調べることができます。
unzip -lv /path/to/your/app.ipa
サイズ列には、.ipa ファイル内の各ファイルの圧縮サイズが表示されます。アプリ内のリソースのサイズを減らす作業を行うときは、このサイズを評価する必要があります。リソースのサイズを大幅に縮小することはできますが、.ipa ファイルを生成した後、そのリソースの圧縮サイズがそれほど劇的に変化していないことに気付く場合があります。.ipa ファイルのサイズを縮小する最も効果的な手法は、不要なリソースを削除することです。
記事全体にアクセスするには、Apple Developer Web サイトのリンクを参照してください。