【问题标题】:Xcode Script - Get Bundle ID from build settings instead of info.plistXcode 脚本 - 从构建设置而不是 info.plist 获取 Bundle ID
【发布时间】:2015-09-07 21:09:25
【问题描述】:

我正在使用 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

Xcode 7 的问题在于这一行:

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" 失败了。
  • 尚未收到 Receigen 支持的答复。但我相信它是使用 Plistbuddy 工具从 info.plist 中提取 BundleID 的另一行。我们需要一种从构建设置中提取 BundleID 的方法。如果您找到方法,请告诉我。

标签: xcode receigen


【解决方案1】:

您可以只使用 $PRODUCT_BUNDLE_IDENTIFIER 而不是硬编码捆绑包 ID:

EXPANDED_BUNDLE_ID=$PRODUCT_BUNDLE_IDENTIFIER

(请注意,PRODUCT_BUNDLE_IDENTIFIER 周围没有括号)。

然后您可以删除以BUNDLE_ID= 开头的行,因为它不再需要。

【讨论】:

  • 成功了,谢谢!如果将其写在引号之间作为其他脚本语句会有所不同吗?例如:EXPANDED_BUNDLE_ID="$PRODUCT_BUNDLE_IDENTIFIER"
  • 引号防止空格,因此它们不是必需的,因为包标识符不应包含空格。不过,它会更符合其他带有空格的定义。
  • 我遇到了确切的问题。我的构建在这样的行上失败:CFStringRef InAppValidation_str1 = @obfuscateCF@("");但是这里的修复对我不起作用。谁有更多的提示?
  • 这不是正确的答案,因为如果你有一个像 f3nghuang.${PRODUCT_NAME:rfc1034identifier} 这样的包标识符 - 它不会工作!这仅适用于捆绑标识符被硬编码的简单情况。
【解决方案2】:

很简单:

BUNDLE_ID=xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER

回显 $BUNDLE_ID

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。这是一种解决方法。在脚本中,替换:

    EXPANDED_BUNDLE_ID=eval "echo $BUNDLE_ID"

    EXPANDED_BUNDLE_ID='com.foo.bar'

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

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 2019-04-08
      • 2018-06-04
      • 2015-10-07
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多