2015-09-07 3 views
6

के बजाय बिल्ड सेटिंग्स से बंडल आईडी प्राप्त करें मैं ऐप्पल रसीद जांच के लिए रिसीजन का उपयोग कर रहा हूं। मुझे लगता है कि अपने प्रोजेक्ट के लिए उपयुक्त फ़ाइलें उत्पन्न करता है अपने निर्माण की प्रक्रिया पर एक स्क्रिप्ट को एकीकृत किया है:एक्सकोड स्क्रिप्ट - info.plist

# Receigen binary 
RECEIGEN="/Applications/Receigen.app/Contents/MacOS/Receigen" 

# Extract Info.plist information 
INPUT="$INFOPLIST_FILE" 
BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"` 
BUNDLE_VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INPUT"` 

# Expand information if needed 
EXPANDED_BUNDLE_ID=`eval "echo $BUNDLE_ID"` 
EXPANDED_BUNDLE_VERSION=`eval "echo $BUNDLE_VERSION"` 

# Make sure the destination directory exists 
mkdir -p "$DERIVED_FILES_DIR" 
HEADER="$DERIVED_FILES_DIR/receiptCheck.h" 

# Check if the generation is needed 
if [ -e "$HEADER" ]; then 
SKIP=`grep -q "$EXPANDED_BUNDLE_ID" "$HEADER" && grep -q "$EXPANDED_BUNDLE_VERSION" "$HEADER" && echo "YES"` 
fi 

# Generate the header file if needed 
if [ "x$SKIP" = "x" ]; then 
"$RECEIGEN" --identifier "$EXPANDED_BUNDLE_ID" --version "$EXPANDED_BUNDLE_VERSION" --failure 'exitwith173' --success 'runapplication' --os osx > "$HEADER" 
fi 

Xcode 7 के साथ समस्या यह लाइन के साथ है:

BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"` 

क्योंकि नए Xcode पर BundleID Info.plist के बजाय बिल्ड सेटिंग्स पर है मेरा मानना ​​है कि बिल्ड सेटिंग्स पर कुंजी $ (PRODUCT_BUNDLE_IDENTIFIER)

क्या स्क्रिप्ट पर बिल्ड सेटिंग्स से बंडल आईडी निकालने का कोई तरीका है?

+0

मैं यह भी दिखाई दे रही है - आप एक समाधान मिला? मेरा मानना ​​है कि यह EXPANDED_BUNDLE_ID = 'eval" echo $ BUNDLE_ID है "जो असफल रहा है। – Scotty

+0

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

उत्तर

3

तुम बस के बजाय बंडल आईडी हार्डकोड की $PRODUCT_BUNDLE_IDENTIFIER उपयोग कर सकते हैं:

EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER 

(ध्यान दें कि ऐसे PRODUCT_BUNDLE_IDENTIFIER आसपास कोई कोष्ठकों हैं कि)।

फिर आप BUNDLE_ID= से शुरू होने वाली रेखा को हटा सकते हैं क्योंकि यह अब आवश्यक नहीं है।

+0

यह काम करता है धन्यवाद! यदि आप उद्धरण के बीच अन्य स्क्रिप्ट बयान के रूप में लिखते हैं तो क्या इससे कोई फर्क पड़ता है? पूर्व .: EXPANDED_BUNDLE_ID = "$ PRODUCT_BUNDLE_IDENTIFIER" –

+1

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

+0

मुझे सही समस्या है। मेरा निर्माण इस तरह की रेखा पर असफल रहा है: CFStringRef InAppValidation_str1 = @ obfuscateCF @ (""); लेकिन यहां ठीक है मेरे लिए काम नहीं कर रहा है। किसी के पास कोई और सुझाव है? –

0

मुझे एक ही समस्या है। यहां इसके आसपास काम करने का एक तरीका है। स्क्रिप्ट में, बदल देते हैं:

EXPANDED_BUNDLE_ID=eval "echo $BUNDLE_ID"

साथ

EXPANDED_BUNDLE_ID='com.foo.bar'

जहां com.foo.bar अपने उत्पाद बंडल पहचानकर्ता है। यह कम से कम, रिसीजन संकलन देता है, इसलिए मैं काम कर सकता हूं।

0

यह बहुत आसान है:

BUNDLE_ID = xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER

गूंज $ BUNDLE_ID

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