猿问
下载APP

在没有预处理器宏的情况下,有没有办法在Xcode项目中的项目级别定义实用的方案特定标志

在swift之前,我将为alpha,beta和distribution版本定义一组方案。这些方案中的每一个都有一组宏,这些宏被定义为在项目级别处理某些行为。最简单的示例是DEBUG = 1宏,默认情况下为Run构建的默认方案中的所有Xcode项目定义。人们可以查询#ifdef DEBUG ...并相应地在代码中做出决定,甚至编译出非必要的代码。

看起来这种类型的配置选通并不像使用swift那么容易,因为不支持宏。有人可以建议一个类似的方法,我不在乎代码是否编译出来,本身。不过,我想基于构建方案来构建功能。


慕容森
浏览 69回答 3
3回答

月关宝盒

在Swift中,您仍然可以使用“#if /#else /#endif”预处理器宏(尽管更受限制),如Apple文档所述。这是一个例子:#if DEBUG    let a = 2#else    let a = 3#endif现在,您必须在其他位置设置“DEBUG”符号。将它设置在“Swift Compiler - Custom Flags”部分,“Other Swift Flags”行中。您可以使用-D DEBUG条目添加DEBUG符号。(构建设置 - > Swift编译器 - 自定义标志)像往常一样,您可以在Debug或Release中设置不同的值。我用实际代码测试了它; 它似乎没有在操场上得到认可。

红颜莎娜

我们遇到了一个不想设置swift编译器标志的问题,因为我们不想设置它们并让它们保持最新的不同目标等。另外,在我们的混合代码库中,我们不想记住为每种语言始终适当地设置标志。对于我们,我们在ObjC中声明了一个文件PreProcessorMacros.hextern BOOL const DEBUG_BUILD;在他们中PreProcessorMacros.m#ifdef DEBUG    BOOL const DEBUG_BUILD = YES;#else    BOOL const DEBUG_BUILD = NO;#endif然后,在您的Objective-C桥接标题中#import "PreProcessorMacros.h"现在,在Swift代码库中使用它if DEBUG_BUILD {    println("debug")} else {    println("release")}这绝对是一种解决方法,但它解决了我们的问题所以我在这里发布它希望它会有所帮助。这并不意味着现有答案无效。

123456qqq

Logans方法更加巧妙的解决方案。设置目标的构建设置-D DEBUG中Other Swift Flags的Swift Compiler - Custom Flags部分。然后在全局范围内声明以下方法:#if DEBUGlet isDebugMode = true#elselet isDebugMode = false#endif现在用它作为if isDebugMode {    // Do debug stuff}
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答