Todos los paquetes de código abierto
HerramientasSwift

sizeledger

Muestra de dónde viene cada megabyte de una app de iOS: por categoría, framework, asset catalog, idioma y arquitectura.

1EstrellasÚltima versión: v0.1.10 · Actualizado: 21 de octubre de 2026
Plataformas:macOS 13+Linux (x86_64, arm64)

Licencia: MIT

Pruebas: 159Medido:

Cómo se midió

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

Resumen

  • sizeledger lee un .ipa, .app o .xcarchive y muestra sus bytes por categoría, framework, idioma y arquitectura de CPU.
  • Solo lee archivos: nunca compila, ejecuta, sube ni cambia la app, y da el mismo informe en macOS y Linux.
  • Mantiene tres tamaños aparte: los archivos sumados, una estimación de instalación en bloques de 4 KiB y el tamaño comprimido dentro de un .ipa.
  • El lector de ZIP, el decodificador DEFLATE y el parser de Mach-O están escritos en Swift, así que la biblioteca SizeLedgerKit no tiene dependencias.
  • No da el tamaño de descarga de la App Store, y los comandos diff y budget están planeados, no publicados, a partir de 0.1.10.

Apunta sizeledger a un .ipa, una .app o un .xcarchive y mostrará dónde están los bytes de la app: por categoría, por framework y recurso, por idioma y por arquitectura de CPU. Mantiene tres tamaños separados (los archivos sumados, una estimación del tamaño de instalación en bloques completos de 4 KiB y, para un .ipa, el tamaño comprimido) y no pretende conocer el tamaño de descarga de la App Store. Solo lee los archivos, con sus propios lectores de ZIP, DEFLATE y Mach-O, por lo que no compila, ejecuta, sube ni cambia nada, y funciona igual en macOS y Linux. SizeLedgerKit ofrece el mismo informe a programas Swift.

Características

  • Una sola tabla para toda la app: ejecutable principal, frameworks y dylibs, app extensions, App Clips, app de watch, localizaciones, asset catalogs, firma de código y todo lo demás; las categorías siempre suman el total
  • Cada framework y extension en su propia línea, y cada idioma .lproj sumado en toda la app y sus frameworks
  • Slices de arquitectura de cada binary: qué binaries son universal y cuánto ocupa cada slice, con tamaños de segmento y metadata de Swift en el JSON
  • Tres tamaños mantenidos aparte: los archivos sumados, una estimación del tamaño de instalación en bloques completos de 4 KiB y, para un .ipa, el tamaño comprimido
  • Una tabla de terminal, Markdown para un pull request o un job summary, y un informe JSON con un orden de claves estable
  • La entrada se trata como no confiable: límites de archivos, profundidad, bytes declarados y ratio de compresión, y escapes de terminal, overrides bidireccionales y caracteres invisibles sustituidos en la salida
  • SizeLedgerKit, una biblioteca Swift con documentación DocC y sin dependencias: el lector de ZIP, el decodificador DEFLATE y el parser de Mach-O forman parte de ella

Inicio rápido

sh
1sizeledger analyze path/to/MyApp.ipa

Instalación

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")

Capturas de pantalla

sizeledger analyze sobre SampleShop 2.0: 8,75 MB en 21 archivos, estimación de instalación de 8,80 MB, 2,72 MB comprimidos; catalog.json es el 70,8 % de la app, Assets.car el 18,1 %; siete idiomas; tres binaries universal
SampleShop 2.0, la app fixture que miden los tests, ejecutándose en el iOS 27 Simulator

Cronología

  1. Repositorio abierto y 0.1.0 publicada: sizeledger analyze y la biblioteca SizeLedgerKit, con sus propios lectores de ZIP, DEFLATE y Mach-O

  2. 0.1.1 a 0.1.5: README en nueve idiomas, lecturas acotadas de cabeceras Mach-O, enlaces simbólicos dentro de un .xcarchive rechazados, y límites para entradas manipuladas (--max-files, --max-bytes, --max-ratio, --max-depth)

  3. 0.1.6 a 0.1.8: Sanitize.text se hizo público, se sustituyen más caracteres invisibles en la salida, y las rutas se dividen y comparan por sus bytes

  4. 0.1.9 y 0.1.10: las entradas .ipa superpuestas se rechazan como dañadas, --out ya no escribe a través de enlaces hacia archivos, y el nuevo flag --force

Enlaces

Artículo relacionado

Leer el artículo