أفضل الممارسات
على مدار سنوات من العمل مع فرق ومشاريع مختلفة، حددنا مجموعة من أفضل الممارسات التي نوصي باتباعها عند العمل مع مشاريع تويست و Xcode. هذه الممارسات ليست إلزامية، لكنها يمكن أن تساعدك على تنظيم مشاريعك بطريقة تسهل صيانتها وتوسيع نطاقها.
Xcode
الأنماط المثبطة
التكوينات لنمذجة البيئات البعيدة
تستخدم العديد من المؤسسات تكوينات البناء لنمذجة بيئات مختلفة عن بُعد (على سبيل المثال، Debug-Production أو الإصدار الإصدار-المؤسسة)، ولكن هذا النهج له بعض الجوانب السلبية:
- التناقضات: إذا كانت هناك تناقضات في التكوين في الرسم البياني، فقد ينتهي الأمر بنظام الإنشاء باستخدام تكوين خاطئ لبعض الأهداف.
- التعقيد: يمكن أن ينتهي الأمر بالمشروعات بقائمة طويلة من التكوينات المحلية والبيئات البعيدة التي يصعب التفكير فيها وصيانتها.
صُممت تكوينات البناء لتجسيد إعدادات بناء مختلفة، ونادراً ما تحتاج المشاريع إلى أكثر من Debug و Release. يمكن تحقيق الحاجة إلى نمذجة بيئات مختلفة بشكل مختلف:
- في إنشاءات التصحيح: يمكنك تضمين جميع التكوينات التي يجب الوصول إليها في التطوير في التطبيق (مثل نقاط النهاية)، وتبديلها في وقت التشغيل. يمكن أن يحدث التبديل إما باستخدام متغيرات بيئة تشغيل المخطط، أو باستخدام واجهة مستخدم داخل التطبيق.
- في إنشاءات الإصدار: في حالة الإصدار، يمكنك فقط تضمين التكوين الذي ترتبط به بنية الإصدار، وعدم تضمين منطق وقت التشغيل لتبديل التكوينات باستخدام توجيهات المحول البرمجي.
التكوينات غير القياسية
بينما يدعم Tuist التكوينات غير القياسية ويجعل إدارتها أسهل مقارنةً بمشاريع Xcode الفانيلا، ستتلقى تحذيرات إذا كانت التكوينات غير متسقة في جميع أنحاء الرسم البياني للتبعية. هذا يساعد على ضمان موثوقية الإنشاء ويمنع المشاكل المتعلقة بالتكوين.
المشروع المُنشأ
المجلدات القابلة للبناء
أضاف تويست 4.62.0 دعمًا لـ المجلدات القابلة للبناء (مجموعات Xcode المتزامنة)، وهي ميزة تم تقديمها في Xcode 16 لتقليل تعارضات الدمج.
في حين أن أنماط أحرف البدل في تويست (على سبيل المثال، Sources/**/*.swift) تقضي بالفعل على تعارضات الدمج في المشاريع المُنشأة، فإن المجلدات القابلة للبناء تقدم مزايا إضافية:
- المزامنة التلقائية: تظل بنية مشروعك متزامنة مع نظام الملفات - لا حاجة للتجديد عند إضافة أو إزالة الملفات
- تدفقات عمل صديقة للذكاء الاصطناعي: يمكن لمساعدي البرمجة والوكلاء تعديل قاعدة التعليمات البرمجية الخاصة بك دون الحاجة إلى إعادة إنشاء المشروع
- تكوين أبسط: تحديد مسارات المجلدات بدلاً من إدارة قوائم الملفات الصريحة
نوصي باعتماد المجلدات القابلة للبناء بدلاً من السمات التقليدية Target.sources و Target.resources للحصول على تجربة تطوير أكثر انسيابية.
swift
let target = Target(
name: "App",
buildableFolders: ["App/Sources", "App/Resources"]
)swift
let target = Target(
name: "App",
sources: ["App/Sources/**"],
resources: ["App/Resources/**"]
)التبعيات
فرض الإصدارات التي تم حلها على CI
عند تثبيت تبعيات Swift Package Manager على CI، نوصي باستخدام علامة --force-resolved-versolved-ions لضمان إنشاءات حتمية:
bash
tuist install --force-resolved-versionsتضمن هذه العلامة حل التبعيات باستخدام الإصدارات الدقيقة المثبتة في Package.resolved ، مما يزيل المشاكل الناجمة عن عدم التحديد في حل التبعية. هذا الأمر مهم بشكل خاص في CI حيث تكون البنيات القابلة للتكرار أمرًا بالغ الأهمية.
