Xcode के लिए दूरस्थ Mac: स्थानीय बिल्ड, दूरस्थ बिल्ड या स्क्रीन शेयर?
माउंट किया गया वर्कस्पेस और दूरस्थ Xcode अलग-अलग डेटा ले जाते हैं। तय करें कि स्रोत, इंडेक्स और बिल्ड कहाँ रहते हैं, फिर राउंड ट्रिप मापें।
नेटवर्क पर प्रोजेक्ट साझा करने से Xcode नहीं हिलता, क्योंकि ऐप आपके Mac पर चलता रहता है और सर्वर से प्रोजेक्ट डेटा माँगता रहता है। दूरस्थ Mac पर Xcode चलाकर उसकी स्क्रीन देखना एक अलग व्यवस्था है, जिसमें ऐप और उसकी फाइलें साथ रहती हैं और लिंक केवल डिस्प्ले और आपका इनपुट ले जाता है। कुछ भी कॉन्फ़िगर करने से पहले यह तय करना कि आप इनमें से कौन-सा चाहते हैं, बाद की अधिकांश उलझन सुलझा देता है।
तीन व्यवस्थाएँ सामान्य मामलों को कवर करती हैं, और वे इस बात में भिन्न हैं कि वर्कस्पेस कहाँ रहता है और कौन-सी मशीन कंपाइल करती है। आगे बढ़ने से पहले दोनों बिंदुओं पर अपना जवाब लिख लें।
उस मशीन का नाम बताएँ जो Xcode चलाती है
पहली व्यवस्था में सब कुछ स्थानीय है: वर्क कॉपी, इंडेक्स और बिल्ड सब आपके Mac पर रहते हैं, और नेटवर्क केवल रिपॉज़िटरी और निर्भरता का ट्रैफ़िक ले जाता है। दूसरी में प्रोजेक्ट Xcode के साथ दूरस्थ Mac पर रहता है, इसलिए इंडेक्सिंग और कंपाइलेशन फाइलों के पास होते हैं जबकि लिंक स्क्रीन सामग्री और कीस्ट्रोक ले जाता है। तीसरी में संपादन स्थानीय रूप से होता है और स्पष्ट स्रोत हस्तांतरण के बाद दूरस्थ होस्ट पर बिल्ड चलता है। तालिका बताती है कि हर एक क्या ले जाता है।
| 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 |
पहले बीच का स्तंभ पढ़ें, क्योंकि यह तय करता है कि विफलताएँ कहाँ दिखाई देंगी। जिस वर्कफ़्लो का स्रोत दूरस्थ है वह लिंक धीमा होने पर विफल होता है, जबकि दूरस्थ कंपाइलर वाला वर्कफ़्लो हस्तांतरण अस्पष्ट होने पर विफल होता है। केवल तीसरी आपको दोनों के लिए ज़िम्मेदार बनाती है।
राउंड ट्रिप गिनें, मेगाबाइट नहीं
एक एडिटर और एक इंडेक्सर बहुत सी छोटी फाइल क्रियाएँ जारी करते हैं, और फाइलसिस्टम दूरस्थ होने पर हर एक राउंड ट्रिप बन जाती है। इससे माउंट किया गया वर्कस्पेस विलंब के प्रति संवेदनशील हो जाता है, जैसे एक बड़ी कॉपी नहीं होती, इसीलिए फाइल ट्रांसफर का समय मापने से वर्कफ़्लो कैसा लगता है इस बारे में लगभग कुछ पता नहीं चलता। दूरस्थ डिस्प्ले का उल्टा प्रोफ़ाइल है: यह निरंतर स्ट्रीम ले जाता है और विलंब की तुलना में थ्रूपुट को बेहतर सहता है। दोनों की एक संख्या से तुलना करने पर आत्मविश्वासी गलत जवाब मिलता है।
कोई भी व्यवस्था स्वभाव से सबसे तेज़ नहीं है। सही चुनाव इस पर निर्भर करता है कि आप वास्तव में क्या काम करते हैं, इसीलिए अगला कदम बेंचमार्क नहीं, वही काम आज़माना है।
स्रोत हस्तांतरण को स्पष्ट बनाएँ
जब दोनों मशीनों के पास वर्क कॉपी हो, तय करें कि कौन-सी अधिकृत है और दूरस्थ बिल्ड ने कौन-सा संशोधन इस्तेमाल किया। एक कमिट दो टूलों द्वारा एक माउंट किए गए वर्क ट्री को संपादित करने से अधिक स्पष्ट हस्तांतरण है, क्योंकि कमिट की पहचान होती है और माउंट की नहीं। उत्पन्न आउटपुट और इंडेक्स डेटा को भी मालिक चाहिए, क्योंकि वे स्रोत से फिर बनते हैं और स्रोत की तरह यात्रा नहीं करने चाहिए। संघर्ष नियमों के बिना दो-तरफ़ा मिरर वर्कफ़्लो नहीं है, यह दौड़ है।
दूर से बिल्ड करने के लिए यह भी ज़रूरी है कि दूरस्थ होस्ट के पास सही टूलचेन हो और निजी निर्भरताओं के लिए क्रेडेंशियल। जो VPN आपको होस्ट तक पहुँचने देता है, वह आपके खाते की पहुँच उसे उधार नहीं देता, और वह वहाँ Xcode इंस्टॉल नहीं करता।
वर्कफ़्लो के लिए प्रतिबद्ध होने से पहले रास्ता जाँचें
दूरस्थ होस्ट के इर्द-गिर्द डिज़ाइन करने से पहले उसे सत्यापित करें, फिर उन क्रियाओं से लिंक मापें जो वर्कफ़्लो वास्तव में करेगा। नीचे दिए कमांड टूलचेन, सक्रिय डेवलपर डायरेक्टरी और फाइल-अवलोकन की लागत जाँचते हैं जो दूरस्थ वर्कस्पेस को कष्टदायक बनाती है। अंतिम को स्थानीय रूप से नहीं, नेटवर्क पथ पर चलाएँ।
xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain
पूर्ण Xcode इंस्टॉलेशन के बिना होस्ट xcodebuild से त्रुटि लौटाता है, और यह नेटवर्क नहीं बल्कि टूलचेन की समस्या है। डेवलपर डायरेक्टरी दिखाती है कि बिल्ड कौन-सा Xcode इस्तेमाल करेगा, और केवल कमांड-लाइन टूल की ओर इशारा करने वाला पथ इसका अर्थ है कि ऐप इंस्टॉल नहीं है। माउंट किए गए शेयर पर रिपॉज़िटरी स्टेटस कमांड का समय मापने से राउंड-ट्रिप लागत सीधे खुल जाती है, और स्थानीय रन से तुलना करने पर वह संख्या मिलती है जो मायने रखती है। अगर यह अंतर पहले से ही अप्रिय है, तो असली एडिटर के तहत माउंट-वर्कस्पेस वर्कफ़्लो और खराब होगा।
आपने कौन-सी व्यवस्था चुनी, कौन-सी मशीन स्रोत की मालिक है और हस्तांतरण कैसे काम करता है, यह दर्ज करें। वह नोट अगली ऑनबोर्डिंग या लैपटॉप बदली को जाँच के बजाय कॉन्फ़िगरेशन कार्य बना देता है।