العربية
دراسة حالة iOS

إطلاق LiftCrew AI: رحلتنا في بناء تطبيق لياقة لـ iOS مدعوم بالذكاء الاصطناعي

كيف صممت SEYSO SERVICES INC وطورت وأطلقت LiftCrew AI على Apple App Store — من أول إيداع برمجي لـ React Native إلى تجربة تدريب جماعي مدعومة بـ Claude، مع مزامنة آنية وتحليل الوجبات بالصور واشتراكات StoreKit 2.

قراءة تستغرق 12 دقيقة بقلم SEYSO SERVICES INC

1

تطبيق iOS تم إطلاقه

9

جداول Supabase

4

أنماط تحديات

60

معدل إطارات الواجهة FPS

المهمة: تدريب جماعي في النادي، مخصص بالذكاء الاصطناعي

تحسن معظم تطبيقات اللياقة التجربة لمستخدم واحد. بدأ LiftCrew من فرضية مختلفة: يتدرب الناس أفضل ضمن مجموعات، لكن الأصدقاء نادرا ما يتشاركون مستوى القوة نفسه. تخيل شريكنا المؤسس فريقا من أربعة يؤدون التمرين نفسه والمجموعة نفسها في اللحظة نفسها — ولكل منهم الوزن المناسب لجسمه على القضيب. أصبحت هذه الفكرة التي تبدو بسيطة أساس المنتج: التمرين نفسه، ووزن مخصص لكل شخص.

تطلب بناؤه حلقة مترابطة بين نموذج ذكاء اصطناعي يفهم تخطيط التدريب، وطبقة آنية تحافظ على تزامن الفريق الموزع، وتجربة iOS طبيعية إلى حد يتلاشى معه حضور الواجهة أثناء المجموعة الثقيلة.

لماذا React Native وExpo لـ iOS، ولماذا تظل التجربة أصلية بما يكفي

اخترنا React Native 0.81 على البنية الجديدة (Fabric + TurboModules) و Expo SDK 54 مع expo-router 6 للتنقل القائم على الملفات. أتاحت هذه المنظومة مشاركة قاعدة شيفرة واحدة بين iOS وAndroid مع استخدام وحدات iOS الأصلية حيث تؤثر في التجربة: الوحدة الأصلية expo-apple-authentication لتسجيل الدخول باستخدام Apple، وStoreKit 2 الأصلي عبر react-native-purchases (RevenueCat)، ومعرض صور iOS عبر expo-image-picker ، و Reanimated 4.3 للرسوم المتحركة بسرعة 60 إطارا/ثانية على خيط واجهة المستخدم.

النتيجة تطبيق يجتاز مراجعة Apple بسلاسة (App Store Connect ID 6762237223، Team C23ARGS845)، ويلتزم بإرشادات الواجهة البشرية من Apple، ويتلقى تحديثات حزمة JavaScript عبر الهواء باستخدام EAS — دون التضحية بما يشعر به مستخدمو iOS فعليا.

الذكاء الاصطناعي: Claude مدربا للتمارين

ينشئ المدرب الذكي خطة لكل جلسة حين يبدأ الفريق التمرين. يتلقى النموذج تكوين الفريق، وخطوط الأساس لـ 1RM لكل عضو، وسجل الجلسات الأخيرة، ومعدات النادي، وهدف تدريب اليوم. ويعيد خطة JSON مهيكلة تتضمن التمارين ومخططات المجموعات والتكرارات والوزن المقترح لكل عضو.

نعتمد افتراضيا على Claude Haiku 4.5 للسرعة والتكلفة، مع الانتقال عند الحاجة إلى Claude Sonnet 4 لتخطيط التدريب الأصعب وللرؤية (تحليل صور الوجبات). والأهم أن مفتاح API لا يغادر الخادم أبدا: يمر كل استدعاء للذكاء الاصطناعي عبر وكيل Vercel بلا خادم على /api/generate-workout ، مع المصادقة باستخدام Supabase JWT للمستخدم. لا تحتوي حزمة التطبيق على أي أسرار؛ فمفتاح Anthropic الوحيد محفوظ في متغيرات بيئة Vercel.

