وحدة 2 / 11

إنشاء أكواد الهاتف المحمول باستخدام الذكاء الاصطناعي: تطوير Kotlin وSwift وعبر الأنظمة الأساسية

المكاسب:

  • الحصول على تعليمات برمجية سهلة الصيانة وقابلة للاختبار من خلال فرض بنية مثل MVVM وطلب طبقة تلو الأخرى في أجزاء صغيرة قبل أن يقوم الذكاء الاصطناعي بإنشاء التعليمات البرمجية.
  • القدرة على التعرف على المصائد الخاصة باللغة مثل الأمان الفارغ وcoroutine في Kotlin، والحلقات الاختيارية وحلقات الذاكرة في Swift، والتحقق من الكود الذي تم إنشاؤه مقابلها.
  • القدرة على التحقق من الأذونات والتكوين بشكل منفصل لكل نظام أساسي في المشاريع المشتركة بين الأنظمة الأساسية (Flutter وReact Native)

جوهر تطوير الأجهزة المحمولة هو البرمجة، وهنا تظهر المكاسب الملموسة من الذكاء الاصطناعي. لكن الجملة "دع الذكاء الاصطناعي يكتب لي الكود" ليست استراتيجية في حد ذاتها. توليد كود جيد؛ فهو يتطلب الجمع بين اللغة الصحيحة، والبنية الصحيحة، والحدود الصحيحة، والتحقق الصحيح. في هذه الوحدة، سوف نتعلم كيفية استخدام الذكاء الاصطناعي بكفاءة وأمان لـ Swift، ولغة iOS، وKotlin، ولغة Android، والأدوات عبر الأنظمة الأساسية التي تعمل على منصتين بقاعدة تعليمات برمجية واحدة. الهدف هو وضع الذكاء الاصطناعي ليس كـ "رمز آلي" ولكن كمسرّع تحدد بنيته.

الهندسة المعمارية أولاً، والرمز ثانياً

الخطأ الأكثر شيوعًا هو مطالبة الذكاء الاصطناعي بالرمز مباشرة بدون خطة معمارية. وهذا مثل بناء جدار دون وضع أساس. البنية الأكثر شيوعًا على الهاتف المحمول هي MVVM (Model-View-ViewModel - وهو نمط تصميم يفصل بين البيانات والشاشة ومنطق العرض). هذا يعني أن العرض هو مجرد عرض، والمنطق والحالة موجودان في ViewModel، والبيانات موجودة في طبقة النموذج. إذا لم تقم بفرض هذا الفصل على الذكاء الاصطناعي منذ البداية، فإنه ينتج بنية غير قابلة للاختبار ويصعب صيانتها والتي تحشر كل المنطق في رمز الشاشة.

تدفق صحي لإنشاء التعليمات البرمجية خطوة بخطوة:

  1. أعط السياق. النظام الأساسي، اللغة، الإصدار، الهندسة المعمارية، المكتبات المستخدمة.
  2. اطلب الطبقات. أولاً نموذج البيانات، ثم طبقة الشبكة/البيانات، ثم ViewModel، آخر الشاشة.
  3. اطلب قطع صغيرة. شاشة واحدة أو وظيفة واحدة؛ إنه ليس ملفًا عملاقًا مكونًا من 500 سطر.
  4. التحقق من كل قطعة. البناء والاختبار والتكامل؛ ثم انتقل إلى المسار التالي.
  5. اطلب إعادة بناء (تحسين الكود). خطوة "اجعل هذا أكثر قابلية للقراءة والاختبار" بعد رمز العمل.
تلميح: أخبر الذكاء الاصطناعي "بتقسيم الكود وفقًا لـ MVVM: أي جزء يجب أن يكون عرضًا، وأي جزء يجب أن يكون ViewModel، وأي جزء يجب أن يكون نموذجًا، ومنحهم بشكل منفصل". تعمل هذه الجملة المفردة على تحسين الجودة المعمارية للكود الذي تم إنشاؤه بشكل كبير.

Kotlin وSwift: اعتبارات خاصة باللغة

تعتبر Kotlin (Android) وSwift (iOS) لغتين حديثتين وآمنتين، لكن لديهما مخاطر مختلفة. في Kotlin، السلامة الخالية (التحقق مما إذا كان المتغير يمكن أن يكون "خاليًا" عبر نظام الكتابة) تتم كتابتها أحيانًا بشكل فضفاض بواسطة الذكاء الاصطناعي؛ لا لزوم لها!! قد يؤدي عامل التشغيل (العلامة التي تفرض التعطل إذا كانت فارغة) إلى تعطل التطبيق. في Swift، تعد دورات الإدارة والاحتفاظ الاختيارية أمرًا بالغ الأهمية؛ قد ينسى الذكاء الاصطناعي إضافة [الذات الضعيفة] في عمليات الإغلاق وسيؤدي ذلك إلى حدوث تسرب للذاكرة.

لذلك عندما تختار لغة، قم بصقل المطالبة وفقًا لذلك: مثل "الحفاظ على السلامة الخالية في Kotlin، لا تستخدم !!" أو "منع التكرار المرجعي القوي في عمليات الإغلاق في Swift".

