Xcode Release / Swift条件代码

时间:2017-02-06 23:46:25

标签: swift xcode

func print(_ object: Any) {
#if DEBUG
    Swift.print(object)
#endif
}

我有这个函数重载默认的打印功能,所以打印只发生在DEBUG构建上,但是,在RELEASE构建它只是关闭应用程序而我无法确定原因。

有人有什么想法吗?

编辑:阅读日志,我发现当调用此代码时,Crashlytics会将以下内容作为崩溃的原因:

[Crashlytics:Crash] Warning: NSUncaughtExceptionHandler is 'mp_handleUncaughtException' in '/Users/daredevil/Library/Developer/CoreSimulator/Devices/2FB9948E-77D9-4F76-9928-15ED2ED18E4A/data/Containers/Bundle/Application/39AB3114-EB6F-4520-B8FF-90908C5B9654/App.app/Frameworks/Mixpanel.framework/Mixpanel'

每当我删除全局覆盖打印功能时,都不会发生此崩溃。

编辑2:忽略之前的编辑。 Mixpanel与此问题无关。我完全删除它并仍然崩溃。

2 个答案:

答案 0 :(得分:1)

我不知道您是否找出导致崩溃的原因,但可能与您使用的打印签名有关。

我使用类似的方法从发行版本中删除打印语句,但是我使用的打印签名是:

// Only show print statements while in DEBUG
func print(_ item: @autoclosure () -> Any, separator: String = " ", terminator: String = "\n") {
    #if DEBUG
    Swift.print(item(), separator:separator, terminator: terminator)
    #endif
}

答案 1 :(得分:-1)

我强烈建议 这样做。它可能具有不可预测的次要效果(如您所观察到的),并且它也是完全没有必要的。如果希望print语句仅在调试时运行,则应定义新函数。例如。

func dPrint(_ object: Any) {
   #if DEBUG
       print(object) 
   #endif
}