【发布时间】: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 接受带有空格或特殊字符的目录?
【问题讨论】:
-
引用你的变量扩展。