iCalendar
ملف ICS يحمل بيانات تقويم — مواعيد واجتماعات وتذكيرات — في ملف نصّي بسيط وفق معيار RFC 5545 المعتمد عام 1998. كل تطبيقات التقويم الشائعة تقرؤه مباشرة، لكن كلاً منها يفسّر قواعد التكرار والمناطق الزمنية بطريقة مختلفة قليلاً.
تحويل ICS غير متاح حالياً في FileDex. استخدم أوامر CLI في المرجع التقني أدناه للتحويل بين صيغ التقويم عبر python-icalendar أو grep.
أسئلة شائعة
كيف أفتح ملف ICS؟
انقر نقراً مزدوجاً على الملف لفتحه في تطبيق التقويم الافتراضي على جهازك — تقويم Google على الويب، تقويم Apple على أجهزة macOS وiOS، برنامج Outlook (متاح لمعظم الأنظمة)، أو Thunderbird من Mozilla. لأنّ ICS نصّ عادي بالكامل، أيّ محرِّر نصّي يعرض البنية الخام للملف إذا أردت فحصها بنفسك.
كيف أُضيف ملف ICS إلى تقويم Google؟
افتح تقويم Google في متصفّحك. انقر أيقونة الترس، ثم "الإعدادات"، ثم "استيراد وتصدير"، ثم "استيراد". اختر ملف ICS وحدّد التقويم الذي تريد إضافة الأحداث إليه. يمكنك أيضاً سحب ملف ICS مباشرة إلى واجهة التقويم. للاشتراكات المتجدِّدة (مثل مواقيت الصلاة)، استخدم خيار "من عنوان URL" تحت "تقويمات أخرى".
ما الفرق بين ICS و CalDAV؟
ICS تنسيق ملف يُخزِّن أحداث التقويم كنصّ عادي وفق معيار RFC 5545. CalDAV (المعرَّف في RFC 4791) بروتوكول مزامنة مبني على HTTP تستخدمه تطبيقات التقويم لإبقاء الأحداث متزامنة مع خادم مركزي. CalDAV ليس بديلاً لـ ICS — بل يستخدمه كحمولة بيانات أصلية. الشبه الأقرب: التنسيق هو الرسالة، والبروتوكول هو مكتب البريد الذي ينقلها.
لماذا يعرض حدث ICS الوقت الخاطئ بعد استيراده؟
يمكن التعبير عن الأوقات في ICS بثلاث طرق: بلاحقة Z (توقيت عالمي غير غامض)، بمعامل TZID (وقت محلي في منطقة زمنية مُسمّاة)، أو بدون منطقة زمنية إطلاقاً (وقت عائم يُفسَّر في المنطقة المحلية للعارض). عندما يستخدم المصدر معامل TZID لا يعرفه التقويم الوجهة، أو عندما تختلف قواعد التوقيت الصيفي، تتحوّل الأحداث بساعات. الحلّ: استخدم لاحقة Z للأحداث المشتركة بين المناطق.
هل يمكنني الاشتراك في مواقيت الصلاة السعودية كتقويم ICS؟
نعم. وزارة الشؤون الإسلامية السعودية وتطبيقات إسلامية مثل Athan تنشر تغذيات ICS لمواقيت الصلاة. اشترك في تقويم Google عبر "تقويمات أخرى" ثم "من عنوان URL"، أو في تقويم Apple عبر "ملف" ثم "اشتراك تقويم جديد". التغذية تُحدِّث مواقيت الصلاة اليومية بتوقيت الرياض. خطبة الجمعة تتكرَّر عبر قاعدة `RRULE` أسبوعية، مع استثناء أيام العيد.
ما يميز .ICS
انقر على أيّ زرّ "إضافة إلى التقويم" في موقع ويب. ما يُنزَّل على جهازك ملف نصّي صغير يبدأ بالسطر BEGIN:VCALENDAR — مجموعة بايتات تعرف كلّ تطبيقات التقويم في العالم كيف تقرؤها، لكنّ كلاً منها يقرؤها بطريقة مختلفة قليلاً. هذا التباين الدقيق هو جوهر قصّة تنسيق iCalendar.
اكتشف التفاصيل التقنية
كلّ تطبيق تقويم يقرأ ICS. لا اثنان يتّفقان على النتيجة. لماذا؟
تنسيق iCalendar عالمي بمعنى أن كلّ تطبيق تقويم في العالم يفهمه. تطبيقات Apple وGoogle، وبرنامج Outlook، وThunderbird، وكلّ خادم CalDAV متوافق — جميعها تتعامل مع نوع المحتوى text/calendar بشكل أصلي. أسقط ملف .ics في أيّ منها وسيُستورد مباشرة دون أيّ تحويل.
القصّة المختلفة هي: ماذا يفعل التطبيق بعد الاستيراد.
حاوية VCALENDAR تحتوي على مكوِّن واحد أو أكثر: VEVENT للاجتماعات، VTODO للمهام، VJOURNAL للمُدخلات اليومية، VFREEBUSY لاستعلامات التوفّر، VTIMEZONE لتعريفات المناطق الزمنية، وVALARM للتذكيرات المتداخلة داخل الأحداث. كلّ مكوِّن يُحاط بعلامتَي بداية ونهاية. سطر PRODID الإلزامي يعمل كبصمة تُحدِّد التطبيق الذي أنتج الملف. القيمة تحمل اسم الشركة والمنتج وإصدار التطبيق.
خذ نفس ملف .ics واستورده إلى ثلاثة تطبيقات تقويم مختلفة. الحدث الأساسي سيظهر في جميعها. التذكيرات قد تصل في اثنين منها فقط. حالة الحضور قد تُفسَّر في واحد. أفعال الجدولة المُعرَّفة في RFC 5546 — طلب الاجتماع، الردّ عليه، إلغاؤه — تُعالَج بطرق مختلفة في كلّ تطبيق. التنسيق عالمي، لكنّ السلوك الفعلي محلّي. الأحداث البسيطة تكشف الفجوة. الأحداث المتكرِّرة تُوسِّعها.
سطر واحد يُشفِّر سنة كاملة من الاجتماعات. لماذا هو أصعب سطر في المعيار؟
خذ سطر RRULE واحداً — قاعدة تكرار ليوم الاثنين والأربعاء والجمعة حتى نهاية 2027. هذا السطر يُشفِّر مجموعة كاملة من التواريخ يجب على كلّ تطبيق تقويم أن يحسبها بشكل صحيح عبر عقود قادمة، مع مراعاة المناطق الزمنية وقوائم الاستثناءات.
قواعد التكرار تمنحك سبعة مُعامِلات حرّة. FREQ يختار التردّد الأساسي (من ثانية إلى سنة). INTERVAL يضاعف الفجوة بين التكرارات. COUNT أو UNTIL يحدّ السلسلة بعدد أو بتاريخ نهاية. مجموعة من المعامِلات الإضافية تضيق التواريخ الناتجة — بتحديد أيام معينة من الأسبوع، أو أيام شهر، أو أشهر من السنة، أو ترتيب معين داخل مجموعة. كلّ معامل يبدأ بالبادئة BY متبوعاً بوصف الشرط. دمج هذه المعامِلات يُنتج أنماطاً معقَّدة مثل "كل ثلاثاء بديل في الأشهر ذات 31 يوماً" أو "آخر يوم عمل من كلّ ربع سنة".
خاصّية EXDATE تُزيل حالات محدَّدة من السلسلة. خاصّية RECURRENCE-ID تتجاوز حالة واحدة بتاريخ بداية مختلف. خاصّية RDATE تُضيف مناسبات فردية لا تُطابق القاعدة الرئيسية.
هذا التوسُّع التوافقي هو السبب في أنّ مكتبات تحليل ICS ليست صغيرة الحجم. مكتبتا ical.js وpython-icalendar تشحن كلّ منهما آلاف الأسطر فقط لتوسيع مجموعات التكرار بشكل صحيح. الحالات الطرفية — الجمعة 13، حدود التوقيت الصيفي داخل قاعدة شهرية، الأحداث السنوية في 29 فبراير — لا تزال تُنتج تقارير أخطاء في تطبيقات التقويم بعد عقود من نشر المعيار. بعد ضبط التواريخ، تبقى المناطق الزمنية — وهناك تصطدم ميكانيكا المعيار بالسياسة.
اجتماع 9 صباحاً في بيروت وقع في لحظتَين مختلفتَين يوم 26 مارس 2023. كيف؟
اجتماع الساعة التاسعة صباحاً في بيروت يوم 26 مارس 2023 وقع في لحظتَين مختلفتَين بالتوقيت العالمي — حسب الفصيل الحكومي اللبناني الذي تثق به. حادثة لن تنساها خوادم التقويم.
يُعطي ICS حدثاً ثلاث طرق للتعبير عن الوقت. إذا أضفت لاحقة Z إلى تاريخ الحدث، فالوقت بالتوقيت العالمي وغير غامض أبداً. معامل TZID يُحدِّد منطقة زمنية مُسمّاة مثل Asia/Riyadh للرياض. الوقت يصبح محلياً لتلك المنطقة، ويجب على المُحلِّل البحث عنها إما في كتلة VTIMEZONE مضمَّنة أو في قاعدة بيانات Olson المعيارية. إذا تجاهلت الاثنين، فلديك ما يُسمّى "وقت عائم" — يُفسَّر في أيّ منطقة زمنية يكون فيها العارض وقت الفتح.
معظم تعقيدات الجدولة بين المناطق ليست عيوباً في معيار ICS — هي نزاعات حول تعريفات المناطق الزمنية نفسها. المملكة العربية السعودية والبحرين وقطر والكويت تبقى على التوقيت العالمي +3 طوال السنة؛ الإمارات وعُمان على +4. هذه المناطق الحالة السهلة. مصر أعادت تطبيق التوقيت الصيفي في 28 أبريل 2023 بعد عقد من التعليق — أيّ حدث ICS موسوم بمنطقة مصر قبل ذلك التاريخ قد يُفكَّ الآن بشكل خاطئ إذا استخدم المحلِّل قاعدة بيانات قديمة.
فوضى لبنان في مارس 2023 كانت أشدّ. رئيس الوزراء أجّل التوقيت الصيفي لإبقاء الصباحات أقصر خلال شهر رمضان؛ الزعماء المسيحيون رفضوا القرار. لمدّة أربعة أيام تقريباً، ركضت لبنان فعلياً في منطقتَين زمنيَّتين متزامنتَين — "التوقيت المسيحي" (+3) و"التوقيت الإسلامي" (+2). أنظمة الطيران والاتصالات والمستشفيات كلها تعطَّلت. مرونة iCalendar — ثلاث طرق صحيحة لكتابة وقت واحد — أصبحت هي المشكلة. المناطق الزمنية مشكلة أدوات. التقاويم نفسها — أيّ الأيام تُحتسب كأيّ — مشكلة أعمق.
26 عاماً من iCalendar. خطبة الجمعة لا تزال تحتاج حلولاً يدوية. لماذا؟
اضبط قاعدة تكرار أسبوعية ليوم الجمعة على حدث الساعة 12:30 ظهراً بتوقيت الرياض، وستحصل على خطبة جمعة تتكرَّر إلى الأبد. أضف EXDATE لتاريخ واحد وأفسحت المجال لعيد الفطر. أضف آخر وأفسحت لعيد الأضحى.
معظم سير عمل التقويم في دول الخليج يعود إلى هذا النمط البسيط. معيار ICS يضع التقويم الميلادي بشكل ثابت في خاصّية DTSTART. المعيار RFC 7529 الصادر عام 2015 أضاف معامل RSCALE للتكرار في التقاويم غير الميلادية — مثل الهجري. تطبيق تقويم Apple يدعمه بشكل أساسي. تقويم Google يفتقر إلى الدعم من جانب الخادم. معظم التطبيقات الأخرى تتجاهل المعامل تماماً. لهذا السبب الأحداث الهجرية الموثوقة عبر التطبيقات لا تزال تُختَزل إلى تاريخ ميلادي في DTSTART مع عرض هجري مُحسَب في الواجهة.
غيّرت المملكة العربية السعودية عطلتها الأسبوعية من الخميس والجمعة إلى الجمعة والسبت في 29 يونيو 2013. سلاسل الاجتماعات السعودية المتكرّرة تستخدم قاعدة من الأحد إلى الخميس لأحداث أيّام العمل. شهر رمضان يقلّل ساعات العمل بحوالي الربع، لذا التقويمات المؤسّسية تستخدم EXDATE للشهر الهجري كاملاً وتُعيد إضافة حالات أقصر يدوياً — قائمة يجب توليدها من جديد كلّ سنة ميلادية، لأنّ رمضان يتحوَّل 11 يوماً تقريباً للخلف في كلّ سنة شمسية. وزارة الشؤون الإسلامية السعودية تنشر مواقيت الصلاة وأحداث موسم الحجّ كاشتراكات ICS قابلة للاشتراك بها عبر خيار "من عنوان URL".
التنسيق لم يتوقَّع حالة الاستخدام الخليجية. 26 عاماً من تطوُّر iCalendar لا تزال تترك جدولة خطبة الجمعة كحلّ يدوي بديل.
مقارنة .ICS مع البدائل
| المقارنة | المعيار | الفائز |
|---|---|---|
| .ICS vs .VCARD (VCF) | نطاق البيانات ICS يُعالج بيانات التقويم والجدولة — الأحداث، المهام، قواعد التكرار، المناطق الزمنية. VCF يُعالج بيانات جهات الاتصال — الأسماء، العناوين، أرقام الهواتف. كلا التنسيقَين وُلدا من عمل Internet Mail Consortium على تنسيقات إدارة المعلومات الشخصية في أواخر التسعينيّات، ويتشاركان نفس بنية السطر والوسوم. أشقاء في التصميم، لا منافسون. | تعادل |
| .ICS vs .CALDAV | ملف أم بروتوكول ICS تنسيق ملف. CalDAV بروتوكول مزامنة مبني على HTTP وWebDAV يستخدم ICS كحمولة بيانات أصلية. لا يُمكن المقارنة بينهما كبدائل — CalDAV يحتاج إلى ICS ليعمل. خوادم مثل Radicale وBaikal وNextcloud تخزّن كلّ حدث كملف .ics منفصل داخل مجموعة تقويم على القرص. | تعادل |
| .ICS vs .GOOGLE CALENDAR API | الاستقلال عن المُورِّد ICS معيار مفتوح من IETF (RFC 5545) تقرؤه كلّ تطبيقات التقويم في العالم. Google Calendar API واجهة برمجية تعتمد على REST وJSON، حصرية لخدمة تقويم Google. حتى Google Calendar نفسه يُصدِّر كـ ICS عند طلب قابلية النقل. معيار JMAP CalendarEvent الأحدث بديل مفتوح، لكن ICS لا يزال الخيار الأكثر حياداً. | ICS أفضل |
المرجع التقني
- نوع MIME
text/calendar- المطوّر
- IETF
- سنة التقديم
- 1998
- معيار مفتوح
- نعم — عرض المواصفات
البنية الثنائية
ملف ICS نصّ عادي بترميز UTF-8 بدون أيّ بنية ثنائية أو توقيع سحري. الملف الصالح يبدأ بالنصّ الحرفي `BEGIN:VCALENDAR` (توقيع PRONOM fmt/388)، ثم `VERSION:2.0`، ثم `PRODID` الذي يُحدِّد التطبيق المُنتج للملف. المكوِّنات تتداخل عبر علامتَي `BEGIN:NAME` و`END:NAME` — VEVENT للأحداث، VTODO للمهام، VJOURNAL للملاحظات اليومية، VTIMEZONE لتعريفات المناطق الزمنية، VALARM للتذكيرات المتداخلة داخل الأحداث. كلّ سطر ينتهي بمحرفَي CRLF، والأسطر الأطول من 75 ثمانية تُطوى على السطر التالي ببدء السطر الجديد بمسافة واحدة (قيد قديم موروث من معيار البريد الإلكتروني RFC 822). الخصائص تحمل معامِلات اختيارية عبر الصيغة `;NAME=VALUE` بين اسم الخاصّية والنقطتَين — مثل `DTSTART;TZID=Asia/Riyadh:20260417T123000`.
| Offset | Length | Field | Example | Description |
|---|---|---|---|---|
Line 1 | 15 bytes | علامة BEGIN | BEGIN:VCALENDAR | السطر الأول المطلوب — يعمل أيضاً كتعريف قائم على المحتوى (توقيع PRONOM fmt/388) |
Line 2 | 11 bytes | VERSION | VERSION:2.0 | إصدار مواصفات iCalendar — دائماً 2.0 لـ RFC 5545 (1.0 كان vCalendar قبل المعيار) |
Line 3 | variable | PRODID | PRODID:-//Apple Inc.//macOS 14.5//EN | معرّف المنتج الإلزامي للتطبيق الذي أنشأ الملف — يعمل كبصمة تُميِّز المُصدِّرين في أدوات مقارنة التقاويم |
Last line | 13 bytes | علامة END | END:VCALENDAR | السطر الأخير المطلوب — يُغلق حاوية VCALENDAR |
تحويل ICS غير متاح حالياً في FileDex. استخدم أوامر CLI في المرجع التقني أدناه للتحويل بين صيغ التقويم عبر python-icalendar أو grep.
نقاط الضعف
- تسريب بيانات عبر ردّ ATTENDEE التلقائي
- استنفاد الذاكرة عبر RRULE مُفرط
- تصيُّد عبر خاصّية URL في الحدث
- حقن VTIMEZONE خبيث
الحماية: افتح ملفات ICS في تطبيقات التقويم الموثوقة فقط. قبل قبول دعوة من مرسل غير معروف، افحص الملف في محرِّر نصّي — روابط ATTENDEE المشبوهة وعناوين التصيُّد تُكشَف عبر القراءة المباشرة. على الخوادم، افرض حدوداً على توسيع قواعد التكرار. عطِّل الردود التلقائية على الدعوات المجهولة. FileDex لا يحلل ملفات ICS — هذه الصفحة مرجع ثابت، لا رفع ملف.
- مواصفات RFC 5545 — Internet Calendaring and Scheduling Core Object Specification (iCalendar)
- مواصفات RFC 5546 — iCalendar Transport-Independent Interoperability Protocol (iTIP)
- مواصفات RFC 7529 — Non-Gregorian Recurrence Rules in iCalendar
- مواصفات RFC 4791 — Calendaring Extensions to WebDAV (CalDAV)
- سجل PRONOM fmt/388 — iCalendar
- سجل IANA text/calendar media type