bitchat
تطبيق مراسلة لامركزي من نظير إلى نظير بمعمارية نقل مزدوجة: شبكات Bluetooth mesh محلية للتواصل دون اتصال، وبروتوكول Nostr القائم على الإنترنت للوصول العالمي. لا حسابات، لا أرقام هواتف، لا خوادم مركزية. إنه الشات الجانبي للمجموعة.
bitchat.free
📲 App Store
License
هذا المشروع مُصدر إلى النطاق العام. راجع ملف LICENSE للتفاصيل.
Features
- معمارية النقل المزدوج: شبكة Bluetooth mesh للعمل دون اتصال + بروتوكول Nostr للمراسلة عبر الإنترنت
- قنوات مبنية على الموقع: غرف دردشة جغرافية باستخدام إحداثيات geohash عبر مرحلات Nostr العالمية
- التوجيه الذكي للرسائل: يختار تلقائيًا أفضل وسيلة نقل (Bluetooth ← الرجوع إلى Nostr)
- شبكة شبكية لامركزية: اكتشاف تلقائي للأقران وترحيل متعدد القفزات للرسائل عبر Bluetooth LE
- الخصوصية أولاً: لا حسابات، لا أرقام هواتف، لا معرّفات دائمة
- تشفير الرسائل الخاصة من طرف إلى طرف: بروتوكول Noise لشبكة mesh وNIP-17 لـ Nostr
- أوامر بأسلوب IRC: واجهة مألوفة على غرار
/slap و/msg و/who
- تطبيق شامل: دعم أصلي لنظامي iOS وmacOS
- مسح طارئ: نقرة ثلاثية لمسح جميع البيانات فورًا
- تحسينات الأداء: ضغط الرسائل LZ4، وأوضاع بطارية تكيفية، وشبكات محسّنة
يستخدم BitChat معمارية مراسلة هجينة بطبقتين للنقل متكاملتين:
شبكة Bluetooth Mesh (دون اتصال)
- تواصل محلي: مباشر من نظير إلى نظير ضمن نطاق Bluetooth
- ترحيل متعدد القفزات: تمرير الرسائل عبر الأجهزة القريبة (بحد أقصى 7 قفزات)
- لا يتطلب إنترنت: يعمل دون اتصال تمامًا في سيناريوهات الكوارث
- تشفير بروتوكول Noise: تشفير من طرف إلى طرف مع سرية أمامية
- بروتوكول ثنائي: تنسيق حزم مضغوط محسَّن لقيود Bluetooth LE
- اكتشاف تلقائي: اكتشاف الأقران وإدارة الاتصالات
- طاقة تكيفية: دورة تشغيل محسّنة للبطارية
بروتوكول Nostr (إنترنت)
- وصول عالمي: تواصل مع المستخدمين حول العالم عبر مرحلات الإنترنت
- قنوات الموقع: غرف دردشة جغرافية باستخدام إحداثيات geohash
- شبكة مرحلات تضم 290+ مرحلاً: موزعة حول العالم لضمان الموثوقية
- تشفير NIP-17: رسائل خاصة مغلّفة كهدايا للخصوصية على الإنترنت
- مفاتيح مؤقتة: هوية تشفير جديدة لكل منطقة geohash
أنواع القنوات
mesh #bluetooth
- النقل: شبكة Bluetooth Low Energy الشبكية
- النطاق: الأجهزة المحلية ضمن نطاق متعدد القفزات
- الإنترنت: غير مطلوب
- حالة الاستخدام: التواصل دون اتصال، الاحتجاجات، الكوارث، المناطق النائية
قنوات الموقع (block #dr5rsj7, neighborhood #dr5rs, country #dr)
- النقل: بروتوكول Nostr عبر الإنترنت
- النطاق: مناطق جغرافية محددة بدقة geohash
block (7 أحرف): مستوى المربع السكني في المدينة
neighborhood (6 أحرف): الحي/المنطقة
city (5 أحرف): مستوى المدينة
province (4 أحرف): الولاية/المقاطعة
region (حرفان): البلد/المنطقة الكبيرة
- الإنترنت: مطلوب (يتصل بمرحلات Nostr)
- حالة الاستخدام: دردشة مجتمعية قائمة على الموقع، أحداث محلية، نقاشات إقليمية
توجيه الرسائل المباشرة
تستخدم الرسائل الخاصة اختيار النقل الذكي:
-
Bluetooth أولاً (مُفضَّل عند توفره)
- اتصال مباشر بجلسة Noise قائمة
- الخيار الأسرع والأكثر خصوصية
-
الاحتياط عبر Nostr (عند عدم توفر Bluetooth)
- يستخدم المفتاح العام الخاص بالمستلم على Nostr
- تغليف NIP-17 كهدية للخصوصية
- التوجيه عبر شبكة المرحلات العالمية
-
الطابور الذكي (عند عدم توفر أي منهما)
- تُخزَّن الرسائل في طابور حتى يتوفر النقل
- تسليم تلقائي عند إنشاء الاتصال
للاطلاع على توثيق البروتوكول المفصّل، راجع الورقة التقنية البيضاء.
الإعداد
الخيار 1: باستخدام Xcode
cd bitchat
open bitchat.xcodeproj
لتشغيل التطبيق على جهاز، هناك بضع خطوات لتجهيز الكود:
- انسخ الإعدادات المحلية:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
- أضف معرّف فريق المطوّر الخاص بك إلى
Configs/Local.xcconfig المُنشأ حديثًا
- سيتم تعيين معرّف الحزمة إلى
chat.bitchat.<team_id> (إلا إذا عيّنت قيمة أخرى)
- يجب تحديث الصلاحيات يدويًا (TODO: أتمتة):
- ابحث عن
group.chat.bitchat واستبدلها بـ group.<your_bundle_id> (مثل group.chat.bitchat.ABC123)
الخيار 2: باستخدام just
هل تريد تجربة ذلك على macOS: just run سيقوم بالإعداد والتشغيل من المصدر.
شغّل just clean بعد ذلك لاستعادة الأشياء إلى حالتها الأصلية لبناء وتطوير تطبيق الجوال.
التوطين
- موارد التطبيق الأساسية موجودة في
bitchat/Localization/Base.lproj/. أضف النصوص الجديدة إلى Localizable.strings وقواعد الجمع إلى Localizable.stringsdict.
- نصوص ملحق المشاركة منفصلة في
bitchatShareExtension/Localization/Base.lproj/Localizable.strings.
- فضّل المفاتيح التي تصف الغرض (
app_info.features.offline.title) وأعد استخدام الموجود منها حيثما أمكن.
- شغّل
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build للتحقق من ترجمة أي تحديثات للتوطين.