xcode中的Bash脚本返回Shell脚本调用错误

时间:2012-07-09 01:58:59

标签: xcode shell build

我有这个脚本自动增加每个构建的内部版本号:

#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $INFOPLIST_FILE)
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" $INFOPLIST_FILE

我将它插入“复制包资源”之前的构建阶段。首先,在Shell Field中我保留了默认的/ bin / sh,但它给了我一个Shell Script Invocation Error的说法:

Command /bin/sh failed with exit code 1

所以我查找了该怎么做,我发现将Shell更改为/bin/bash可以修复它。我这样做了,我仍然有同样的错误。它仍然告诉我Command /bin/sh failed with exit code 1。为什么它仍然告诉我,如果它不再存在,/ bin / sh会出错?

4 个答案:

答案 0 :(得分:3)

我知道这个问题超过一年半,但在搜索此问题时,此问题出现在搜索结果的顶部。我找到了一个我想分享的不同修补程序:

以下是使用plistbuddy脚本时收到的错误详细信息(我假设这也是OP看到的相同错误)。

Set: Entry, ":CFBundleBuildVersionString", Does Not Exist
File Doesn't Exist, Will Create: /Users/*YourFilePathHere/YourAppName*.app/Info.plist
Set: Entry, ":CFBundleBuildDateVersionString", Does Not Exist
Command /bin/sh failed with exit code 1

Screenshot Command bin sh failed with exit code 1 error

我尝试clean并删除Derived Data但没有成功。事实证明,实际的解决方案非常简单。我发现在build期间,脚本试图在Xcode实际生成plist之前将生成的值添加到plist

Screenshot Target Build Phases

Targets > Build Phases > Extra Version Data是否已运行此脚本。 但Targets > Build Phases > Copy Bundle Resources是生成plist的地方。

Screenshot Target Build Phases

点击并拖动Extra Version Data,使其在Copy Bundle Resources之后列出,因此,在脚本尝试添加生成的值之前构建plist

Screenshot Target Build Phases Corrected

然后build并以啤酒欢喜。

(使用Xcode 5.1)

答案 1 :(得分:0)

我刚遇到这个问题,发现我的INFOPLIST_FILE文件名中有一个空格,因为创建了一个新目标,而XCode附加了后缀'copy'。似乎PlistBuddy无法像创建此脚本那样处理该空间。

在没有空格的情况下重命名文件并更新名称以在构建设置中匹配时,此错误消失了。

答案 2 :(得分:0)

在我的Xcode项目中使用新的Fabric Cocoapod后,我遇到了类似的问题。

我必须从以下位置更改Fabric脚本: ${PODS_ROOT}/Fabric/Fabric.framework/run ... 至: "${PODS_ROOT}/Fabric/Fabric.framework/run" ... 因为我的cocoapods根位置之一的目录名称中有一个空格:

~/Documents/My Directory Name/My_Xcode_Project_Directory/

答案 3 :(得分:0)

同样的问题也发生在我身上。 删除派生数据,然后清理并构建正在解决问题。