تخطى إلى المحتوى الرئيسي

أحدث عمل على Roam

التحديثات القادمة لـRoam

  • تمت إضافة واجهات التحكم: القوائم التي تعرض الملعب, كتم الصوت, تغيير مستوى الصوت, والتحديد من وسط التحكم!

الخارطة الطرقية

  • تحديث معالجة لوحة المفاتيح لدعم ecp-textedit على KeyboardEntry

    • عرض لوحة المفاتيح عند فتح textedit
    • إخفاء لوحة المفاتيح عند إغلاق textedit
    • التأكد من أن اللصق + التحديد / الحذف في حقل textedit يعمل كما هو متوقع
    • استخدم حقل النص المعدّل الحالي إذا لم يتم دعم ecp-textedit، استخدم حقل النص الرئيسي إذا تم دعمه
    • في macOS، ادعم اللصق باستخدام cmdP, والنسخ / القطع باستخدام cmdX + cmdC
    • إذا لم يكن ecp-textedit مدعومًا، فالعودة إلى السلوك الحالي لإرسال المفاتيح
    • في macOS أظهر حقل نص في الأسفل عند تمكين textedit
    • في macOS ، السماح ب cmd+v و cmd+c و cmd+x للنسخ لصق من / إلى الحافة
  • أضف +30 ثانية مع العد التنازلي لوقت الصمت

    • احتفظ بالكتم لكتم الصوت لمدة +30 ثانية
    • انقر مرة أخرى لإلغاء الكتم والغاؤه
    • إظهار مؤشر أسفل الخط الخاص بزر الكتم
      • شريط التقدم يحتوي على مؤشر تقدم خطي
      • شريط التقدم به زرين: +30 ثانية ، إلغاء
      • إظهاره تحت لوحة الزر الرئيسي بحيث يكون قريبًا من كتم الصوت
    • جعل +30 قابلا للتهيئة إلى 30 ، 15 ، 60 ثانية من خيارات الكتم
  • تقديم عرض اختياري مصغر على iOS يقلد عرض Siri Remote بشكل كثيف

أفكار عامة للمستقبل

إصلاح الأخطاء

  • معرفة ما إذا كانت الدورة من الدعوات إلى nextPacket تكون منطقية.
    • بدلاً من الالتفاف كل 10 مللي ثانية والأمل في أن تكون التوقيتات صحيحة، هل يجب أن يتم بدلاً من ذلك الدوران على الحزم المستلمة ومحاولة جدولتها في وقت الاستضافة 10ms * globalSequenceNumber + startHostTime و sampleTime إلى sequenceNumber * Int64(lastSampleTime.sampleRate) / packetsPerSec + startSampleTime
    • ثم يمكنني التبديل من for await loop على الساعة إلى while !Task.isCancelled loop مزود بـ Task.sleep فيه.
    • حسنًا ، لذا نحن بحاجة إلى الدوران كل 10 مللي ثانية ومحاولة سحب الحزمة الأخيرة ومن ثم جدولتها في ذلك الوقت
    • كلما قمت بمزامنة الصوت
      • يجب أن يكون لدينا lastRenderTime + a sync packet
      • تقدير عدد الحزم التي يجب أن نرسلها + وقت المزامنة
        • وقت العرض + إضافي

تحسين الاختبارات

  • اختبارات UI
    • اختبار عندما يتم إضافة الجهاز أنه يظهر في مُنتقِي الأجهزة ويتم اختياره بواسطة roam
    • اختبار أن المستخدم يمكنه التنقل إلى الإعدادات -> الأجهزة
    • اختبار أن المستخدم يمكنه التنقل إلى الإعدادات -> الرسائل
    • اختبار أن المستخدم يمكنه التنقل إلى الإعدادات -> حول
    • اختبار أن المستخدم قادر على تحرير / حذف الأجهزة
    • اختبار أن المستخدم يمكنه النقر على الأزرار بمجرد إضافة الأجهزة
    • اختبار أن المستخدم يرى الشريط الإعلاني لعدم وجود أجهزة عند عرضه
    • اختبار أن المستخدم يرى الروابط التطبيقية
    • الإشارة إلى swiftdat testingmodelcontainer للحاويات الموديل
    • الإشارة إلى هنا https://medium.com/appledeveloperacademy-ufpe/how-to-implement-ui-tests-with-swiftui-a-few-examples-636708ee26ad لكيفية إعداد الاختبارات