تنبيه: تتطلب التعليمات البرمجية غير المتزامنة التي يتم إنتاجها بواسطة الذكاء الاصطناعي اهتمامًا خاصًا. سيؤدي اختيار النطاق الخاطئ في coroutines Kotlin أو حظر الخيط الرئيسي في async/await في Swift إلى تجميد التطبيق. يرتكب الذكاء الاصطناعي هذه الأخطاء بشكل متكرر؛ لا تثق به دون اختباره.

التطوير عبر الأنظمة الأساسية: Flutter وReact Native

بالنسبة لأولئك الذين يريدون الانتقال إلى كل من iOS وAndroid باستخدام قاعدة تعليمات برمجية واحدة، فإن Flutter (مجموعة أدوات Google المستندة إلى لغة Dart) وReact Native (الحل المستند إلى Meta's JavaScript) يبرزان. يعد الذكاء الاصطناعي قويًا في هذه البيئات أيضًا، ولكنه يتجاوز أحيانًا اختلافات النظام الأساسي (الأذونات، وقواعد المتجر، والسلوك الخاص بالجهاز). على سبيل المثال، في Flutter، يتم تحديد إذن الكاميرا في ملفات مختلفة على iOS وAndroid؛ يمكن للذكاء الاصطناعي أن يكتب واحدًا فقط. في التعليمات البرمجية عبر الأنظمة الأساسية، من الضروري أن نقول "منح الأذونات والتكوينات اللازمة لكلا النظامين الأساسيين بشكل منفصل".

ملخص الانتخابات:

النهج

متى

الاهتمام مع منظمة العفو الدولية

أصلي (كوتلين/سويفت)

أعلى مستوى من الأداء، والتكامل العميق للجهاز

كل منصة لها رمز منفصل؛ التحقق مرتين

رفرفة

فريق واحد، واجهة مستخدم سريعة ومتسقة

تحقق يدويًا من الأذونات/الإعدادات الخاصة بالنظام الأساسي

رد الفعل الأصلي

فريق الويب/JS متاح

اختبر أقسام الجسر (الجسر الأصلي) بعناية

ثلاث حالات صغيرة

الحالة 1 - مصيدة كوروتين. حصل فريق Android على وظيفة تسحب قائمة المنتجات من الذكاء الاصطناعي. كان الكود يقوم بطلب الشبكة في الموضوع الرئيسي؛ لم تظهر المشكلة على جهاز الاختبار، ولكن على الشبكة الضعيفة، توقف التطبيق لمدة 4 ثوانٍ وأعطى تحذير ANR (التطبيق لا يستجيب). تم إصلاح المشكلة عندما طُلب من الذكاء الاصطناعي "القيام بعمل الشبكة في مرسل الإدخال/الإخراج". الدرس المستفاد: يتم التحكم في التزامن دائمًا.

الحالة 2 - تسرب الذاكرة. وجد أحد مطوري iOS أنه بعد فتح وإغلاق شاشة تم إنشاؤها بواسطة الذكاء الاصطناعي 20 مرة، زادت ذاكرة التطبيق من 40 ميجابايت إلى 180 ميجابايت. كان السبب هو أنه لا يمكن مسح ViewController من الذاكرة بسبب فقدان [الذات الضعيفة] في الإغلاق. كشف الرسم البياني لذاكرة Xcode عن الفخ. الدرس: ملف تعريف الذاكرة إلزامي في التطوير الأصلي.

الحالة 3 - اختلاف المنصة. حصل فريق Flutter على رمز الوصول إلى المعرض من الذكاء الاصطناعي، وكان يعمل على Android ولكنه تعطل على iOS. وكان السبب هو عدم إضافة وصف إذن مكتبة الصور (NSPhotoLibraryUsageDescription) إلى ملف Info.plist؛ لقد كتب الذكاء الاصطناعي جانب Android فقط. إنه إصلاح لمدة 15 دقيقة، ولكن كان من الممكن أن يكون رفضًا من المتجر إذا لم يتم اكتشافه.

موجه ضعيف / موجه قوي

المطالبة الضعيفة: "اكتب كود Kotlin الذي يسحب المنتجات من واجهة برمجة التطبيقات."

مطالبة قوية: "إنشاء تعليمات برمجية لنظام Android/Kotlin تسحب قائمة المنتجات من REST API. - طبقة الشبكة مع التحديثية، وظيفة التعليق - وظيفة الشبكة في Dispatchers.IO؛ حظر الخيط الرئيسي - MVVM: المستودع -> ViewModel -> حالة واجهة المستخدم مع StateFlow - حالات الخطأ: لا توجد شبكة، حالة فئة مختومة منفصلة لـ 4xx، 5xx - حماية الأمان الفارغ، !! استخدام !! طبقات التصدير كملفات منفصلة، ​​جملة واحدة تشرح كل منها."

تمنع المطالبة القوية الكود الذي تم إنشاؤه من الوقوع في فخ الحالات السابقة.

قوالب قابلة للنسخ

قالب الإنتاج ذو الطبقات: "تطوير [الميزة] لـ [النظام الأساسي/اللغة]. الإنتاج بالترتيب: 1) نموذج البيانات (فئة البيانات/البنية) 2) الشبكة أو طبقة مصدر البيانات 3) المستودع 4) ViewModel (إدارة الحالة) 5) الشاشة (واجهة المستخدم) قم بتصدير كل طبقة على حدة، وأضف ملاحظة تكامل بينهما."

قالب أمان خاص باللغة (Kotlin):"راجع رمز Kotlin هذا: - مسح الاستخدام لـ !! ونوع النظام الأساسي - تحقق من نطاق Coroutine واختيار المرسل - هل هناك مكالمات تحظر الموضوع الرئيسي؟ [رمز]"

قالب الأمان الخاص باللغة (Swift): "راجع رمز Swift هذا: - خطر دورة الاحتفاظ في عمليات الإغلاق (ذاتية ضعيفة/غير مملوكة) - استخدام قوة فك التغليف الاختيارية (!) - العمل الثقيل الذي يجب نقله خارج الموضوع الرئيسي [الكود]"

قالب التحكم عبر الأنظمة الأساسية: "أدرج جميع الأذونات والتكوينات والتعليمات البرمجية الخاصة بالنظام الأساسي المطلوبة لميزة [Flutter/React Native] على كل من iOS وAndroid. قم بتوفير إدخالات Info.plist وAndroidManifest.xml منفصلة."

الأخطاء الشائعة

  • طلب الكود دون فرض الهندسة المعمارية. النتيجة: بنية غير قابلة للاختبار تحشر كل شيء على الشاشة.
  • الثقة دون اختبار التعليمات البرمجية المتزامنة. تعد كتل الخيوط الرئيسية والنطاق غير الصحيح من الأسباب الأكثر شيوعًا لحدوث الأعطال.
  • تطل على إدارة الذاكرة. وخاصة التسريبات في عمليات إغلاق iOS؛ لا يمكن ملاحظته دون أخذ ملف تعريف.
  • تجاوز اختلافات المنصة. في الأدوات المشتركة بين الأنظمة الأساسية، تتم كتابة الأذونات والتكوين بشكل منفصل على النظامين الأساسيين.
  • عدم التحقق من إصدار المكتبة. قد يقترح الذكاء الاصطناعي واجهة برمجة التطبيقات التحديثية/Alamofire القديمة؛ تحقق مع وثيقة رسمية.
  • إنتاج ملف عملاق واحد. من المستحيل الحفاظ عليها والتحقق منها؛ اطلب الطبقات.

في ملخص

يعد إنشاء التعليمات البرمجية باستخدام الذكاء الاصطناعي أمرًا قويًا عند تحديد البنية. قم أولاً بفرض بنية مثل MVVM، ثم اطلب طبقة تلو الأخرى وفي أجزاء صغيرة، وقم بتجميع واختبار كل قطعة. تتطلب السلامة الخالية وحلقات coroutine في Kotlin والحلقات الاختيارية وحلقات الذاكرة في Swift اهتمامًا خاصًا. في الأدوات المشتركة بين الأنظمة الأساسية، تتم كتابة الأذونات والتكوين بشكل منفصل لكل نظام أساسي. تخبر المطالبة القوية اللغة والإصدار والهندسة المعمارية وقواعد الأمان الخاصة باللغة مقدمًا؛ وهذا يمنع أخطاء الأعطال والتسرب الأكثر شيوعًا في الإنتاج.

مهمة التطبيق

للحصول على شاشة قائمة (على سبيل المثال، "قائمة جهات الاتصال")، اطلب رمزًا من الذكاء الاصطناعي باستخدام "قالب التصنيع الإضافي" في النظام الأساسي الذي تختاره (Kotlin أو Swift). أضف الكود الذي تم إنشاؤه إلى المشروع، وقم بتجميعه، وإجراء هذين الفحصين: (1) هل الشبكة/العملية الطويلة قيد التشغيل على الخيط الرئيسي، (2) هل السلامة فارغة/اختيارية صحيحة؟ اطلب من الذكاء الاصطناعي إصلاح المشكلة التي تجدها باستخدام قالب أمان خاص باللغة.

قائمة مرجعية

  • [ ] لقد قمت بتحديد البنية (MVVM وما إلى ذلك) قبل طلب الكود
  • [ ] أردت ذلك طبقة تلو الأخرى، على شكل قطع صغيرة
  • [ ] لقد اختبرت أن الكود المتزامن لا يمنع الموضوع الرئيسي
  • [ ] لقد تحققت من السلامة الفارغة/الاختيارية وإدارة الذاكرة
  • [ ] لقد قمت بالتحقق من أذونات/إعدادات نظامين أساسيين بشكل منفصل في مشروع مشترك بين الأنظمة الأساسية
  • [ ] لقد قمت بالتحقق من إصدارات المكتبة وتوقيعات API من الوثائق الرسمية