sizeledger
iOS アプリの各メガバイトがどこから来ているかを、カテゴリ、フレームワーク、アセットカタログ、言語、アーキテクチャ別に示します。
ライセンス: MIT
テスト: 159計測日:
計測方法
swift test in a fresh clone at tag v0.1.10 on a Mac (Apple silicon, Apple M5 Max, macOS 27.0.1), Swift 6.4: 159 tests (134 SizeLedgerKit, 25 CLI), 158 passed and 1 skipped because it needs a non-UTF-8 file name and runs on Linux only
要約
- sizeledger は .ipa、.app、.xcarchive を読み取り、カテゴリ、フレームワーク、言語、CPU アーキテクチャ別にバイトを示します。
- ファイルを読み取るだけで、アプリをビルド・実行・アップロード・変更することはなく、macOS と Linux で同じレポートを返します。
- 3つのサイズを区別します: ファイルの合計、4 KiB ブロック単位のインストール推定値、.ipa 内の圧縮後サイズです。
- ZIP リーダー、DEFLATE デコーダー、Mach-O パーサーは Swift で書かれており、SizeLedgerKit ライブラリに依存関係はありません。
- App Store のダウンロードサイズは示さず、diff と budget コマンドは0.1.10時点では計画中で未リリースです。
sizeledger に .ipa、.app、または .xcarchive を指定すると、アプリのバイトがどこにあるかを示します — カテゴリ別、フレームワークとリソース別、言語別、CPU アーキテクチャ別です。3つのサイズを区別して保持します(ファイルの合計、4 KiB ブロック単位でのインストールサイズの推定値、.ipa の場合は圧縮後のサイズ)。App Store のダウンロードサイズを知っているとは主張しません。独自の ZIP、DEFLATE、Mach-O リーダーでファイルを読み取るだけなので、ビルドも実行もアップロードも変更も行わず、macOS と Linux で同じように動作します。SizeLedgerKit は Swift のプログラムに同じレポートを提供します。
機能
- アプリ全体をひとつの表にまとめます: メイン実行ファイル、フレームワークと dylib、app extension、App Clip、watch アプリ、ローカリゼーション、アセットカタログ、コード署名、その他すべて。カテゴリの合計は常に総計と一致します
- すべてのフレームワークと extension を1行ずつ表示し、すべての .lproj 言語をアプリとそのフレームワーク全体で合計します
- すべてのバイナリのアーキテクチャスライス: どのバイナリが universal か、各スライスがどれだけの容量を占めるか。JSON にはセグメントサイズと Swift のメタデータも含まれます
- 3つのサイズを区別して保持します: ファイルの合計、4 KiB ブロック単位でのインストールサイズの推定値、.ipa の場合は圧縮後のサイズ
- ターミナルの表、pull request やジョブサマリー用の Markdown、キーの順序が安定した JSON レポート
- 入力を信頼できないものとして扱います: ファイル数、深さ、宣言されたバイト数、圧縮率に上限を設け、出力ではターミナルエスケープ、双方向オーバーライド、不可視文字を置き換えます
- SizeLedgerKit は DocC ドキュメント付きで依存関係のない Swift ライブラリです: ZIP リーダー、DEFLATE デコーダー、Mach-O パーサーはその一部です
クイックスタート
1sizeledger analyze path/to/MyApp.ipaインストール
Homebrew (macOS, Linux)
1brew install muhittincamdali/tap/sizeledgerFrom source
1git clone https://github.com/muhittincamdali/sizeledger.git && cd sizeledger && swift build -c releaseSwift package (product SizeLedgerKit)
1.package(url: "https://github.com/muhittincamdali/sizeledger", from: "0.1.10")スクリーンショット

タイムライン
リポジトリが公開され、0.1.0 がリリースされました: sizeledger analyze と、独自の ZIP、DEFLATE、Mach-O リーダーを持つ SizeLedgerKit ライブラリです
0.1.1 から 0.1.5: 9言語の README、範囲を限定した Mach-O ヘッダー読み取り、.xcarchive 内のシンボリックリンクの拒否、細工された入力に対する上限(--max-files、--max-bytes、--max-ratio、--max-depth)
0.1.6 から 0.1.8: Sanitize.text が public になり、出力でより多くの不可視文字が置き換えられ、パスはバイト単位で分割・比較されるようになりました
0.1.9 と 0.1.10: 重複する .ipa エントリは破損として拒否され、--out はファイルへのリンクを経由して書き込まなくなり、新しい --force フラグが追加されました