如何在xcconfig和引号中定义字符串

时间:2015-06-18 21:26:29

标签: ios xcode xcode6

我已经开始使用xcconfig文件进行特定于环境的构建设置,我注意到字符串引号是按字面解释的。

e.g。

APP_BUNDLE_DISPLAYNAME_SUFFIX = "DEBUG"

将显示应用名称MyApp "DEBUG"作为显示名称(带引号)

如何处理xcconfig文件中的字符串,是否需要定义字符串?如果不是,你如何处理空白空间和逃避?知道的任何特殊字符?

1 个答案:

答案 0 :(得分:1)

答案是,它取决于您尝试更改的实际构建设置以及使用它的位置。

正如您所观察到的,像APP_BUNDLE_DISPLAYNAME_SUFFIX这样的设置只能使用一个单词,因此在此添加引号只会导致它们被Xcode合并到设置的值中。

然而,在其他地方则不同。特别是,如果在构建期间将设置传递到工具链上。在这些情况下,您必须对命令行的Xcode AND 使用引用和转义。

例如:如果要使用xcconfig文件设置预处理器定义(即宏)并且要定义字符串宏,则必须转义引号以使shell不剥离它们,并且如果你在字符串中有斜杠,那么你也必须逃避这些,因为Xcode在内部解释它们。

假设你的代码中有:

#ifdef MY_MACRO1
const char *my_url = MY_MACRO2;
#endif

然后这个xcconfig文件将正常工作:

//
//  my_string_macro.xcconfig
//

GCC_PREPROCESSOR_DEFINITIONS=MY_MACRO1 MY_MACRO2="\"https:\/\/stackoverflow.com\/questions\/30926076\/\"" 

Xcode的Build Settings检查器将显示最外面的两个双引号之间的值不变,但在编译期间会正确解释它,在编译日志中会出现类似这样的内容:

clang -x objective-c++ -DMY_MACRO1 -DMY_MACRO2=\"https://stackoverflow.com/questions/30926076/\"