Mac بعيد من أجل Xcode: بناء محلي أم بناء بعيد أم مشاركة الشاشة؟
مساحة عمل مُثبَّتة وXcode بعيد ينقلان بيانات مختلفة. حدِّد أين يقيم المصدر والفهرس والبناء، ثم قِس رحلات الذهاب والعودة.
مشاركة مشروع عبر الشبكة لا تنقل Xcode من مكانه، لأن التطبيق يظل يعمل على جهاز Mac لديك ويظل يطلب بيانات المشروع من الخادم. تشغيل Xcode على جهاز Mac البعيد ومشاهدة شاشته ترتيب مختلف، حيث يبقى التطبيق وملفاته معًا ولا يحمل الرابط إلا العرض ومدخلاتك. تحديد أي هذا تريد، قبل ضبط أي شيء، يحسم معظم الالتباس اللاحق.
ثلاثة ترتيبات تغطي الحالات المعتادة، وهي تختلف في مكان إقامة مساحة العمل وفي الآلة التي تُجمِّع. اكتب إجابتك عن هاتين النقطتين قبل المتابعة.
سمِّ الآلة التي تشغّل Xcode
في الترتيب الأول كل شيء محلي: النسخة العاملة والفهرس والبناء كلها على جهاز Mac لديك، والشبكة لا تحمل إلا حركة المستودع والاعتماديات. في الثاني يبقى المشروع على جهاز Mac البعيد مع Xcode، فتحدث الفهرسة والتجميع بجوار الملفات بينما يحمل الرابط محتوى الشاشة وضغطات المفاتيح. في الثالث تحدث التحرير محليًا ويجري البناء على مضيف بعيد بعد تسليم صريح للمصدر. يسمّي الجدول ما ينقله كل ترتيب.
| Arrangement | Where the source lives | What crosses the link |
|---|---|---|
| Everything local | Local disk | Repository and dependency traffic |
| Remote Xcode, screen shared | Remote disk | Display frames and input events |
| Local edit, remote build | Both, with a handoff | Source transfer, then build output |
اقرأ العمود الأوسط أولًا، لأنه يحدد أين ستظهر الأعطال. سير العمل الذي مصدره بعيد يفشل عندما يكون الرابط بطيئًا، بينما سير العمل ذو المترجم البعيد يفشل عندما يكون التسليم غامضًا. الثالث وحده يجعلك مسؤولًا عن الاثنين.
عُدّ رحلات الذهاب والعودة، لا الميغابايتات
المحرر والفهرس يصدران عمليات ملفات صغيرة كثيرة، وكل واحدة منها تصبح رحلة ذهاب وعودة عندما يكون نظام الملفات بعيدًا. وهذا يجعل مساحة العمل المثبّتة حساسة للكمون بطريقة لا تكون فيها نسخة كبيرة واحدة كذلك، ولهذا فإن توقيت نقل ملف لا يخبرك تقريبًا بشيء عن إحساس سير العمل. العرض البعيد له الملف المعاكس: ينقل تدفقًا متصلًا ويتحمل معدل النقل أفضل من تأخيره. ومقارنة الاثنين برقم واحد تنتج إجابة خاطئة واثقة.
لا أحد من الترتيبين هو الأسرع بطبيعته. الاختيار الصحيح يعتمد على العمل الذي تقوم به فعليًا، ولهذا فإن الخطوة التالية هي تجربة ذلك العمل لا قياسًا مرجعيًا.
اجعل تسليم المصدر صريحًا
عندما تحمل الآلتان نسخة عاملة، حدِّد أيّهما ذات سلطة وأي مراجعة استخدمها البناء البعيد. الالتزام تسليم أوضح من أداتين تحرران شجرة عمل مثبّتة واحدة، لأن الالتزام له هوية والتركيب ليس له. المخرجات المولّدة وبيانات الفهرس تحتاج إلى مالك أيضًا، لأنها تُعاد بناؤها من المصدر ولا ينبغي أن تنتقل كما لو كانت مصدرًا. المرآة ثنائية الاتجاه بلا قواعد تعارض ليست سير عمل، بل سباق.
البناء عن بُعد يتطلب أيضًا أن يمتلك المضيف البعيد سلسلة الأدوات الصحيحة وبيانات اعتماد الاعتماديات الخاصة. الشبكة الافتراضية الخاصة التي تتيح لك الوصول إلى المضيف لا تمنحه وصول حسابك، ولا تثبّت Xcode هناك.
تحقّق من المسار قبل أن تلتزم بسير عمل
تحقّق من المضيف البعيد قبل أن تصمم حوله، ثم قِس الرابط بالعمليات التي سينفذها سير العمل فعليًا. الأوامر أدناه تفحص سلسلة الأدوات ودليل المطوّر النشط وتكلفة مراقبة الملفات التي تجعل مساحات العمل البعيدة مؤلمة. شغّل الأخير عبر مسار الشبكة لا محليًا.
xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain
المضيف الذي لا يحتوي على تثبيت Xcode كامل يعيد خطأً من xcodebuild، وهذه مشكلة سلسلة أدوات لا مشكلة شبكة. يوضح دليل المطوّر أي Xcode سيستخدم البناء، والمسار الذي يشير إلى أدوات سطر الأوامر وحده يعني أن التطبيق غير مثبّت. توقيت أمر حالة المستودع عبر المشاركة المثبّتة يكشف تكلفة رحلة الذهاب والعودة مباشرة، ومقارنته بتشغيل محلي يعطي الرقم المهم. وإن كانت هذه الفجوة مؤسفة أصلًا، فسير عمل مساحة العمل المثبّتة سيكون أسوأ تحت محرر حقيقي.
سجّل أي ترتيب اخترت، وأي آلة تملك المصدر، وكيف يعمل التسليم. تلك الملاحظة تحوّل التأهيل التالي أو استبدال الحاسوب المحمول إلى مهمة ضبط بدل تحقيق.