الافتراض الشائع أن جلسة سطح المكتب البعيد تنقل بيئة التطوير كاملة إلى حاسوبك المحمول. لكنها تنقل الشاشة ولوحة المفاتيح والفأرة، ولا شيء غير ذلك. يجب أن يصل iPhone إلى Mac الذي يشغّل Xcode، وذلك اتصال منفصل له متطلباته الخاصة من الثقة والنقل والأذونات. كل ما يلي ينبع من هذا الفصل، والفصل هو الموضع الذي تخسر فيه معظم الإعدادات الفاشلة بعد ظهر كامل.

الأسطورة: التحكم عن بعد ينقل الجهاز أيضًا

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

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

حدّد أين يوجد الهاتف فعليًا قبل أن تضبط أي شيء

إذا بقي الهاتف بجانب Mac، فأجرِ الإعداد المحلي المعتاد هناك: وثّق بالحاسوب، وفعّل وضع المطور على الجهاز، وتأكد من أن Xcode يبني ويعمل عليه وأنت جالس أمام الجهاز. عندئذٍ يتحكم سطح المكتب البعيد في سير عمل يعمل بالفعل. هذا هو الترتيب الأقل تكلفة والأجدر بالتفضيل كلما سمح العتاد بذلك.

إذا كان الهاتف يسافر معك وبقي Mac في المكتب، فيحتاج Mac إلى مسار مدعوم إلى ذلك الجهاز. يوفّر VPN مسار شبكة بين الطرفين ولا يوفّر شيئًا آخر: الاقتران ووضع المطور وهوية التوقيع وتسجيل الجهاز كلها متطلبات منفصلة. تعامل مع النفق كطبقة واحدة في مكدس لا كالاتصال نفسه.

اكتب أي الترتيبين ينطبق عليك. كل فحص لاحق يعتمد على ذلك، وخلط الاثنين ينتج إصلاحات لا يمكن أن تعمل.

تعامل مع الاكتشاف والنقل كمسألتين مختلفتين

يجد Xcode الأجهزة اللاسلكية المقترنة عبر Bonjour على الشبكة المحلية، ويمكنه أيضًا الوصول إلى جهاز بعنوان معروف عبر Connect via IP Address. هاتان آليتان بنمطي فشل مختلفين. الجهاز الذي لا يظهر في القائمة أبدًا والجهاز الذي يظهر لكنه يرفض الارتباط ليسا العرَض نفسه، رغم أن كليهما يُقرأ كأن الهاتف مفقود.

استعرض الإعلان قبل أن تغيّر أي شيء: dns-sd -B _apple-mobdev2._tcp يسرد الخدمة التي ينشرها هاتف مقترن على الوصلة المحلية. إن لم يظهر شيء، فطبقة الاكتشاف هي المعطلة واتصال قائم على العنوان هو المسار الوحيد المتبقي. وإن ظهرت الخدمة لكن Xcode ما زال لا يستطيع الارتباط، فالاكتشاف يعمل والنقل أو علاقة الثقة هو ما يفشل.

تغطي مساعدة Apple للأجهزة اللاسلكية شرط الشبكة نفسها وسير عمل العنوان معًا، فاقرأها مقابل الإصدارات المثبتة لديك بدلًا من اتباع مسار قائمة تتذكره من إصدار أقدم. تتغير تسميات القوائم بين إصدارات Xcode حتى حين لا تتغير الآلية تحتها.

تحقق مما يستطيع Mac رؤيته من موضعه

أجرِ الإحصاء على Mac لا على حاسوبك المحمول، لأن Mac هو الجهاز الذي يحتاج إلى الجهاز الآخر. xcrun devicectl list devices يطبع الأجهزة التي يستطيع Xcode الوصول إليها، وsystem_profiler SPUSBDataType يوضح ما هو موصول فعليًا. الهاتف الذي يظهر في القائمة الثانية دون الأولى موصول وغير مقترن، وهذه مشكلة ثقة لا مشكلة شبكة.

xcrun devicectl list devices
system_profiler SPUSBDataType | grep -i iphone
xcrun devicectl device info DEVICE_UDID

إذا كان الجهاز على شبكة فرعية أخرى، فتأكد من أن Mac يستطيع الوصول إلى العنوان الذي ينشره الهاتف، وتذكّر أن عناوين IPv6 المحلية للوصلة محصورة في وصلة واحدة ولا يمكن توجيهها عبر نفق. لهذا نادرًا ما يجعل VPN وحده هاتفًا بعيدًا يظهر: العنوان الذي يعلنه الجهاز لا معنى له إلا على مقطعه الخاص.

تنص المذكرة التقنية Apple TN3158 على أن Xcode يتحدث ابتداءً من الإصدار 15 مع جهاز موصول بكابل عبر واجهة شبكة مبنية على IPv6 المحلي للوصلة، لذا يمكن للتصفية المحلية أن تتداخل حتى مع هاتف موصول فعليًا. صعّد تلك الحالة إلى من يملك سياسة التصفية بدلًا من تعطيلها بنفسك.

أثبته ببناء، لا بأيقونة جهاز

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

نفّذ التسلسل الكامل من Mac. xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app يثبّت دون بيئة التطوير المتكاملة، وهذا يفصل مشكلة واجهة Xcode عن مشكلة مسار الجهاز. ثم شغّل التطبيق واربط به طرفية. إن نجح التثبيت من سطر الأوامر وفشلت البيئة المتكاملة، فالعطل المتبقي في المخطط أو إعداد التوقيع لا في الشبكة.

أبقِ الترتيب ضيقًا: مطور واحد مخوّل، وMac واحد مسجّل، وجهاز واحد، ووصول ينتهي عند انتهاء الجلسة. ألغِ بيانات الاعتماد عندما يتوقف الترتيب. وإن كان الهاتف يستطيع ببساطة البقاء بجانب Mac، فاختر ذلك بدلًا من غيره، لأن أبسط مسار مدعوم هو المسار الذي تبقى فيه أقل طبقات للتنقيح.

مقالات ذات صلة