2013-04-18 8 views
7

प्रश्न - लघु संस्करण:कमांड लाइन से आईपीए बनाते समय मेरी बिल्ड चरण स्क्रिप्ट निष्पादित क्यों नहीं की जाएंगी?

क्यों अपने निर्माण कमांड लाइन से एक आईपीए बनाते समय क्रियान्वित किया जा phase scripts नहीं होगा? जब मैं आईपीए बनाने के लिए xcodebuild चला रहा हूं तो पूर्व निर्धारित चरण चरण स्क्रिप्ट निष्पादित नहीं किया जाता है। ऐसा क्यों है?


प्रश्न - लंबा संस्करण:

मैं एक योजना मैं कमांड लाइन से एक आईपीए से बाहर बनाना चाहते हैं के साथ एक कार्यक्षेत्र है।

यह एक चीज़ को छोड़कर ठीक काम करता है; मेरे पास लक्ष्य के निर्माण चरणों में दो स्क्रिप्ट हैं जिनका उपयोग सही ऐप संस्करण (CFBundleShortVersionString) और सही svn संशोधन संख्या (CFBundleVersion) डालने के लिए किया जाता है। स्क्रिप्ट के लिए यह xcode से संग्रह करते समय ठीक काम करता है लेकिन किसी कारण से वे कमांड लाइन से संग्रह करते समय दौड़ नहीं पाते हैं। सबसे पहले वह क्यों है?

यहाँ स्क्रिप्ट है कि काम कर रहे हैं कर रहे हैं (यदि संग्रह प्रपत्र Xcode) enter image description here enter image description here

जब संग्रह और कमांड लाइन मैं करता हूँ (अनिवार्य) से आईपीए बनाने

# Building 
xcodebuild ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release clean build 

# Creating IPA 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${PROJECT_BUILD_DIR}/${APPLICATION_NAME}.app" -o "${IPA_OUTPUT_PATH}/${APPLICATION_NAME}.ipa" 

यह काम करता है और एक आईपीए बनाता है लेकिन बिल्ड चरण स्क्रिप्ट्स में से कोई भी संशोधन संख्या और संस्करण संख्या दोनों को छोड़कर निष्पादित हो जाता है।

सभी सुझावों की सराहना की जाती है!

अद्यतन BDASH के जवाब के कारण

इसके बजाय एक साफ निर्माण बनाने का मैं एक पूर्वनिर्धारित स्क्रिप्ट

xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 

के रूप में तथ्य में निष्पादित किया जाएगा (परियोजना संस्करण संख्या में देखा जा सकता स्थापित करना) स्थापित करने के दौरान कोई त्रुटि के साथ। हालांकि बनाए गए आईपीए का आकार ~ 300 बाइट्स (~ 10 एमबी के बजाय) होगा और डिवाइस पर इंस्टॉल नहीं किया जा सकता है।

यह स्थापित करने से पहले एप्लिकेशन बिल्डिंग, अर्थात

# Building 
xcodebuild clean build ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 
# Installing 
xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 

और फिर बनाने आईपीए निष्पादित संस्करण स्क्रिप्ट के साथ एक आईपीए में और सही आकार लेकिन की यह एक डिवाइस पर स्थापित संभव नहीं है परिणाम देगा। इसे किसी डिवाइस पर डालने का प्रयास करने से त्रुटि संदेश मिलेगा
"प्रोग्राम" MyApp "आपके लिए आईफोन डिवाइस" माई डिवाइस "पर स्थापित नहीं था क्योंकि एक अज्ञात त्रुटि आई है।"

+0

मुझे लगता है कि यदि आप कमांडलाइन से निर्माण कर रहे हैं, तो 'xcodebuild' यह भी मानता है कि आप स्वयं स्क्रिप्ट निष्पादित कर रहे हैं। मुझे एक बग की तरह लगता है। –

+0

क्या आप वास्तव में अंततः समाधान प्राप्त करते थे? – fatuhoku

उत्तर

2

आपके पास "स्क्रिप्ट चरणों में से केवल एक के लिए चेक किया गया" केवल "स्क्रिप्ट चलाएं" है। उस चरण को build एक्शन xcodebuild पर उपयोग करते समय नहीं चलाया जाएगा, केवल install क्रिया का उपयोग करते समय।

+0

आपके उत्तर के परिणाम से मेरा प्रश्न अपडेट किया गया। – Groot

+0

जब आप 'इंस्टॉल' एक्शन का उपयोग करते हैं, तो निर्मित उत्पाद 'DSTROOT' कॉन्फ़िगरेशन सेटिंग द्वारा निर्दिष्ट निर्देशिका में स्थापित होता है। यह '/ tmp/ProjectName.dst' तक डिफ़ॉल्ट है जब तक कि आप इसे' xcodebuild' कमांड लाइन पर ओवरराइड न करें। शुरुआत में पूछे जाने पर आपके प्रश्न के साथ इसका बहुत कुछ नहीं है। – bdash

+0

आपकी मदद के लिए धन्यवाद bdash! मैं कमांड लाइन से निर्देशिका को ओवरराइड कर रहा हूं जिसमें 'बिल्ड' और 'इंस्टॉल' दोनों एक ही निर्देशिका में रखे गए हैं। आप सही हैं कि यह मूल प्रश्न से थोड़ा विचलित हो जाता है लेकिन तथ्य यह है कि पहली ओम मेरी स्क्रिप्ट निष्पादित नहीं होती है। – Groot

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