Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 检查脚本中的GCC_预处理器_定义参数_Xcode_Bash - Fatal编程技术网

Xcode 检查脚本中的GCC_预处理器_定义参数

Xcode 检查脚本中的GCC_预处理器_定义参数,xcode,bash,Xcode,Bash,在项目目标的生成设置中,我将预处理器宏配置如下: Debug FILE_SHARE = 1 Adhoc FILE_SHARE = 1 Release FILE_SHARE = 2 #!/bin/bash if [${buildSettings}/${GCC_PREPROCESSOR_DEFINITIONS}/${FILE_SHARE} = 1 ]; then /usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled YES" "${T

在项目目标的生成设置中,我将预处理器宏配置如下:

Debug FILE_SHARE = 1
Adhoc FILE_SHARE = 1
Release FILE_SHARE = 2
#!/bin/bash
if [${buildSettings}/${GCC_PREPROCESSOR_DEFINITIONS}/${FILE_SHARE} = 1 ]; then
     /usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled YES" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
else
     usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled NO" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
我想根据脚本中的这些设置值更改
UIFileSharingEnabled
标志,如下所示:

Debug FILE_SHARE = 1
Adhoc FILE_SHARE = 1
Release FILE_SHARE = 2
#!/bin/bash
if [${buildSettings}/${GCC_PREPROCESSOR_DEFINITIONS}/${FILE_SHARE} = 1 ]; then
     /usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled YES" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
else
     usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled NO" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
我知道
${buildSettings}/${GCC_预处理器_定义}/${FILE_SHARE}=1
是错误的语法,但我无法确定什么是正确的语法。

在执行运行脚本时,“用户定义的构建设置”也是环境的一部分,因此以下应该可以工作:

if [ ${FILE_SHARE} = 1 ]; then
/usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled YES" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
else
/usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled NO" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
编辑:我误解了你的问题,上面的答案适用于“用户定义的生成设置”,而不是预处理器宏

以下脚本使用
expr
的正则表达式匹配功能提取文件共享预处理器宏的值:

val=`expr "$GCC_PREPROCESSOR_DEFINITIONS" : ".*FILE_SHARE=\([0-9]*\)"`
if [ $val = 1 ]; then
...
else
...
fi

由于我仍在等待帮助以找出正确的语法,因此我使用了另一种方法来解决我的问题:if[“${CONFIGURATION}”=“Debug”]|;[“${CONFIGURATION}”=“AdHoc”];那么。我不喜欢,因为以后可能会有新的配置,其他开发人员可能会忘记将设置添加到此脚本中……很抱歉,我的回复太晚,我被其他项目越位了。我没有机会验证它,但它给了我一个很好的前进方向的指示。感谢在我的shell(OSX10.10)中,expr被锚定到表达式的开头。因此,只有当文件共享是GCC_预处理器_定义中的第一件事时,上述方法才有效。对模式的一个小的修改是有效的:val=
expr“$GCC\u预处理器\u定义”:“*FILE\u SHARE=\([0-9]*\)”
(在FILE\u SHARE之前添加了。*@grabunkers:我现在不能测试它,但我确信你是对的,谢谢你的反馈!快速检查:如果[$val=1];然后不是一个求值,而是一个应该使用==的赋值操作。一些新手可能会复制/粘贴代码,并在第一时间陷入困境condition@Claus:你确定吗?在a中,如果字符串s1和s2相同,
s1=s2
为真。