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