31

代替タイトル (検索を支援するため)

PNG の圧縮

iPhone アーカイブ (.ipa) のサイズを縮小する

Xcode で画像を圧縮するビルド ルールを追加する


iOS アプリは、100MB 未満の場合、3G 経由でのみダウンロードできます。アプリのサイズを縮小するための最善の戦略は何ですか?

私が注目したい分野は次のとおりです。

  • 画像
  • データベース
  • コード
  • 静的ライブラリ

注意: 元の質問は、この質問のリビジョンで見ることができます

4

7 に答える 7

23

PNG を圧縮するための Xcode ビルド規則の追加

iOS アプリの画像は、そのサイズの大部分を占めることがあります。これは、すべての画像を 3 通にする必要があるユニバーサル アプリ (iPhone Standard、iPhone Retina iPad) の場合に特に当てはまります。

iOS アプリで使用するのに最適な画像の種類は PNGです。デザイナーが Photoshop でこれらの画像を作成すると、破棄できる多くのメタデータとともに保存されます。

ただし、デザイナーが画像を変更する必要がある場合に役立つため、そのすべてのデータを完全に失いたくはありません。

PNGOUT 最適化

PNG ファイルを最適化するためのツールはいくつかありますがpngout、最適なオプションのようです。

  1. pngout の Mac バージョンをダウンロードします。
  2. バイナリ コマンド ライン アプリケーションpngoutをプロジェクト内のディレクトリにコピーします。バイナリをプロジェクト ディレクトリに追加すると、任意のシステムでプロジェクトを構築するすべての人が利用できるようになります。

ビルド ルールの作成 (Xcode 4)

ビルド ルールはターゲット固有であるため、複数のターゲットがある場合は、それぞれにルールをコピーする必要があります。

  1. ビルド構成に DEBUG および DISTRIBUTION マクロを追加します。PNG を最適化することはプロセッサに負荷がかかるため、ディストリビューション ビルドでのみ実行する必要があります。プリプロセッサ マクロ ご覧のとおり、 と を追加DEBUG_BUILD=1しましDISTRIBUTION_BUILD=1た。

  2. PNG ファイルのビルド ルールを追加します。ビルド ルールは、ビルド プロセス中に特定のファイル (および/または) ファイル タイプを処理するだけです。これの威力は、ルールを連鎖できることです。ビルド ルール - Xcode 4 http://tinypic.com/images/404.gif

  3. [ルールの追加] ボタンをクリックします。

    • Process を「名前が一致するソース ファイル」とその値に設定します*.png
    • Using を「Custom 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"

注目すべきいくつかの環境変数があります。

  • ${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-forcepngout

このスクリプトは単純に をテストして、ファイルを最適化するために使用するかどう${GCC_PREPROCESSOR_DEFINITIONS}かを確認します。DISTRIBUTION_BUILDpngout${DERIVED_FILES_DIR}

最後に、「出力ファイル」リストに追加することを忘れないでください${DERIVED_FILES_DIR}/${INPUT_FILE_NAME}。これは、処理したファイルを見つける方法を Xcode が認識している方法です。

于 2011-08-02T09:16:39.423 に答える
6

PNG は、ロスレス画像圧縮に最適なオプションです。PNGOUTを使用して PNG のサイズを最適化できますが、具体的にどのファイルが多くのスペースを占めているかお問い合わせしてもよろしいですか? 非デバッグ リリースと比較してどうですか?

編集: PNGOUT の無料の GUI バージョンが必要な場合は、PNGGauntletをご覧ください。

于 2010-03-22T09:05:01.420 に答える
4

通常、デバッグ ビルドはリリース ビルドよりもはるかに大きくなります。リリースモードでビルドしてみてください。

役立つコンパイラ オプションもいくつかあります。ただし、iPhoneリリースモードのデフォルトが何であるかはわかりません。-Os は、より小さいバイナリ用に最適化します。実行できないコードを削除するデッド コード ストリッピングのオプションもあります。また、バイナリの削除を試みることもできますが、それが iphone バイナリで機能するかどうかはわかりません。

これは、問題の原因がイメージ リソースではなく、実行可能なバイナリ サイズにあると想定しています。

于 2010-03-22T09:05:13.733 に答える
3

アプリのサイズを縮小するためにImageOptimImageAlphaを使用しました。詳細については、このケーススタディをご覧ください。iPad用ツイートボット

于 2013-02-27T00:56:29.240 に答える
1

@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}

私だけがその問題を抱えているかどうかはわかりませんが、誰かの助けになることを願っています.

于 2012-10-01T21:54:35.393 に答える
1

ここ数か月で、iOS アプリのサイズを 90MB から 50MB に減らしました。いくつかのヒントとツールを次に示します。

iOS アプリのサイズをプロファイリングするには

  1. ipa を解凍して、ビデオ、フォント、画像ファイルなどのリソースを確認します。

  2. Linkmap ファイルとXCode Linkmap Parserを使用して、バイナリ ファイルをライブラリとオブジェクト ファイル (クラス) ごとにプロファイリングします。

画像ファイルを減らすには

  • ImageOptim-CLIを使用して画像圧縮プロセスを自動化する
  • Unused-imageを使用して、未使用の画像ファイルを見つけます

バイナリファイルを減らすには

  • デバッグ シンボルを取り除く
  • fuiを使用して未使用のインポートを見つける
于 2016-03-25T08:46:57.447 に答える
0

.ipa ファイルの検査

.ipa ファイルの拡張子を .zip に変更し、Finder で開いて解凍するだけです。解凍した .app バンドルを右クリックし、[パッケージの内容を表示] を選択して、内部のリソースを表示します。これにより、何が最も多くのスペースを使用しているかがわかります。

ターミナルを開いて次のコマンドを実行すると、.ipa 内の各項目の圧縮サイズを調べることができます。

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

サイズ列には、.ipa ファイル内の各ファイルの圧縮サイズが表示されます。アプリ内のリソースのサイズを減らす作業を行うときは、このサイズを評価する必要があります。リソースのサイズを大幅に縮小することはできますが、.ipa ファイルを生成した後、そのリソースの圧縮サイズがそれほど劇的に変化していないことに気付く場合があります。.ipa ファイルのサイズを縮小する最も効果的な手法は、不要なリソースを削除することです。

記事全体にアクセスするには、Apple Developer Web サイトのリンクを参照してください。

于 2016-09-16T06:59:34.820 に答える