在 Xcode Build Phase Bash Run Script 中处理空格和特殊字符

Posted

技术标签:

【中文标题】在 Xcode Build Phase Bash Run Script 中处理空格和特殊字符【英文标题】:Handling spaces & special characters inside an Xcode Build Phase Bash Run Script 【发布时间】:2016-03-31 15:46:32 【问题描述】:

我在我的 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

只要路径没有空格或特殊字符,此方法就可以正常工作。

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

将营销版本 CFBundleShortVersionString 设置为 1.7.0.0 in /Users/jenkins/.jenkins/jobs/ClientName/jobs/ios/jobs/什么 Up/workspace/build/WhatsUp.app/Info.plist ...文件不存在,将 创建:/Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What 无效参数

将技术版本 CFBundleVersion 设置为 199 in /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/什么 Up/workspace/build/WhatsUp.app/Info.plist ...文件不存在,将 创建:/Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What 无效参数

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 接受带有空格或特殊字符的目录?

【问题讨论】:

引用你的变量扩展。 【参考方案1】:

事实证明,不需要替换空格和特殊字符。

@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"

【讨论】:

以上是关于在 Xcode Build Phase Bash Run Script 中处理空格和特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

仅在“构建并运行”时在 Xcode 中运行 bash 脚本

启动maven服务时 出现No goals have been specified for this build. You must specify a valid lifecycle phase o

Build Clover

内部版本号不是由 fastlane 设置的,而是由 Xcode 设置的

在 XCode 5 中构建时在 XCode 项目中运行 bash 文件

Xcode 编译更改 Build 输出路径