Tous les paquets open source
OutillageSwift

sizeledger

Montre d'où vient chaque mégaoctet d'une app iOS : par catégorie, framework, asset catalog, langue et architecture.

1ÉtoilesDernière version: v0.1.10 · Mis à jour: 21 octobre 2026
Plateformes:macOS 13+Linux (x86_64, arm64)

Licence: MIT

Tests: 159Mesuré le:

Méthode de mesure

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

Résumé

  • sizeledger lit un .ipa, .app ou .xcarchive et montre ses octets par catégorie, framework, langue et architecture CPU.
  • Il ne lit que des fichiers : il ne compile, ne lance, ne téléverse ni ne modifie jamais l'app, et donne le même rapport sur macOS et Linux.
  • Il garde trois tailles séparées : les fichiers additionnés, une estimation d'installation en blocs de 4 Kio et la taille compressée dans un .ipa.
  • Le lecteur ZIP, le décodeur DEFLATE et le parseur Mach-O sont écrits en Swift, donc la bibliothèque SizeLedgerKit n'a aucune dépendance.
  • Il ne donne pas la taille de téléchargement de l'App Store, et les commandes diff et budget sont prévues, pas livrées, à partir de 0.1.10.

Pointez sizeledger vers un .ipa, une .app ou un .xcarchive, et il montre où se trouvent les octets de l'app : par catégorie, par framework et ressource, par langue et par architecture CPU. Il garde trois tailles distinctes (les fichiers additionnés, une estimation de la taille d'installation en blocs entiers de 4 Kio et, pour un .ipa, la taille compressée) et ne prétend pas connaître la taille de téléchargement de l'App Store. Il ne lit que les fichiers, avec ses propres lecteurs ZIP, DEFLATE et Mach-O, donc il ne compile, ne lance, ne téléverse ni ne modifie rien, et fonctionne de la même façon sur macOS et Linux. SizeLedgerKit fournit le même rapport aux programmes Swift.

Fonctionnalités

  • Un seul tableau pour toute l'app : exécutable principal, frameworks et dylibs, app extensions, App Clips, app watch, localisations, asset catalogs, signature de code et tout le reste ; la somme des catégories donne toujours le total
  • Chaque framework et extension sur sa propre ligne, et chaque langue .lproj additionnée sur l'app et ses frameworks
  • Slices d'architecture de chaque binary : quels binaries sont universal et combien pèse chaque slice, avec les tailles de segment et les métadonnées Swift dans le JSON
  • Trois tailles gardées séparées : les fichiers additionnés, une estimation de la taille d'installation en blocs entiers de 4 Kio et, pour un .ipa, la taille compressée
  • Un tableau en terminal, du Markdown pour une pull request ou un job summary, et un rapport JSON avec un ordre de clés stable
  • L'entrée est traitée comme non fiable : limites sur les fichiers, la profondeur, les octets déclarés et le ratio de compression, et les échappements de terminal, les overrides bidirectionnels et les caractères invisibles remplacés dans la sortie
  • SizeLedgerKit, une bibliothèque Swift avec documentation DocC et sans dépendances : le lecteur ZIP, le décodeur DEFLATE et le parseur Mach-O en font partie

Démarrage rapide

sh
1sizeledger analyze path/to/MyApp.ipa

Installation

Homebrew (macOS, Linux)

sh
1brew install muhittincamdali/tap/sizeledger

From source

sh
1git clone https://github.com/muhittincamdali/sizeledger.git && cd sizeledger && swift build -c release

Swift package (product SizeLedgerKit)

swift
1.package(url: "https://github.com/muhittincamdali/sizeledger", from: "0.1.10")

Captures d'écran

sizeledger analyze sur SampleShop 2.0 : 8,75 Mo en 21 fichiers, estimation d'installation de 8,80 Mo, 2,72 Mo compressés ; catalog.json représente 70,8 % de l'app, Assets.car 18,1 % ; sept langues ; trois binaries universal
SampleShop 2.0, l'app fixture mesurée par les tests, s'exécutant dans l'iOS 27 Simulator

Chronologie

  1. Dépôt ouvert et 0.1.0 publiée : sizeledger analyze et la bibliothèque SizeLedgerKit, avec ses propres lecteurs ZIP, DEFLATE et Mach-O

  2. 0.1.1 à 0.1.5 : README en neuf langues, lectures d'en-tête Mach-O bornées, liens symboliques refusés dans un .xcarchive, et limites pour les entrées forgées (--max-files, --max-bytes, --max-ratio, --max-depth)

  3. 0.1.6 à 0.1.8 : Sanitize.text rendu public, davantage de caractères invisibles remplacés dans la sortie, et les chemins découpés et comparés sur leurs octets

  4. 0.1.9 et 0.1.10 : les entrées .ipa qui se superposent sont refusées comme endommagées, --out n'écrit plus à travers des liens vers des fichiers, et le nouveau flag --force

Liens

Article associé

Lire l'article