المشاريع المُنشأة
إن Generated هو بديل قابل للتطبيق يساعد في التغلب على هذه التحديات مع الحفاظ على التعقيد والتكاليف عند مستوى مقبول. فهو يعتبر مشاريع Xcode عنصراً أساسياً، مما يضمن المرونة في مواجهة تحديثات Xcode المستقبلية، ويستفيد من توليد مشاريع Xcode لتزويد الفرق بواجهة برمجة تطبيقات تعريفية تركز على النمذجة. يستخدم تويست إعلان المشروع لتبسيط تعقيدات النمذجة**، وتحسين سير العمل مثل الإنشاء أو الاختبار عبر بيئات مختلفة، وتسهيل وإضفاء الطابع الديمقراطي على تطور مشاريع Xcode.
كيف يعمل؟
للبدء في استخدام المشاريع المُنشأة، كل ما تحتاجه هو تعريف مشروعك باستخدام لغة المجال المحدد (DSL) الخاصة بـ Tuist. يستلزم ذلك استخدام ملفات البيان مثل Workspace.swift.swift أو Project.swift. إذا كنت قد عملت مع مدير حزم Swift Package Manager من قبل، فإن النهج مشابه جدًا.
بمجرد تحديد مشروعك، يقدم لك تويست العديد من مهام سير العمل لإدارته والتفاعل معه:
- توليد: هذا هو سير العمل التأسيسي. استخدمه لإنشاء مشروع Xcode متوافق مع Xcode.
- بناء: لا ينشئ سير العمل هذا مشروع Xcode فحسب، بل يستخدم أيضًا
xcodebuildلتجميعه. - اختبار: يعمل بشكل مشابه لسير عمل الإنشاء، وهذا لا ينشئ مشروع Xcode فحسب، بل يستخدم
xcodebuildلاختباره.
التحديات مع مشاريع Xcode
مع نمو مشاريع Xcode، قد تواجه المؤسسات انخفاضًا في الإنتاجية بسبب عدة عوامل، بما في ذلك عمليات الإنشاء التدريجية غير الموثوقة، والمسح المتكرر لذاكرة التخزين المؤقت العالمية لـ Xcode من قبل المطورين الذين يواجهون مشاكل، وتكوينات المشروع الهشة. للحفاظ على التطوير السريع للميزات، تستكشف المؤسسات عادةً استراتيجيات مختلفة.
تختار بعض المؤسسات تجاوز المحول البرمجي عن طريق تجريد المنصة باستخدام أنظمة تشغيل ديناميكية قائمة على JavaScript، مثل [React Native] (https://reactnative.dev/). على الرغم من أن هذا النهج قد يكون فعالاً، إلا أنه [يعقد الوصول إلى الميزات الأصلية للمنصة] (https://shopify.engineering/building-app-clip-react-native). تختار مؤسسات أخرى نمذجة قاعدة الشيفرة ، مما يساعد على وضع حدود واضحة، مما يسهل العمل على قاعدة الشيفرة ويحسن موثوقية أوقات الإنشاء. ومع ذلك، فإن تنسيق مشروع Xcode ليس مصممًا للنمطية وينتج عنه تكوينات ضمنية لا يفهمها إلا القليلون وتعارضات متكررة. يؤدي هذا إلى عامل ناقل سيء، وعلى الرغم من أن البنيات الإضافية قد تتحسن، إلا أن المطورين قد يستمرون في مسح ذاكرة التخزين المؤقت للبناء في Xcode (أي البيانات المشتقة) بشكل متكرر عند فشل عمليات الإنشاء. لمعالجة هذه المشكلة، تختار بعض المؤسسات التخلي عن نظام بناء Xcode واعتماد بدائل مثل [باك] (https://buck.build/) أو [بازل] (https://bazel.build/). ومع ذلك، فإن هذا يأتي مع [تعقيدات عالية وعبء صيانة] (https://bazel.build/migrate/xcode).
البدائل
مدير حزم سويفت
في حين أن مدير حزم سويفت (SPM) يركز بشكل أساسي على التبعيات، فإن تويست يقدم نهجًا مختلفًا. مع تويست، أنت لا تقوم فقط بتعريف الحزم لدمج SPM؛ بل تقوم بتشكيل مشاريعك باستخدام مفاهيم مألوفة مثل المشاريع ومساحات العمل والأهداف والمخططات.
XcodeGen
[XcodeGen] (https://github.com/yonaskolb/XcodeGen) هو منشئ مشاريع مخصص مصمم لتقليل التعارضات في مشاريع Xcode التعاونية وتبسيط بعض تعقيدات عمل Xcode الداخلي. ومع ذلك، يتم تعريف المشاريع باستخدام صيغ قابلة للتسلسل مثل YAML. على عكس Swift، هذا لا يسمح للمطورين بالبناء على التجريدات أو عمليات التحقق دون دمج أدوات إضافية. على الرغم من أن XcodeGen يقدم طريقة لتعيين التبعيات إلى تمثيل داخلي للتحقق من الصحة والتحسين، إلا أنه لا يزال يعرض المطورين للفروق الدقيقة في Xcode. قد يجعل هذا من XcodeGen أساسًا مناسبًا لـ [بناء الأدوات] (https://github.com/MobileNativeFoundation/rules_xcodeproj)، كما رأينا في مجتمع Bazel، لكنه ليس الأمثل لتطور المشروع الشامل الذي يهدف إلى الحفاظ على بيئة صحية ومنتجة.
بازل
[Bazel] (https://bazel.build) هو نظام بناء متقدم يشتهر بميزات التخزين المؤقت عن بعد، ويكتسب شعبية داخل مجتمع Swift في المقام الأول لهذه الإمكانية. ومع ذلك، نظرًا لقابلية التوسعة المحدودة لـ Xcode ونظام البناء الخاص به، فإن استبداله بنظام Bazel يتطلب جهدًا وصيانة كبيرة. فقط عدد قليل من الشركات ذات الموارد الوفيرة يمكنها تحمل هذا العبء، كما هو واضح من قائمة الشركات المختارة التي تستثمر بكثافة لدمج بازل مع Xcode. ومن المثير للاهتمام، أن المجتمع أنشأ [أداة] (https://github.com/MobileNativeFoundation/rules_xcodeproj) توظف XcodeGen من بازل لإنشاء مشروع Xcode. ينتج عن هذا سلسلة معقدة من التحويلات: من ملفات بازل إلى XcodeGen YAML وأخيراً إلى مشاريع Xcode. غالبًا ما يؤدي هذا التوجيه غير المباشر متعدد الطبقات إلى تعقيد عملية استكشاف الأخطاء وإصلاحها، مما يجعل تشخيص المشكلات وحلها أكثر صعوبة.
