Xcode脚本-从生成设置而不是info.plist获取捆绑包ID

Xcode脚本-从生成设置而不是info.plist获取捆绑包ID,xcode,receigen,Xcode,Receigen,我正在用Receigen检查苹果的收据。 我已在构建过程中集成了一个脚本,该脚本可为我的项目生成适当的文件: # Receigen binary RECEIGEN="/Applications/Receigen.app/Contents/MacOS/Receigen" # Extract Info.plist information INPUT="$INFOPLIST_FILE" BUNDLE_ID=`/usr/libexec/PlistBuddy -c "Print CFBundle

我正在用Receigen检查苹果的收据。 我已在构建过程中集成了一个脚本,该脚本可为我的项目生成适当的文件:

    # 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\u BUNDLE\u IDENTIFIER)


有没有办法从脚本的构建设置中提取捆绑包Id?

我也有同样的问题。这里有一个解决方法。在脚本中,替换:

EXPANDED\u BUNDLE\u ID=eval“echo$BUNDLE\u ID”

EXPANDED\u BUNDLE\u ID='com.foo.bar'


其中com.foo.bar是我的产品包标识符。这至少可以让Receigen进行编译,这样我就可以继续工作。

您可以使用
$PRODUCT\u BUNDLE\u标识符
而不是硬编码BUNDLE id:

EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER
(请注意,
产品\u捆绑包\u标识符
周围没有括号)

然后,您可以删除以
BUNDLE\u ID=
开头的行,因为它不再是必需的。

非常简单:

BUNDLE_ID=
xcodebuild-showBuildSettings | grep产品_BUNDLE_标识符


echo$BUNDLE\u ID

我也看到了这一点-您找到解决方案了吗?我相信是扩展的\u BUNDLE\u ID=
eval“echo$BUNDLE\u ID”
失败了。尚未从Receigen支持部门获得答案。但我相信这是另一行,它使用Plistbuddy工具从info.plist中提取BundleID。我们需要一种从构建设置中提取BundleID的方法。如果你有办法,请告诉我。那很有效,谢谢!如果您将它作为其他脚本语句在引号之间编写,会有区别吗?例如:EXPANDED_BUNDLE_ID=“$PRODUCT_BUNDLE_IDENTIFIER”引号保护不使用空格,因此它们不应该是必需的,因为BUNDLE标识符不应该包含空格。不过,这会更符合空间的其他定义。我有一个确切的问题。我的构建在这样一行中失败:CFStringRef InAppValidation_str1=@obfuscateCF@(“”);但是这里的修正对我不起作用。有人有更多的提示吗?这不是正确的答案,因为如果您有像f3nghuang这样的bundle标识符。${PRODUCT_NAME:rfc1034identifier}-它将不起作用!。这仅适用于捆绑标识硬编码的简单情况。