问题
I'm using Receigen for Apple receipt checking. I have integrated a script on my build process that generates the appropriate files for my project:
# 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
The problem with Xcode 7 is with this line:
BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"`
Because the BundleID on the new Xcode is on the build settings instead of Info.plist I believe the key on the build settings is $(PRODUCT_BUNDLE_IDENTIFIER)
Is there a way to extract the Bundle Id from the build settings on the script ?
回答1:
You can just use the $PRODUCT_BUNDLE_IDENTIFIER
instead of hardcoding the bundle id:
EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER
(Note that there are no parentheses around PRODUCT_BUNDLE_IDENTIFIER
).
You can then delete the line that starts with BUNDLE_ID=
because it is no longer necessary.
回答2:
It's very easy :
BUNDLE_ID= xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER
echo $BUNDLE_ID
回答3:
I've got the same problem. Here's a way to work around it. In the script, replace:
EXPANDED_BUNDLE_ID=eval "echo $BUNDLE_ID"
with
EXPANDED_BUNDLE_ID='com.foo.bar'
where com.foo.bar is my product bundle identifier. This lets Receigen compile, at least, so I can keep working.
来源:https://stackoverflow.com/questions/32446065/xcode-script-get-bundle-id-from-build-settings-instead-of-info-plist