sizeledger
Zeigt, woher jedes Megabyte einer iOS-App kommt: nach Kategorie, Framework, Asset Catalog, Sprache und Architektur.
Lizenz: MIT
Tests: 159Gemessen:
Wie gemessen wurde
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
Zusammenfassung
- sizeledger liest eine .ipa, .app oder .xcarchive und zeigt ihre Bytes nach Kategorie, Framework, Sprache und CPU-Architektur.
- Es liest nur Dateien: Es baut die App nie, startet sie nicht, lädt sie nicht hoch und ändert sie nicht, und liefert auf macOS und Linux denselben Bericht.
- Es hält drei Größen getrennt: die aufsummierten Dateien, eine Installationsschätzung in 4-KiB-Blöcken und die komprimierte Größe innerhalb einer .ipa.
- Der ZIP-Reader, der DEFLATE-Decoder und der Mach-O-Parser sind in Swift geschrieben, daher hat die SizeLedgerKit-Bibliothek keine Abhängigkeiten.
- Es liefert nicht die Download-Größe des App Store, und die Befehle diff und budget sind ab 0.1.10 geplant, aber noch nicht ausgeliefert.
Richten Sie sizeledger auf eine .ipa, eine .app oder ein .xcarchive, und es zeigt, wo sich die Bytes der App befinden: nach Kategorie, nach Framework und Ressource, nach Sprache und nach CPU-Architektur. Es hält drei Größen getrennt (die aufsummierten Dateien, eine Installationsgrößenschätzung in ganzen 4-KiB-Blöcken und, für eine .ipa, die komprimierte Größe) und erhebt nicht den Anspruch, die Download-Größe des App Store zu kennen. Es liest nur die Dateien, mit eigenen ZIP-, DEFLATE- und Mach-O-Readern; es baut also nichts, startet nichts, lädt nichts hoch und ändert nichts, und funktioniert auf macOS und Linux gleich. SizeLedgerKit liefert denselben Bericht an Swift-Programme.
Funktionen
- Eine Tabelle für die ganze App: ausführbare Hauptdatei, Frameworks und Dylibs, App Extensions, App Clips, Watch-App, Lokalisierungen, Asset Catalogs, Code-Signatur und alles Übrige; die Kategorien ergeben immer die Gesamtsumme
- Jedes Framework und jede Extension in eigener Zeile, und jede .lproj-Sprache über die App und ihre Frameworks hinweg summiert
- Architektur-Slices jeder Binary: welche Binaries universal sind und wie viel jedes Slice einnimmt, mit Segmentgrößen und Swift-Metadaten im JSON
- Drei getrennt gehaltene Größen: die aufsummierten Dateien, eine Installationsgrößenschätzung in ganzen 4-KiB-Blöcken und, für eine .ipa, die komprimierte Größe
- Eine Terminal-Tabelle, Markdown für einen Pull Request oder eine Job Summary und ein JSON-Bericht mit stabiler Schlüsselreihenfolge
- Eingaben werden als nicht vertrauenswürdig behandelt: Grenzen für Dateien, Tiefe, deklarierte Bytes und Kompressionsverhältnis, sowie im Output ersetzte Terminal-Escapes, bidirektionale Overrides und unsichtbare Zeichen
- SizeLedgerKit, eine Swift-Bibliothek mit DocC-Dokumentation und ohne Abhängigkeiten: der ZIP-Reader, der DEFLATE-Decoder und der Mach-O-Parser sind Teil davon
Schnellstart
1sizeledger analyze path/to/MyApp.ipaInstallation
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")Screenshots

Zeitleiste
Repository eröffnet und 0.1.0 veröffentlicht: sizeledger analyze und die SizeLedgerKit-Bibliothek, mit eigenen ZIP-, DEFLATE- und Mach-O-Readern
0.1.1 bis 0.1.5: README in neun Sprachen, begrenzte Mach-O-Header-Lesevorgänge, symbolische Links in einem .xcarchive abgelehnt, und Grenzen für präparierte Eingaben (--max-files, --max-bytes, --max-ratio, --max-depth)
0.1.6 bis 0.1.8: Sanitize.text öffentlich gemacht, mehr unsichtbare Zeichen im Output ersetzt, und Pfade anhand ihrer Bytes aufgeteilt und verglichen
0.1.9 und 0.1.10: überlappende .ipa-Einträge als beschädigt abgelehnt, --out schreibt nicht mehr über Links zu Dateien, und das neue --force-Flag