sizeledger
Muestra de dónde viene cada megabyte de una app de iOS: por categoría, framework, asset catalog, idioma y arquitectura.
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
1sizeledger analyze path/to/MyApp.ipaInstalación
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")Capturas de pantalla

Cronología
Repositorio abierto y 0.1.0 publicada: sizeledger analyze y la biblioteca SizeLedgerKit, con sus propios lectores de ZIP, DEFLATE y Mach-O
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)
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
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