处理 Xcode 构建阶段 Bash 运行 脚本中的空格和特殊字符
Handling spaces & special characters inside an Xcode Build Phase Bash Run Script
我在 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
只要路径没有 space 或特殊字符,这就可以正常工作。
以下是尝试调用此代码时发生的情况:
Setting marketing version, CFBundleShortVersionString, to 1.7.0.0 in
/Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's
Up/workspace/build/WhatsUp.app/Info.plist... File Doesn't Exist, Will
Create: /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What
Invalid Arguments
Setting technical version, CFBundleVersion, to 199 in
/Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's
Up/workspace/build/WhatsUp.app/Info.plist... File Doesn't Exist, Will
Create: /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What
Invalid Arguments
echo 很好地选择了目录,但是 PlistBuddy
returns 在尝试使用有问题的目录时出错。
到目前为止,我已经尝试了很多事情,比如转义 spaces 和带有 '\':
的特殊字符
#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 接受带有 space 或特殊字符的目录?
原来不需要替换空格和特殊字符。
@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 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
只要路径没有 space 或特殊字符,这就可以正常工作。
以下是尝试调用此代码时发生的情况:
Setting marketing version, CFBundleShortVersionString, to 1.7.0.0 in /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's Up/workspace/build/WhatsUp.app/Info.plist... File Doesn't Exist, Will Create: /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What Invalid Arguments
Setting technical version, CFBundleVersion, to 199 in /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's Up/workspace/build/WhatsUp.app/Info.plist... File Doesn't Exist, Will Create: /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What Invalid Arguments
echo 很好地选择了目录,但是 PlistBuddy
returns 在尝试使用有问题的目录时出错。
到目前为止,我已经尝试了很多事情,比如转义 spaces 和带有 '\':
的特殊字符#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 接受带有 space 或特殊字符的目录?
原来不需要替换空格和特殊字符。
@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"