在Xcode Build阶段的Bash运行脚本中处理空格和特殊字符

3

我在我的Xcode项目的Build Phases中有一个自定义的Bash Run Script。它将官方版本号写入plist文件。

#proper escape for spaces
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//" "/"\ "}

echo "Setting marketing version, CFBundleShortVersionString, to $VERSION in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."

/usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $VERSION" $TARGET_BUILD_DIR/$INFOPLIST_PATH

echo "Setting technical version, CFBundleVersion, to $BUILD in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."

/usr/libexec/PlistBuddy -c "Set CFBundleVersion $BUILD" $TARGET_BUILD_DIR/$INFOPLIST_PATH

只要路径中没有空格或特殊字符,这段代码就可以正常工作。

以下是调用此代码时会发生的情况:

在 /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's Up/workspace/build/WhatsUp.app/Info.plist 中将营销版本 CFBundleShortVersionString 设置为 1.7.0.0... 文件不存在,将创建: /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What Invalid Arguments

在 /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's Up/workspace/build/WhatsUp.app/Info.plist 中将技术版本 CFBundleVersion 设置为 199... 文件不存在,将创建: /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What Invalid Arguments

echo 命令可以很好地获取目录,但是 PlistBuddy 在尝试使用相关目录时返回错误。

到目前为止,我已经尝试了许多方法,例如使用 '\' 转义空格和特殊字符:

#replace spaces attempt
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//" "/"\ "}
TARGET_BUILD_DIR=${TARGET_BUILD_DIR// /\ }

#replace apostrophes attempt
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//"'"/"\'"}
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//'/\'}

我该怎么做才能让PlistBuddy接受一个带有空格或特殊字符的目录?

请引用您的变量扩展。 - Etan Reisner
1个回答

3
原来不需要替换空格和特殊字符。
@Etan Reisner的评论提示我尝试与变量扩展有关的其他事情。
引用"$TARGET_BUILD_DIR"和"$INFOPLIST"各自解决了问题。
Setting marketing version, CFBundleShortVersionString, to $VERSION in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."
/usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $VERSION" "$TARGET_BUILD_DIR"/"$INFOPLIST_PATH"

Setting technical version, CFBundleVersion, to $BUILD in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."
/usr/libexec/PlistBuddy -c "Set CFBundleVersion $BUILD" "$TARGET_BUILD_DIR"/"$INFOPLIST_PATH"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接