2011-05-27 14 views
13

जहां तक ​​मैं कह सकता हूं, जिस क्षण मैं अपनी किसी भी परियोजना को सिम्युलेटर से डिवाइस बिल्ड कॉन्फ़िगरेशन में स्विच करता हूं, बिल्ड अब वितरित नहीं होता है, बल्कि स्थानीय रूप से बनाया जाता है।क्या आईफोन डिवाइस बनाने के लिए distcc का उपयोग करना संभव है?

तो, क्या एक्सकोड को डिवाइस निर्माण के लिए वितरित भवन तंत्र का उपयोग करने के लिए एक्सकोड प्राप्त करने में कोई भी जादू शामिल है? किसी के पास इस पर एक निश्चित शब्द है या यहां तक ​​कि कुछ हाथों पर अनुभव भी है?

कृपया वितरित बिल्ड और एक्सकोड के विषय को समझने तक नीचे या बंद न करें। यह वितरण के लिए हस्ताक्षर करने के बारे में कोई नोबई सवाल नहीं है।

+0

मैं आलोचना नहीं कर रहा हूं, लेकिन क्या कोई असली कारण है कि आप निर्माण को वितरित करना चाहते हैं? क्या परियोजना बहुत बड़ी है और एक मशीन पर निर्माण करने में काफी समय लगता है? – Jasarien

+0

@Jasarien http://stackoverflow.com/questions/6136719/can-iphone-device-builds-be-built-using-distcc-for-distributed-builds –

+0

@Jasarien, कि प्रश्न में मेरी नवीनतम टिप्पणी देखें। हाँ, यह मायने रखता है। एक पूर्ण पुनर्निर्माण (और ये असामान्य नहीं हैं) आधे घंटे तक लग सकते हैं। –

उत्तर

8

हम यह भी पाया है कि Xcode 3.2.5 डिवाइस बनाता है वितरित नहीं करता है, जबकि सिम्युलेटर बनाता है के तहत Xcode प्राथमिकताएं सभी आवश्यक विकल्प सेट करने के बावजूद, distcc के साथ ठीक से वितरित कर रहे हैं -> वितरित बनाता

हालांकि, एक्सकोड की सीमा को काम करना संभव है और इसे डिवाइस बिल्डों को वितरित करने के लिए मजबूर करना भी संभव है। यह ऐप्पल के हिस्से पर एक निरीक्षण (बग!) जैसा दिखता है कि उन्होंने डिफ़ॉल्ट रूप से डिवाइस वितरित बिल्ड को सक्षम नहीं किया है।

कदम उठाने की जरूरत है इस प्रकार हैं:

  • Xcode उपयोगकर्ता डिफ़ॉल्ट PBXNumberOfParallelBuildSubtasks का मूल्य बढ़ाएँ। यह सीपीयू कोर की संख्या के समानांतर बिल्ड कार्यों और डिफ़ॉल्ट की अधिकतम संख्या को सीमित करता है (विवरण के लिए ऐप्पल का अपना एक्सकोड उपयोगकर्ता डिफ़ॉल्ट संदर्भ दस्तावेज़ देखें)। मैं इसे 2 से 16 की वृद्धि हुई, इस प्रकार है:

    write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 16 या Xcode 4.2 defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 16 के लिए

  • प्रभावी करने के लिए ऊपर बदलाव के लिए Xcode फिर से शुरू करने के लिए सुनिश्चित करें।

  • आप DISTCC_HOSTS वातावरण चर distcc आदमी पेज में दिए गए विवरण के रूप में की अपनी मान सेट करने की आवश्यकता होगी।

  • ऐसा करने के लिए, आप अपने खुद /Developer/usr/bin/distcc स्क्रिप्ट के भीतर से DISTCC_HOSTS सेट करना होगा (जो तब जो आप कुछ और करने के लिए नाम बदलने के मूल /Developer/usr/bin/distcc द्विआधारी, कॉल)। ध्यान दें कि प्रत्येक संकलन इकाई के लिए एक्सकोड /Developer/usr/bin/distcc पर कॉल करता है और प्रत्येक कॉल से पहले DISTCC_HOSTS सेट करता है, इसलिए आपको Xcode को ओवरराइड करने के लिए इस मास्करेड स्क्रिप्ट का उपयोग करने की आवश्यकता है।

  • मेरा अपना distcc स्क्रिप्ट बस इस प्रकार है (और मैं distcc.orig करने के लिए मूल distcc द्विआधारी का नाम बदला):

    #!/bin/sh 
    export DISTCC_HOSTS="--randomize your list of hosts, each followed by ',cpp,lzo'" 
    /Developer/usr/bin/distcc.orig "[email protected]" 
    exit $? 
    

