2010-12-01 325 views

回答

40

defaults命令可以读/写任何plist文件,只是给它一个路径减去.plist扩展:

$ defaults read /Applications/Preview.app/Contents/Info CFBundleIdentifier 

com.apple.Preview 

这直接从应用程序包的Info.plist文件拉CFBundleIdentifier值。

默认也适用于二进制plists没有任何额外的步骤。

+3

这是更好的答案(尤其是PlistBuddy不再默认安装);你应该选择它。 – Olie 2014-09-22 17:34:03

4

您可以直接从构建的产品中读取文件。但是,如果您在编辑器中查看info.plist文件本身,您将看到shell变量本身。例如。该包ID是具有以下shell命令:

com.yourcompany.${PRODUCT_NAME:rfc1034identifier} 

可以调用在Xcode中运行的任何shell脚本${PRODUCT_NAME:rfc1034identifier},它应该填充。

+0

虽然我没有测试过,但这听起来不错。缺点是你不回收捆绑ID,但只是它的最后一部分,所以你将不得不在硬编码“com.mycompanyname”部分... – Dimitris 2010-12-02 01:33:23

3

在Mac上安装了一个名为PlistBuddy的命令行程序,可以在plist中读取/写入值。在终端输入'man PlistBuddy'以获取更多信息。

+0

我已经尝试PlistBuddy并玩了很多。问题是PlistBuddy可以打印捆绑ID但不返回它(它只返回0或1)。所以作为一个shell noob我有一些麻烦让分配给一个变量。不过,我是如何设法使其发挥作用的。我现在会发布我的答案。 – Dimitris 2010-12-02 01:35:09

33

使用PlistBuddy,通过苹果的应用程序,可以指定字符串VAR是这样的:

#!/bin/sh 
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${BUILD_ROOT}/${INFOPLIST_PATH}") 

凡BUILD_ROOT和INFOPLIST_PATH的变量通过Xcode的设定,如果你运行一个“运行脚本”这个剧本建立阶段。

+1

PlistBuddy并不总是存在于系统中。如果您分发脚本,您可以考虑使用默认值,因为其他答案指出。 – 2014-12-23 22:44:30