Xcode के लिए iPhone को किसी दूर के Mac में यूँ ही नहीं लगाया जा सकता
रिमोट डेस्कटॉप आपको Xcode दिखाता है, आपकी मेज़ पर रखा iPhone नहीं। डिवाइस को उस Mac से पेयर करें जो बिल्ड करता है, और खोज को परिवहन से अलग मानें।
आम धारणा यह है कि रिमोट डेस्कटॉप सत्र पूरा डेवलपमेंट सेटअप आपके लैपटॉप पर ले आता है। वह स्क्रीन, कीबोर्ड और माउस ले आता है, और कुछ नहीं। 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 कहता है कि संस्करण 15 से Xcode तार वाले डिवाइस से लिंक-लोकल IPv6 पर बने नेटवर्क इंटरफ़ेस के ज़रिए बात करता है, इसलिए स्थानीय फ़िल्टरिंग भौतिक रूप से लगे फ़ोन में भी बाधा डाल सकती है। उस मामले को फ़िल्टरिंग नीति के मालिक तक पहुँचाएँ, स्वयं उसे बंद न करें।
इसे डिवाइस आइकन से नहीं, बिल्ड से सिद्ध करें
सूची में डिवाइस प्रविष्टि, टूलबार में हरा संकेत या सफल पेयरिंग संकेत बीच के अवलोकन हैं। वर्कफ़्लो तब सिद्ध होता है जब Xcode अनुमत बिल्ड स्थापित करता है और डिबगर डिवाइस पर चल रही किसी प्रक्रिया से जुड़ता है।
पूरा क्रम Mac से चलाएँ। xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app IDE के बिना स्थापित करता है, जो Xcode के इंटरफ़ेस की समस्या को डिवाइस के रास्ते की समस्या से अलग करता है। फिर ऐप शुरू करें और उससे कंसोल जोड़ें। अगर कमांड लाइन से स्थापन काम करे और IDE न करे, तो बची हुई खराबी नेटवर्क में नहीं, स्कीम या साइनिंग कॉन्फ़िगरेशन में है।
व्यवस्था को सँकरा रखें: एक अधिकृत डेवलपर, एक पंजीकृत Mac, एक डिवाइस, और ऐसी पहुँच जो सत्र खत्म होने पर खत्म हो जाए। व्यवस्था रुकने पर क्रेडेंशियल रद्द करें। अगर फ़ोन आसानी से Mac के पास रह सकता है, तो वही चुनें, क्योंकि सबसे सरल समर्थित रास्ते में डिबग करने के लिए सबसे कम परतें बचती हैं।