2011-03-24 17 views
18

मैं एक्सकोड 4 का उपयोग कर रहा हूं और मैंने रन योजना, एक बैश स्क्रिप्ट चलाने के लिए एक प्रीपेक्शन जोड़ा, लेकिन ऐसा लगता है कि एक्सकोड स्क्रिप्ट के बाहर निकलने की स्थिति को अनदेखा कर रहा है और हमेशा चल रहा है, भले ही निकास कोड शून्य न हो।क्या एक्सकोड के लिए यह सामान्य नहीं है कि प्री-एक्शन विफल हुआ है या नहीं?

क्या यह सामान्य है? एक कस्टम कदम जोड़ने के लिए मेरे पास कौन से विकल्प हैं, जो असफल हो सकता है?

अद्यतन: मैं भी एक ही परिणाम निर्माण के लिए के बाद कार्रवाई के लिए लेकिन साथ exit 1 की कोशिश की, हमेशा किसी भी प्रतिक्रिया के बिना क्रियान्वित।

मैं एक कस्टम कदम कैसे बना सकता हूं जो निर्माण को असफल के रूप में चिह्नित कर सकता है?

उत्तर

20

न केवल पूर्व-पोस्ट-एक्शन स्क्रिप्ट निकास स्थिति की परवाह नहीं है, लेकिन ऐसा लगता है कि आउटपुट को बिल्ड/रन लॉग में भी नहीं रखा जाता है। मुझे लगता है कि ऐप्पल के एक्सकोड 4 देव मंचों में दफन किए जाने के बारे में दो अलग-अलग धागे हैं। इस पर कोई शब्द नहीं है कि यह एक बग या सुविधा है या नहीं।

+7

यह बड़ा समय बेकार है। – sorin

+0

ditto - पूरी तरह से अस्वीकार्य बकवास – 010110110101

+0

रहें रहें। :-) –

3

आप xcodebuild (निकास कोड 70 के साथ) को समाप्त करने के लिए रन स्क्रिप्ट चरण में kill $PPID जैसे कुछ जोड़ सकते हैं।

+1

आप इसे एक-लाइनर के रूप में "जाल" के साथ भी जोड़ सकते हैं (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html देखें): जाल "$ PPID को मारें" ईआरआर –

+2

Xcodebuild के लिए एक अच्छा समाधान हो सकता है, लेकिन जागरूक रहें: यदि आप एक्सकोड में संकलित करते हैं, तो यह तुरंत एक्सकोड को मार देगा! – ishahak

0

एक्सकोड का उपयोग करते समय, kill $PPID कोई समाधान नहीं है, क्योंकि मैं फ़ारकेलर पर टिप्पणी कर रहा था।

मेरे समाधान पूर्व कार्रवाई स्क्रिप्ट एक हेडर फाइल (जैसे SchemePreActions.h) पैदा करते हैं और यह सामान्य स्थिति के लिए खाली कर, और यह आपके कोड (जैसे में AppDelegate.m) में शामिल है।

इस तरह, यदि आप पहले से कार्रवाई स्क्रिप्ट एक त्रुटि रिपोर्ट करना चाहते हैं, वहाँ एक #error लाइन, इस वास्तविक दुनिया उदाहरण में डाल की तरह:

if [ $CONFIGURATION == Debug ]; then 
    echo "#error AppStore builds must not be in debug configuration" >> SchemePreActions.h 
fi 

Xcode बहुत अच्छी तरह से इस त्रुटि को रिपोर्ट करेंगे।

यह अनुशंसित है कि उत्पन्न फ़ाइल को गिट द्वारा अनदेखा किया जाए। ,

echo "//auto-generated. no need to commit"  > SchemePreActions.h 
echo "#define SCHEME_${SCHEME_NAME}"   >> SchemePreActions.h 
echo "#define SCHEME_NAME @\"${SCHEME_NAME}\"" >> SchemePreActions.h 
if [[ ${SCHEME_NAME} =~ "_PROD" ]]; then 
    echo "#define PRODUCTION"     >> SchemePreActions.h 
fi 

इस तरह SchemePreActions.h शामिल करके, मेरे कोड को देखने के लिए परीक्षण कर सकते हैं:


एक टिप मैं जोड़ना होगा जैसा कि मेरे पूर्व कार्रवाई स्क्रिप्ट हमेशा इन पंक्तियों के साथ शुरू होता है कि यदि एक विशिष्ट योजना के तहत चल रहा है।

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