أضفنا فوق ذلك تخزينا مؤقتا للاستجابات على العميل لمدة ساعة واحدة، حتى لا تكلف إعادة فتح الخطة نفسها رموزا، واستبدال التمارين أثناء الجلسة حيث يعيد النموذج حساب الوزن حسب الشدة النسبية، وحدا قصيرا عمدا لإعادة المحاولة حتى لا تمنع الشبكة المتذبذبة المستخدم من التدريب.

مزامنة الفريق آنيا دون خلفية مخصصة

جلسات الفريق هي القلب الاجتماعي للتطبيق. يجب أن يشعر أربعة أشخاص في ثلاثة أندية مختلفة بأنهم يتدربون معا: حين ينهي أحدهم مجموعة يراها الجميع، وحين ينتهي مؤقت الراحة يتقدم الجميع، وحين يحقق أحدهم رقما شخصيا يحتفل الفريق كله بقصاصات ملونة.

بدلا من بناء خدمة آنية مخصصة، اعتمدنا على Supabase Realtime لبث WebSocket. يدفع كل إكمال لمجموعة أو انتقال لتمرين أو تغيير لحالة عضو حدثا صغيرا إلى قناة خاصة بالجلسة. يطبقه مخزن Zustand المحلي تفاؤليا، ويلجأ إلى AsyncStorage إذا انقطعت الشبكة أثناء المجموعة — التدريب أولوية، والمزامنة بحسب المتاح.

يعمل كشف الأرقام الشخصية على العميل باستخدام معادلة Epley مقارنة بـ 1RM المحفوظ لكل مستخدم. عند انتهاء الجلسة، يحفظ أعلى 1RM مقدر لكل تمرين في الملف الشخصي ويبث إلى موجز الفريق. وعند التعادل تظهر أسماء جميع الفائزين، لأن التفاعل الاجتماعي أهم من لوحة الترتيب.

تسجيل الوجبات بالصور باستخدام رؤية Claude

كان مخطط التغذية الأصلي شاشة للبحث اليدوي عن الطعام. استبعدناها بعد النموذج الأولي الأول؛ فلا أحد يريد كتابة «صدر دجاج، 142 غراما» بعد يوم تمارين الساقين. بدلا من ذلك يصور المستخدم طبقه، فتعيد رؤية Claude Sonnet السعرات والمغذيات الكبرى في JSON مهيكل يضاف مباشرة إلى الإجماليات اليومية.

وراء ذلك حاسبة BMR/TDEE بمعادلة Mifflin-St Jeor تحدد أهداف المستخدم، وحلقات تقدم يومية تتحرك مع تسجيل الوجبات، وسجل متجدد لخمسة أيام يحفظ في عمود JSONB بملف المستخدم على Supabase. لا تضيع البيانات عند تسجيل الخروج أو إعادة التثبيت، وقد كان ذلك من أكثر قراراتنا أثرا.

تحديات الفريق: تحويل التمارين إلى موسم

تحديات الفريق تحافظ على استمرار الأصدقاء. يدعم التطبيق أربعة أنماط للتسجيل — الحجم (إجمالي الكيلوغرامات المرفوعة)، الجلسات (عدد التمارين المكتملة)، الأرقام الشخصية (عدد الأرقام القياسية الشخصية)، و سلاسل الاستمرار (أيام التدريب المتتالية). عند إغلاق جلسة، تحتسب التحديات المشاركة تلقائيا ويتحدث الترتيب للفريق كله.

يوجد محرك النقاط بالكامل في دوال Supabase وPostgres، ولا توجد خدمة تحديات منفصلة. تضمن سياسات RLS ألا يرى المستخدم إلا تحديات فريق ينتمي إليه فعليا. إنه درس قديم: عندما تكون طبقة البيانات جيدة، لا تحتاج خدمات كثيرة.

الأجزاء الصعبة: المدفوعات والتجارب ومراجعة Apple

