2012-08-15 10 views
26

सेट करना मैं वर्कस्पेस में एक बहु-प्रोजेक्ट प्रोजेक्ट बनाने के लिए xcodebuild का उपयोग करने का प्रयास कर रहा हूं। जब एक्सकोड एक वर्कस्पेस बनाता है तो यह स्वचालित रूप से सभी निर्मित कलाकृतियों को DerivedData में एक सामान्य निर्देशिका में रखता है ताकि प्रत्येक प्रोजेक्ट इसकी निर्भरताओं तक पहुंच सके।एक वर्कस्पेस को एक्सकोडबिल्ड करना और कस्टम बिल्ड पथ

अगर मैं इस आदेश का उपयोग करें:

xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release 

eveything काम करता है, लेकिन हमेशा की तरह कलाकृतियों व्युत्पन्न डेटा निर्देशिका में रखा जाता है। मैं फिर एक विशिष्ट निर्देशिका में दिखाना चाहता हूं जिसे मैं सीआई बिल्ड से एक्सेस कर सकता हूं। इसलिए मैं करने की कोशिश की इस

xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release SYMROOT=build/products OBJROOT=build/intermediates 

हालांकि xcodebuild यह कह

Details: Failed to load dependencies output contents from ``/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d''. 
Error: Error Domain=NSCocoaErrorDomain Code=260 "The file “DNRootSelector.d” couldn’t be opened because there is no such file." 
UserInfo=0x4012fea40 {NSFilePath=/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d, NSUnderlyingError=0x4012fc240 "The operation couldn’t be completed. No such file or directory"}. 
User info: { 
    NSFilePath = "/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d"; 
    NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be completed. No such file or directory\""; 
} 

समस्या यह है कि xcodebuild नहीं रह कार्यक्षेत्र में सभी परियोजनाओं के लिए एक केंद्रीय निर्देशिका उपयोग कर रहा है प्रतीत होता है के साथ विफल रहता है और में कलाकृतियों भंडारण है इसके बजाय प्रत्येक परियोजना। इसलिए यह अन्य परियोजनाओं में उत्पादित संकलित और कलाकृतियों के बीच निर्भरताओं का पता नहीं लगा सकता है।

क्या कोई भी कमांड लाइन पर सेट करने के लिए सही पैरामीटर जानता है?

एक्सकोड बिल्ड बिल्डिंग संदर्भ दो साल तक अपडेट नहीं किया गया है, इसलिए मुझे नहीं पता कि नई बिल्ड सेटिंग्स क्या लागू हो सकती हैं।

उत्तर

32

मुझे यकीन है कि अगर यह एक नया विकल्प है लेकिन xcodebuild की 5.0 रिलीज एक विकल्प -derivedDataPath जो आप निर्देशिका आप सभी का निर्माण उत्पादों में बैठने के लिए करना चाहते हैं निर्दिष्ट करने के लिए अनुमति देता है नहीं कर रहा हूँ।

उदाहरण के लिए , -derivedDataPath build गुजरने से build फ़ोल्डर बनाता है जहां से आप xcodebuild से भाग गए थे, और आप build/Build/Products/Release-iphoneos जैसे सबफ़ोल्डर में अनुमान लगा सकते हैं।

प्रलेखन: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

+0

इसे स्वीकृत उत्तर के रूप में सेट करना क्योंकि एक्सकोड 5 हैंडल कमांड लाइन बहुत बेहतर बनाता है। – drekka

+1

मैं CONFIGURATION_BUILD_DIR = "$ वर्कस्पेस/बिल्ड" OBJROOT = "$ वर्कस्पेस/बिल्ड" SYMROOT = $ वर्कस्पेस/बिल्ड DSTROOT = $ वर्कस्पेस/बिल्ड-डिस्टिनेशन के निर्माण के लिए उपयोग कर रहा था -डिटेड डेटापाथ मैंने यादृच्छिक मुद्दों को ठीक कर दिया था। – StackRunner

18

अब तक का सबसे अच्छा समाधान है जो CONFIGURATION_BUILD_DIR पैरामीटर का उपयोग ABSOLUTE पथ (उदा।/Tmp/$ प्रोजेक्ट/बिल्ड) के साथ करना है। इस तरह:

xcodebuild -scheme "scheme" -configuration Debug -sdk iphoneos clean build CONFIGURATION_BUILD_DIR=$ABSOLUTE_BUILD_PATH 

मैं जेनकींस का उपयोग करें और वहाँ मैं एक चर $WORKSPACE नामित किया है। $WORKSPACE/build के साथ मेरे CONFIGURATION_BUILD_DIR के रूप में मेरे पास एक समाधान है जिसे मैं खुश हूं।

सापेक्ष पथ अपेक्षा के अनुसार काम नहीं करते हैं। हमें एक बग रिपोर्ट दर्ज करनी चाहिए।

+1

मुझे एक ही चीज़ मिल गई है। मुख्य परियोजना के लिए एक सापेक्ष पथ के साथ BUILD_DIR या CONFIGURATION_BUILD_DIR सेट करना, लेकिन उपप्रोजेक्ट गलत स्थान पर जाते हैं। पूर्ण पथ का उपयोग करना हल करता है। पारितोषिक के लिए धन्यवाद। – Stew

+0

तुम मेरे नायक हो! – David

5

जब मैं जेनकिंस सीआई उपकरण से अपनी परियोजना का निर्माण करता हूं तो मुझे यह समस्या भी मिली। मेरा मुख्य प्रोजेक्ट एक सब-प्रोजेक्ट पर निर्भर करता है। मैं कोशिश की है इमारत का पालन @ Chilloutman समाधान इस तरह:

xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build BUILD_DIR =/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build 

या

xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build 

उन दोनों त्रुटियों Could not find iphoneos in /Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build

होते हैं लेकिन मैं अंत में इस का उपयोग करते हुए सफलता मिलती है:

xcodebuild -target TravelGuideMdd -sdk iphoneos6.1 -configuration DailyBuild clean build SYMROOT=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build 

यह है: एक पूर्ण पथ के साथ SYMROOT सेट करना।

+1

बहुत बहुत धन्यवाद, इसने मेरे लिए यह मुद्दा भी तय किया है (यदि यह दूसरों के लिए काम नहीं कर रहा है, तो मैं इसे तब तक काम नहीं कर सका जब तक मैंने देखा कि इस संस्करण में, SYMROOT को किसी अन्य BUILD_DIR या CONFIGURATION_BUILD_DIR तर्कों के बिना _without_ का उपयोग करना होगा)। मुझे लगता है कि चिह्नित सही उत्तर एक्सकोड 5 के व्यवहार पर लागू नहीं हो सकता है। – Halle

-1

मैं एक ऐसी ही समस्या थी, और यह स्थानीय स्तर पर नहीं बल्कि निर्माण मशीन पर काम किया। बाहर निकला मैं बिल्ड मशीन पर गिट सबमिशन को init करने के लिए भूल गया। उम्मीद है कि यह किसी की मदद करता है।

संबंधित मुद्दे