في الثالثة من فجر السبت 13 سبتمبر 2026 دخلت في مستودع التطبيق عملية واحدة مسّت 39,112 ملفًا: أضافت 3,919 سطرًا وحذفت 140,715. بعدها لم تبقَ في «الكتاب» صورةٌ واحدة للمصحف. صفحات المصحف صارت تُرسم من بيانات متجهية، ومعها ذهبت قاعدة بيانات Realm وملف صناديق الكلمات وخط أنابيب كامل لتوليد الصور.

هذه حكاية ذلك الانتقال: كيف كان الحال قبله، ولماذا لم يكن الاستمرار ممكنًا، وماذا صار ممكنًا بعده، وكيف جرى فعلًا.
أولًا: كيف كان المصحف يُعرض
كان التطبيق يعرض المصحف صورًا. لا صورة لكل صفحة، بل صورة لكل سطر:
| |
| عدد الصور | 9,060 صورة PNG (604 صفحة × 15 سطرًا) |
| عرض كل صورة | 1,440 بكسل |
| حجم النسخة المشحونة | نحو 96 ميغابايت (ومعها نسخة تصحيح بـ 11 ميغابايت) |
| بيانات النص والتخطيط | quran.realm — نحو 8.7 ميغابايت |
| إحداثيات الكلمات | word_boxes.bin |
الصفحة كانت تُبنى بتجميع خمسة عشر سطرًا فوق بعضها، وكل سطر صورة تُحمَّل من حزمة التطبيق وتُرسم بنمط **قالب* (renderingMode(.template)) ثم تُصبغ بلون الحبر Color.ayah. هذه كانت حيلة الوضع الليلي كلها: صورةٌ واحدة تُلوَّن بلونين.
والنقطة الجوهرية: الصورة لا تعرف ما فيها. كل معرفة عن محتوى الصفحة كانت تعيش في مكان آخر:
- Realm كانت تحمل نص الآيات، ومناطق اللمس (
tapRegions)، وعناوين السور،
وتخطيط الصفحات.
word_boxes.bin كان يحمل مستطيل كل كلمة على الصفحة — وهو ما يحتاجه
تتبّع التلاوة ليرسم خطًّا تحت الكلمة التي تُقرأ. بُني أول مرة بحلٍّ استدلالي،
ثم أُعيد توليده من ملفات SVG للمصحف عبر خط أنابيب Python، ومصدره 380 ميغابايت
من الـ SVG لم تكن تُحفظ في المستودع أصلًا.
فالهندسة نفسها كانت مكتوبة ثلاث مرات: مرة في الصورة، ومرة في Realm، ومرة في ملف الصناديق. وكل نسخة قابلة للانحراف عن أختيها.
ثانيًا: لماذا لم يكن الاستمرار ممكنًا
لم يكن الدافع الحجم، بل ستة قيود كانت كلها في طريق مزايا يريدها التطبيق:
- الصورة لا تُكبَّر. 1,440 بكسل هي كل ما هناك؛ أي تكبير بالأصابع يعني
ضبابًا. والمصحف مما يُقرَّب فيه النظر كثيرًا.
- الوضع الليلي كان صبغة لا حبرًا. لونٌ واحد للصفحة بأسرها: لا لون مستقل
لميدالية رقم الآية، ولا للبسملة، ولا لعلامة السجدة، ولا تلوين للحركات.
- ثلاث نسخ من الهندسة تعني انحرافًا مؤكدًا — وقد حدث: كلمة «لَوْمَا» في
الآية 7 من سورة الحجر كان جدول كلمات التطبيق يعدّها كلمة واحدة، بينما
المصحف المطبوع ومنظومة البيانات ومحرك التتبّع وقاعدة التجويد وصوت الكلمات
كلها تعدّها كلمتين.
- مراجعة الحفظ كانت تستر أسطرًا لا كلمات. ما يملكه العارض شرائح صور، فأقصى
ما يستطيع طلاء شريط على سطر كامل. وستر الكلمة المفردة — وكشفها وحدها عند
الخطأ — لم يكن في المتناول.
- Realm كانت عبئًا في ذاتها. كائناتها محصورة بالخيط الذي أنشأها، وقد
أسقطت التطبيق فعلًا في فبراير 2026 أثناء تحميل التفسير في الخلفية.
- كل تصحيح في رسم صفحة كان مشروعًا. إعادة توليد خمس عشرة صورة، ثم إعادة
استخراج صناديق الكلمات، ثم التحقق من تطابق الاثنين.
ثالثًا: ما هو QVP
المحرك الجديد هو quran-engine من quran.ws، ومصحفه يُشحن بصيغة QVP.
بنيته: نواة مكتوبة بـ Rust، تُعرَض عبر واجهة C، وتُلفّ في حزمة Swift ذات XCFramework مبني مسبقًا. التطبيق لا يبني Rust ولا يعرف بوجوده.
ملف QVP الواحد يمثّل صفحة كاملة، ويحمل:
- المسارات المتجهية لحبر الصفحة كما هو مطبوع.
- الكلمات وكلٌّ منها بسورتها وآيتها ورقمها ومستطيلها بإحداثيات الصفحة.
- الزخارف: ميداليات أرقام الآيات، لافتات أسماء السور، البسملة، علامات
السجدة والأحزاب، ترويسة الصفحة ورقمها.
والرسم أصليٌّ على كل منصة (Core Graphics على iOS). المحرك يملك — بحكم التصميم — كل هندسة الصفحة: الحبر، توزيع الأسطر، اختبار اللمس على مستوى الكلمة، الأقنعة، طبقات التنسيق، ومواضع الأسطر.
وأرقامه على نواته (بناء إصدار، معالج Apple):
| |
| تحميل صفحة وحساب هندستها | 2.4 مللي ثانية |
| اختبار لمس دقيق | 1.4 ميكروثانية |
| تظليل آية تمتد ستة أسطر | 65 ميكروثانية |
المحرك مشروع @عبيد وأعتبر نفسي محظوظ كفاية أنه صديقي، وقد أتاح لي التجربة والمشاركة، فضل من الله ثم كرماً منه، ولم أرى شخص متحمساً لمشروع مثل حماسه، ولما لا من حقه، فما قام به في quran.ws هو أفضل تقنية حصلنا عليها لتطبيقات القرآن ( بعد تصحيح التلاوة من @Quran Lab ).
ترك لي أخي حرية التغير في المحرك، فاتفقت على تطبيق قاعدة واحدة (لكي يكون هناك فائدة لمن يعمل على على هذا المحرك) — وهي نفس القاعدة المتبعة مع محرك تتبّع التلاوة الذي نعمل عليه: النقص في المحرك يُصلَح في المحرك، لا يُلتفّ عليه في التطبيق.
رابعًا: ماذا تغيّر فعلًا