استخدمنا RevenueCat مع StoreKit 2 الأصلي على iOS وGoogle Play Billing على Android. يمثل الاستحقاق علم واحد باسم pro ، والمنتجان هما liftcrew_pro_monthly_v2 (CA$4.99/شهر) و liftcrew_pro_yearly_v4 (CA$39.99/سنة). التجربة المجانية لمدة 15 يوما يفرضها الخادم ضمن subscriptions ، وهو جدول يستند إلى auth.users.created_at — لأن ساعات التجربة على العميل دعوة مفتوحة لتزييف التاريخ وإساءة استخدام إعادة التثبيت.

يوجد webhook من RevenueCat على /api/revenuecat-webhook ينسخ كل حدث اشتراك إلى Supabase، فيقيد وصول من انتهى اشتراكه عند التشغيل التالي، حتى إن كان مخزن الإيصالات المؤقت قديما. وتغلق شاشة الاشتراك تلقائيا بمجرد تغير الاستحقاق.

كشفت مراجعة Apple متطلبا مهما لم نخطط له: الإرشاد 1.2 والامتثال له — المحتوى الذي ينشئه المستخدمون يحتاج وسيلة للإبلاغ عن الآخرين وحظرهم. أضفنا user_reports كجدول، وقائمة حظر لطلبات الاتصال، وإجراء delete_own_account من نوع RPC ليتمكن المستخدمون من حذف حساباتهم بالكامل. اجتاز التطبيق المراجعة في التقديم التالي.

البنية في فقرة واحدة

React Native 0.81 وExpo 54 على العميل. Zustand للحالة، مع حفظها في AsyncStorage ومزامنتها إلى أعمدة Supabase JSONB لتبقى بعد إعادة التثبيت. Supabase Postgres مع RLS عبر تسعة جداول للمستخدمين والجلسات والتمارين وروابط الفرق والأندية والتحديات ورموز الإشعارات والاشتراكات والبلاغات. Supabase Realtime لجلسات الفريق المباشرة. دوال Vercel بلا خادم لوكيل الذكاء الاصطناعي وRevenueCat webhook ومرسل الإشعارات ووكيل دعم من Gmail إلى Linear. Claude للذكاء الاصطناعي وRevenueCat للمدفوعات وEAS Build لتجميع iOS/Android في السحابة. خطا Bebas Neue وDM Sans، ولون أخضر ليموني #d4ff5a على #0d0d0f للمظهر.

ما سنكرره وما لن نكرره

  • سنكرر: مفاتيح الذكاء الاصطناعي على الخادم خلف وكيل بمصادقة JWT. أمر لا يقبل التفاوض.
  • سنكرر: أعمدة JSONB لأشكال حالة المستخدم المتطورة (الإعدادات والوجبات والخطط). أتاحت سرعة أكبر مما كانت ستتيحه ترحيلات المخطط.
  • سنكرر: RevenueCat. استرد الجمع بين webhook وStoreKit 2 قيمته عند أول حاجة لمطابقة استرداد مالي.
  • لن نكرر: الإطلاق دون إدراج الامتثال لـ Apple 1.2 منذ اليوم الأول. كنا نعلم أننا سنحتاج الإبلاغ والحظر؛ وكان ينبغي تضمينهما في أول إصدار.
  • لن نكرر: ساعة تجربة على العميل، ولو مؤقتا. انقلها إلى الخادم أولا.

هل تريد ذلك لتطبيق iOS الخاص بك؟

LiftCrew AI أحد تطبيقات iOS العديدة التي صممتها وأطلقتها SEYSO SERVICES INC. إذا كانت لديك فكرة — ذكاء اصطناعي أو لياقة أو إنتاجية أو B2B — وتريد شريكا ينقلها من رسم أولي إلى تطبيق متاح على App Store، يسعدنا الحوار. Swift الأصلي وSwiftUI وReact Native وExpo وتكامل الذكاء الاصطناعي وتحسين الظهور في App Store وتفاصيل امتثال Apple المتعددة: هذا عملنا.

هل أنت مستعد لبناء تطبيق iOS الخاص بك؟

تحدث إلى الفريق الذي أطلق LiftCrew AI.