बहुत सारे विकल्प DISTCC_HOSTS में बदलाव करने, विशेष रूप से का उपयोग कर रहे हैं के विषय में अपने स्वयं के लोकहोस्ट को खेती के बजाय कुछ संकलन करने के लिए कुछ भी करना है, लेकिन उपर्युक्त कम से कम आपको शुरू करना चाहिए। आपके लिए सबसे अच्छा क्या काम करता है जाहिर है आपके मैक हार्डवेयर और नेटवर्क प्रदर्शन पर निर्भर करता है।

मेरे अपने अनुभव में, एक वितरित बिल्ड सर्वर सेटअप का उपयोग करके, कुछ क्वाड-कोर मैक के साथ-साथ अपेक्षाकृत धीमी नेटवर्क पर अपने स्वयं के दोहरे कोर मैक के साथ पूर्ण डिवाइस को फिर से निर्माण करने में लगभग 15 मिनट के बारे में 5.

+1

प्रिय उपयोगकर्ता 776140, यह आश्चर्यजनक है, यह काम करता है! एक मामूली नोट, मुझे रिक्त स्थान के साथ तर्कों को सही तरीके से उद्धृत करने के लिए $ * से "$ @" (उद्धरण के साथ) को बदलना पड़ा। संदर्भ के लिए, मेरा DISTCC_HOSTS अब ऐसा लगता है: 'DISTCC_HOSTS निर्यात करें =" - यादृच्छिक मशीन 1.local, cpp, lzo machine2.local, cpp, lzo "' (और वास्तव में कुछ और मशीनें)। आपकी परियोजना पर शुभकामनाएं, यह दिलचस्प लगता है। –

+0

ऐसा लगता है कि यह xcode 4 पर काम नहीं करता है। क्या कोई पुष्टि कर सकता है? – pqnet

0

मैं इसे डुप्लिकेट के रूप में चिह्नित करने वाला था जब मुझे एहसास हुआ कि पिछले प्रश्न को वास्तविक प्रश्न न होने के कारण बंद कर दिया गया था।

मुझे distcc के साथ कोई अनुभव नहीं है, लेकिन मुझे पता है कि समस्या क्या हो सकती है। सिम्युलेटर बिल्ड के विरोध में डिवाइस निर्माण पर हस्ताक्षर करने की आवश्यकता है। मुझे लगता है कि समस्या यह हो सकती है कि हस्ताक्षर केवल स्थानीय रूप से हो सकता है या एक्सकोड दूरस्थ रूप से निर्मित किसी भी चीज़ पर हस्ताक्षर करने से इंकार कर देता है।

एक और संभावना यह है कि आपने केवल सिम्युलेटर के निर्माण के लिए distcc कॉन्फ़िगरेशन किया है और डिवाइस नहीं बनाता है।

+1

सभी पूर्व और बाद संकलन चरणों (जैसे एनआईबी संकलन, लिंकिंग) हमेशा स्थानीय रूप से प्रदर्शन किए जाते हैं। उन चरणों में हस्ताक्षर शामिल हैं, इसलिए यह कोई समस्या नहीं होनी चाहिए। –

+0

@Steven क्या आप वाकई डिवाइस के लिए संकलन करते समय distcc के साथ संकलित कर रहे हैं? शायद आपने केवल सिम्युलेटर के लिए distcc कॉन्फ़िगर किया है? –

1

लिए मैं वास्तव में वितरण बनाता है के लिए एक नेटवर्क पर मशीनों के समूहों का प्रबंधन करने के लिए एक उपकरण के लिए लिखा था। इसमें PBXNumberOfParallelBuildSubtasks सेटिंग (XCode 3.x + 4.x के बीच अलग) सेट करने के लिए समर्थन शामिल है। यह एक्सकोड स्थापित करने के लिए w/o बिल्ड समर्थन मशीनों का भी काम करता है। मैंने इसे आंशिक रूप से भयानक वितरित बिल्ड गति के कारण किया जो हम एक्सकोड के साथ प्राप्त कर रहे थे। हम पिछले वर्ष के लिए काम पर इसका उपयोग कर रहे हैं ~ 50-100 उपलब्ध सीपीयू समवर्ती एंड्रॉइड/आईओएस/डेस्कटॉप बिल्ड के लिए और गति शानदार है! SourceForge साइट यहां है: http://sourceforge.net/projects/distccmanager

मैं इसे क्रॉस प्लेटफॉर्म संकलन का समर्थन (बनाता है android के साथ मदद करने यानी खिड़कियां + मैक मशीनों) की अनुमति के लिए कल्पना की।

कोई योगदान स्वागत है!