sdkbump
تفحص تطبيقات iOS الأصلية (native) وFlutter وReact Native بحثًا عن تغييرات iOS 27 SDK وتحدّد الإصلاح المناسب لكل منها.
الترخيص: MIT
التطبيق المبني بـ iOS 27 SDK الذي لا يُعرِّف scene يُجمَّع (compile) دون تحذير، ثم يتوقف عند الإقلاع (launch). تقرأ sdkbump ملفات مشروع iOS أصلي أو Flutter أو React Native/Expo (project.pbxproj وInfo.plist ومصادر Swift وObjective-C وpackage.json وpubspec.yaml)، وتُقرّر مشاكل دورة حياة UIScene على هيئة قواعد من SCN001 إلى SCN004، وتختار الإصلاح المناسب لبيئة المشروع (ecosystem) وإصداره. لا تبني الأداة المشروع ولا تشغّله ولا تغيّره.
الميزات
- حكم يجيب عن سؤال "هل سيُقلِع؟": فشل في الإقلاع، أو يُقلِع إلى شاشة سوداء، أو يُقلِع بواسطة حزمة التحايل (workaround)، أو إقلاع غير محدَّد
- iOS أصلي وFlutter (تطبيق ومثال plugin) وReact Native وExpo في تقرير واحد بنفس معرّفات القواعد (rule IDs)
- الإصلاح يُختار حسب البيئة والإصدار: React Native 0.88 أو scene delegate مكتوب يدويًا، أو خيار الاشتراك الاختياري (opt-in) في Expo SDK 57 أو SDK 58، أو الترحيل (migration) التلقائي في Flutter أو الخطوات اليدوية
- القواعد محفوظة كبيانات في rules/ios27.json، ويتم التحقق منها بواسطة zod؛ تحمل كل قاعدة وإصلاح وworkaround مصدرًا، ويفشل اختبار عندما لا يحمله أحدها
- تقارير terminal وMarkdown وJSON، مع --fail-on ورموز الخروج (exit codes) 0 و1 و2 لـ CI
- تتعرّف على react-native-uiscene-bridge وreact-native-xcode27 وتُظهر النتائج (findings) التي تعالجها هذه الحزم في وقت التشغيل على أنها "handled"، مع حدودها
- تقرأ الملفات فقط، فلا تحتاج إلى Xcode وتعمل أيضًا على Linux؛ يُطبع النص الوارد من المشروع المفحوص كنص عادي (plain text) في كل صيغة
البدء السريع
1npx @mcamdali/sdkbump --format markdown --output sdkbump.mdالتثبيت
npm (global)
1npm i -g @mcamdali/sdkbump2sdkbumpnpx
1npx @mcamdali/sdkbumpHomebrew
1brew install muhittincamdali/tap/sdkbumpلقطات الشاشة

الجدول الزمني
أول commit وأول إصدار 0.1.0: SCN001 إلى SCN004 لمشاريع iOS الأصلية وFlutter وReact Native وExpo
0.1.1 و0.1.2: تُقرَأ ملفات المشروع فقط عندما تكون ملفات عادية (regular files) داخل المشروع؛ وملف Info.plist غير القابل للقراءة يُعطي "Launch not determined" بدلًا من فشل الإقلاع
0.1.3: نُشرت على npm باسم @mcamdali/sdkbump؛ وتُنظَّف محارف التحكم في كل صيغة تقرير وفي stderr