sizeledger
يُظهر من أين يأتي كل ميغابايت من تطبيق iOS: بحسب الفئة، الـ framework، asset catalog، اللغة والمعمارية (architecture).
الترخيص: 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 ويُظهر بايتاته بحسب الفئة وframework واللغة ومعمارية المعالج.
- يقرأ الملفات فقط: لا يبني التطبيق أو يشغّله أو يرفعه أو يغيّره، ويعطي التقرير نفسه على macOS وLinux.
- يحافظ على ثلاثة أحجام منفصلة: مجموع الملفات، وتقدير تثبيت بكتل 4 KiB، وحجم ملف .ipa المضغوط.
- قارئ ZIP ومُفكّك DEFLATE ومُحلّل Mach-O مكتوبة بـ Swift، فمكتبة SizeLedgerKit بلا اعتماديات.
- لا يعطي حجم التنزيل من App Store، والأمران diff وbudget مخطَّطان وغير منشورين حتى الإصدار 0.1.10.
عندما توجّه sizeledger إلى ملف .ipa أو .app أو .xcarchive، يُظهر أين توجد بايتات التطبيق: بحسب الفئة، وبحسب الـ framework والمورد (resource)، وبحسب اللغة ومعمارية (architecture) المعالج. يحافظ على ثلاثة أحجام منفصلة (مجموع الملفات، وتقدير حجم التثبيت بكتل كاملة من 4 KiB، وبالنسبة لملف .ipa: الحجم المضغوط) ولا يَزعم معرفة حجم التنزيل من App Store. يقرأ الملفات فقط، بقارئات ZIP وDEFLATE وMach-O خاصة به، فلا يبني أو يشغّل أو يرفع أو يغيّر أي شيء، ويعمل بنفس الطريقة على macOS وLinux. توفّر SizeLedgerKit نفس التقرير لبرامج Swift.
الميزات
- جدول واحد للتطبيق بأكمله: الملف التنفيذي الرئيسي، الـ frameworks وملفات dylib، app extensions، App Clips، تطبيق الساعة (watch app)، الترجمات، asset catalogs، توقيع الكود (code signature) وكل ما تبقى؛ ومجموع الفئات يساوي الإجمالي دائمًا
- كل framework وextension في سطره الخاص، وكل لغة .lproj مجمّعة عبر التطبيق وframeworks الخاصة به
- شرائح معمارية (architecture slices) لكل binary: أي binaries عالمية (universal) وكم تأخذ كل شريحة، مع أحجام segment وmetadata خاصة بـ Swift في JSON
- ثلاثة أحجام منفصلة: مجموع الملفات، وتقدير حجم التثبيت بكتل كاملة من 4 KiB، وبالنسبة لملف .ipa: الحجم المضغوط
- جدول في الطرفية (terminal)، وMarkdown لـ pull request أو ملخص job، وتقرير JSON بترتيب مفاتيح ثابت
- تُعامَل المدخلات كغير موثوقة: حدود على عدد الملفات، العمق، البايتات المُعلَنة ونسبة الضغط، كما يتم استبدال هروبات الطرفية (terminal escapes) والتجاوزات ثنائية الاتجاه (bidirectional overrides) والحروف غير المرئية في المخرجات
- SizeLedgerKit، مكتبة Swift بوثائق DocC وبلا اعتماديات: قارئ 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 ومكتبة SizeLedgerKit، بقارئات ZIP وDEFLATE وMach-O خاصة بها
من 0.1.1 إلى 0.1.5: ملف README بتسع لغات، قراءة محدودة لرأس Mach-O، رفض الروابط الرمزية (symbolic links) داخل .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 لا يكتب بعد الآن عبر روابط إلى ملفات، والعلم (flag) الجديد --force