App Clip

  • AppClip
    • أضف زر "الحصول على رابط قابل للمشاركة إلى هذا الجهاز" في الإعدادات -> الجهاز
      • قم بتوليد كل أكواد App Clip البالغ عددها 1.1 مليون مسبقًا وترميز مواقع الحلقات (0.5GB)
      • قم بإنشاء زر لـ "الحصول على رابط قابل للمشاركة إلى الجهاز!" مع معاينة صورة لكود App Clip (لون الجوال)
      • قم بتنزيل الكود + الرابط وتحويله إلى PNG على الجهاز عند تغيير موقع الجهاز
      • اجعل الكود يفتح الجهاز كرابط مشترك إلى صورة (مع استعراض!)
    • اجعل الرابط الفعلي للجهاز قابلاً للمشاركة

تحسين الرسائل الموجهة إلى المستخدمين حول إدارة المعلومات / الحالة

  • تحديث إدارة المعلومات / الحالة للتعامل بشكل أفضل مع الحالة المتقلبة
    • عند الانقطاع، التحديد، النقر على الزر، الانتقال إلى الواجهة الأمامية، فتح التطبيق -> إعادة بدء الحلقة إعادة الاتصال إذا تم قطع الاتصال
    • حلقة إعادة الاتصال للتراجع بشكل متصاعد اعادة المحاولة الاتصالات الفاشلة (0.5 ث، مضاعفة، 10 ث التراجع)
    • عند الاتصال بالجهاز، قم دائمًا بتعطيل تحذيرات الشبكة
    • عند محاولة الاتصال بالجهاز، أو محاولة تشغيل الجهاز، اظهر رمزا معلومات دوار بدلا من النقطة الرمادية.
    • عند تشغيل الجهاز وتحقيق النجاح، اظهر رسمًا متحركًا عند الانتقال من الرمادي -> الدوران -> الأخضر
    • عند تشغيل جهاز بـ WOL وعدم الاتصال بعد 5 ثوانٍ، أو عند تشغيل الجهاز والفشل فورًا، قم بإظهار رسالة تحذير تحت واحدة الشبكة اللاسلكية
      • “لم نتمكن من إيقاظ جهاز Roku الخاص بك” (تعرف على المزيد) (لا تظهر مرة أخرى لهذا الجهاز), (X)
      • تعرف على المزيد يظهر بعض الأسباب المحتملة لذلك
        • أنت غير متصل بنفس الشبكة (اظهر اسم الشبكة الأخير للجهاز. اسأل ما إذا كان المستخدم متصلا بهذه الشبكة)
        • جهازك في وضع النوم العميق (لم يتم إيقاف تشغيله مؤخرا) ولا يمكن إيقاظه
          • جهازك لا يدعم WWOL وهو متصل بالشبكة اللاسلكية
          • جهازك لا يدعم WWOL أو WOL
        • شبكتك غير معدة بطريقة تسمح لنا بإرسال أوامر الإيقاظ إلى الجهاز
    • حلقة إعادة الاتصال = محاولة تراجعية متصاعدة لإعادة الاتصال بإعادة الاتصال ECP
      • إنق توصيل ECP أولاً
      • الاستماع إلى الإخطار ثانيًا
        • التعامل مع +power-mode-changed,+textedit-opened,+textedit-changed,+textedit-closed,+device-name-changed
        • تأكد من أننا نستطيع التعامل مع كل واحد من هذه الطلبات وتنسيقها ...
      • تحديث حالة الجهاز ثالثًا
      • تحديث حالة query-textedit-state رابعاً
        • تحديث حالة textedit
      • تحديث أيقونات الجهاز خامسًا
    • على جميع التغييرات بعد إعادة الاتصال (من خلال الإخطار أو أي شيء)
      • تحديث الجهاز (مخزن) وحالة الجهاز (متقلبة)
    • بعد الاتصال / الانقطاع ، تحديث حالة الاتصال في عرض الجهاز

