Xcode 脚本 - 从构建设置中获取 Bundle ID 而不是 info.plist
Xcode Script - Get Bundle ID from build settings instead of info.plist
我正在使用 Receigen 进行 Apple 收据检查。
我在我的构建过程中集成了一个脚本,为我的项目生成适当的文件:
# 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
Xcode7 的问题在于这一行:
BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"`
因为新 Xcode 上的 BundleID 在构建设置上而不是 Info.plist 我相信构建设置上的关键是 $(PRODUCT_BUNDLE_IDENTIFIER)
有没有办法从脚本的构建设置中提取 Bundle Id?
我也遇到了同样的问题。这是解决它的方法。在脚本中,替换:
EXPANDED_BUNDLE_ID=eval "echo $BUNDLE_ID"
和
EXPANDED_BUNDLE_ID='com.foo.bar'
其中 com.foo.bar 是我的产品包标识符。这至少让 Receigen 可以编译,所以我可以继续工作。
您可以只使用 $PRODUCT_BUNDLE_IDENTIFIER
而不是硬编码包 ID:
EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER
(注意 PRODUCT_BUNDLE_IDENTIFIER
两边没有括号)。
然后您可以删除以 BUNDLE_ID=
开头的行,因为不再需要它。
非常简单:
BUNDLE_ID=xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER
回声$BUNDLE_ID
我正在使用 Receigen 进行 Apple 收据检查。 我在我的构建过程中集成了一个脚本,为我的项目生成适当的文件:
# 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
Xcode7 的问题在于这一行:
BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$INPUT"`
因为新 Xcode 上的 BundleID 在构建设置上而不是 Info.plist 我相信构建设置上的关键是 $(PRODUCT_BUNDLE_IDENTIFIER)
有没有办法从脚本的构建设置中提取 Bundle Id?
我也遇到了同样的问题。这是解决它的方法。在脚本中,替换:
EXPANDED_BUNDLE_ID=eval "echo $BUNDLE_ID"
和
EXPANDED_BUNDLE_ID='com.foo.bar'
其中 com.foo.bar 是我的产品包标识符。这至少让 Receigen 可以编译,所以我可以继续工作。
您可以只使用 $PRODUCT_BUNDLE_IDENTIFIER
而不是硬编码包 ID:
EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER
(注意 PRODUCT_BUNDLE_IDENTIFIER
两边没有括号)。
然后您可以删除以 BUNDLE_ID=
开头的行,因为不再需要它。
非常简单:
BUNDLE_ID=xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER
回声$BUNDLE_ID