我希望编写一个脚本,可以从应用程序的 Info.plist 中读取 Bundle Identifier 或版本号等信息。Xcode 在其环境变量中似乎没有提供这些信息。有没有其他方法可以在 sh/bash 中获取它们?
我希望编写一个脚本,可以从应用程序的 Info.plist 中读取 Bundle Identifier 或版本号等信息。Xcode 在其环境变量中似乎没有提供这些信息。有没有其他方法可以在 sh/bash 中获取它们?
defaults
命令可以读写任何 plist 文件,只需给出不带 .plist
扩展名的路径即可:
$ defaults read /Applications/Preview.app/Contents/Info CFBundleIdentifier
com.apple.Preview
这会直接从应用程序包的 Info.plist
文件中提取 CFBundleIdentifier
值。
Defaults 还可以轻松处理二进制 plist,无需额外步骤。
使用苹果公司的应用程序PlistBuddy,可以像这样将字符串分配给变量:
#!/bin/sh
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${BUILD_ROOT}/${INFOPLIST_PATH}")
如果您在“运行脚本”构建阶段中运行此脚本,则BUILD_ROOT和INFOPLIST_PATH是由Xcode设置的变量。
/usr/libexec/PlistBuddy -c 'print ":CFBundleIdentifier"' Info.plist
您可以直接从构建产品中读取文件。但是,如果在编辑器中查看info.plist文件本身,您将看到shell变量本身。例如,Bundle ID具有以下shell命令:
com.yourcompany.${PRODUCT_NAME:rfc1034identifier}
${PRODUCT_NAME:rfc1034identifier}
,它应该会填充相应内容。在Mac上有一个命令行程序叫做PlistBuddy,它可以读取/写入plist中的值。在终端中键入“man PlistBuddy”以获取更多信息。
BUNDLEID=$(defaults read $(dirname $PWD)/Info CFBundleIdentifier)
。原因是 Info.plist 文件在 Resources 文件夹的上一级目录中。 - Volomikeman defaults
在 10.12 版本中提醒:警告:defaults 命令在未来的主要版本中将仅操作偏好设置域。一般的 plist 操作工具将被整合到另一个命令行程序中。 - Ben Lings