تحسين الرسائل المستخدمة حول قدرات الجهاز

  • تحديث رسائل المستخدم عند حدوث الأخطاء
    • عند النقر على زر معطل ، افتح القائمة المنبثقة لإظهار السبب وراء تعطيله
      • أظهر مؤشر الرموز في الزر للدلالة على أن المعلومات يمكن تلقيها عند النقر عليه؟
      • تم تعطيل البعد الصوتي للسماعات -> لأن الجهاز لا يدعم وضع السماعات لهذا التطبيق
      • تم تعطيل التحكم بالصوت -> لأن الصوت يتم إخراجه عبر HDMI ، والذي لا يدعم اختيارات صوت؟
    • عند الفحص المباشر للأجهزة وعدم العثور على جدد ، تظهر رسالة تحذير تحت قائمة الجهاز
      • “لم نتمكن من إيقاظ Roku الخاص بك” (اكتشف السبب), (X)
      • اعثري على المزيد من العروض من الإعدادات التي تظهر في نافذة منبثقة
  • أضف شارة لدعم WakeOnWLAN و supportMute.

ملاحظات ECP textedit

أوامر جلسة Keyboard ECP (ملاحظات)

- {"request":"request-events","request-id":"4","param-events":"+language-changed,+language-changing,+media-player-state-changed,+plugin-ui-run,+plugin-ui-run-script,+plugin-ui-exit,+screensaver-run,+screensaver-exit,+plugins-changed,+sync-completed,+power-mode-changed,+volume-changed,+tvinput-ui-run,+tvinput-ui-exit,+tv-channel-changed,+textedit-opened,+textedit-changed,+textedit-closed,+textedit-closed,+ecs-microphone-start,+ecs-microphone-stop,+device-name-changed,+device-location-changed,+audio-setting-changed,+audio-settings-invalidated"}
- {"notify":"textedit-opened","param-masked":"false","param-max-length":"75","param-selection-end":"0","param-selection-start":"0","param-text":"","param-textedit-id":"12","param-textedit-type":"full","timestamp":"608939.003"}
- {"request":"query-textedit-state","request-id":"10"}
- {"content-data":"eyJ0ZXh0ZWRpdC1zdGF0ZSI6eyJ0ZXh0ZWRpdC1pZCI6Im5vbmUifX0=","content-type":"application/json; charset=\"utf-8\"","response":"query-textedit-state","response-id":"10","status":"200","status-msg":"OK"}
- {"param-text":"h","param-textedit-id":"12","request":"set-textedit-text","request-id":"20"}
- {"response":"set-textedit-text","response-id":"29","status":"200","status-msg":"OK"}

للتحديث عند ترك الدعم لـ iOS 17/macOS 14 (فبراير 2026)

  • اذهب حول وأزل @available(iOS 18) تأشيرات
  • استخدم ميزات معاينة لإدخال بيانات العينة في المعاينات
    • كيفية القيام بذلك مع iOS 17 لا زال هو العامل؟
    • كيفية استخدام @Previewable في المعاينات مع iOS 17 لا زالهو العامل؟؟
  • SwiftData
    • اضافة استخدام #Index الجديد الماكرو للنماذج
    • استخدام #Unique macro الجديد للنماذج
    • استخدام حذف الدفعة
  • TipKit