حبر حقيقي. الوضع الليلي صار لونًا للحبر، لا صبغةً لصورة. وميدالية الآية والبسملة تأخذان لون التطبيق، وعلامة السجدة لونها الخاص، وكلٌّ على طبقة تنسيق مستقلة تُعاد مع كل تبديل بين الفاتح والداكن.

حدّة في أي تكبير. لا حدود بكسلية أصلًا.
إعداد جديد: «تلوين الحركات والعلامات». الحركات وعلامات الوقف والصفر الصغير كلٌّ بلونه — وهو إعداد لم يكن ليوجد على صورة.
مراجعة الحفظ تكشف كلمة كلمة. وهذه أول ميزة أتاحتها الصفحة المتجهية: مدى الآية المخفية يُقنَّع بـ .hide (فالكلمة المخفية لا تُرسم أصلًا، فلا لون ستارة يُخبَز في الصورة ويصير غلطًا عند تبديل الثيم)، ثم تُكشف كل كلمة عليها علامة. والقاعدة التي وُرِّثت من عارض النص: أي علامة تكشف كلمتها — فالخطأ أو الكلمة المتخطّاة تُظهر ما كان ينبغي أن يُقال.

تتبّع التلاوة يقرأ صناديق الكلمات من المحرك مباشرة. فحُذف word_boxes.bin وحُذف خط أنابيب SVG بأكمله، وبقيت قاعدة «لَوْمَا» وحدها في التطبيق، في ملف واحد اسمه WordKeyShim يترجم بين 77,433 كلمة عند التطبيق و77,432 عند المنظومة.
قراءة الشاشة (VoiceOver). عنصر لكل آية، مبنيٌّ من هندسة المحرك، ولا يُبنى إلا إذا كان المستخدم يشغّل قارئ الشاشة فعلًا. وترتيب القراءة من أولوية معلنة لا من الإحداثيات، لأن آيتين تتقاسمان سطرًا مطبوعًا كانتا تُقرآن معكوستين.
وملفٌّ واحد لكل صفحة بدل خمسة عشر: 604 ملفًا في 79 ميغابايت، مقابل 9,060 صورة في نحو 96.
والصدق في الرقم الأخير واجب: الوفر في الحجم متواضع. الربح الحقيقي أن هذه الـ 79 ميغابايت تخدم الرسم والهندسة واللمس والقناع والبحث معًا، بدل أن تخدم الرسم فقط وتحتاج إلى ملفين آخرين ليُعرف ما فيها.
خامسًا: كيف جرى الانتقال
التحضير (1 سبتمبر). قبل المحرك بأسبوعين، استُخرجت صناديق الكلمات من ملفات SVG بدقة تامة — وهي الخطوة التي أظهرت خلاف «لَوْمَا» وجعلت جداول الكلمات متفقة على الآيات الـ 6,236 كلها. أي أن المستودع دخل الهجرة وبياناته متسقة.
العملية الكبرى (13 سبتمبر، 3:17 فجرًا). في عملية واحدة: المحرك يرسم كل صفحة؛ Realm تُحذف ويحلّ محلها ملفٌّ مسطّح واحد (quran-data.bin، نحو 4.5 ميغابايت، يُحمَّل كاملًا في نحو 0.08 ثانية)؛ صناديق الكلمات وخط أنابيبها يُحذفان؛ 9,060 صورة وحزمة الصور تُحذفان.
الحيلة التي جعلت ذلك ممكنًا في عملية واحدة: الواجهة لم تتغير. صار Verse وChapter بنيتين عاديتين (struct) تحتفظان بأسماء أعضاء Realm نفسها، وبقي QuranDataProvider هو المصدر الوحيد للبيانات بواجهته العامة كما هي. فالبحث والمفضلة والتفسير والودجت والتتبّع لم تشعر بشيء. الهجرة كلها بقيت في المكان الذي يخصّها.
سادسًا: ما تعلّمناه
- طبقةٌ واحدة تملك الهندسة. يوم كانت الهندسة في ثلاثة أماكن انحرفت؛ واليوم المحرك يملكها، والتطبيق يسأله عنها.
- عارضٌ دائم لكل صفحة، والبيانات وحدها تدور. هذه القاعدة كُسرت مرتين بمحاولات «ذكية» لتحرير الذاكرة، وكانت النتيجة في المرتين صفحات بيضاء تحت التمرير السريع.
- حافظ على الواجهة تبقَ الهجرة في مكانها. استبدال قاعدة البيانات كلها لم يلمس بقية التطبيق، لأن
QuranDataProvider بقي هو الباب الوحيد.
- القاعدة الشاذة في ملف واحد. «لَوْمَا» تعيش في
WordKeyShim وحده؛ ونسخة ثانية منها في أي مكان هي العطل لا الميزة.
- أصلح المحرك، لا تلتفّ عليه. إصلاحان من إصلاحات هذا الأسبوع ذهبا إلى المحرك نفسه، وميزةٌ واحدة أُلغيت من التطبيق لأن مكانها هناك.
مشروع Quran.ws قادم من المستقبل، ليس بفضل المحرك فقط، بل لخطط اطلعت عليها، وما الذي سوف يصبح عليه هذا الموقع. وانصحك أن تدخل الموقع لأنه وحده تجربة تجعلك تشعر بالفخر.
ربما يظن البعض أني أبالغ، لكن والله أن فخور جداً بكم، جزى الله خير مجتمع إتقان، فضله علينا كبير والله. نسأل الله أن يديم التعاون فيه وأن يصبح من أضخم المواقع في العالم.
إذا كان لديك هاتف آي-فون، من الضروري أن تجرب أخر إصدار من تطبيق الكتاب. ,إذا لم يكن لديك آي-فون أشتري واحد لتجرب تطبيق الكتاب :)
https://alketab.app