我的项目中有几个assert(condition, "message")
语句。
它们用于在开发期间检查的不变条件。我认为在生产/发布版本中会忽略它们(如this answer中所述)。 它们不是。相反,它们会在TestFlight测试期间导致崩溃。当我评论断言时,应用程序不会崩溃。有些东西通常会出错,但不会崩溃。
可以使用我的构建设置吗?
我的所有存档方案都使用发布配置:
断言位于Cocoa Touch Framework项目中,该项目用于自定义键盘扩展。
所有项目中的所有目标(Cocoa Touch Framework以及具有键盘扩展目标的主项目)都具有以下构建设置:
Enable Foundation Assertions
Debug YES
Release NO
Disable Safety Checks NO
怎么了?
修改
Sulthan's answer显示了如何为调试和重建版本全局禁用断言。这不是我需要的。我希望它按预期工作 - 断言应该在调试中启用,但在发布版本中禁用。
默认情况下它以这种方式工作 - 它也可以在我的主项目中使用。但它不适用于从该主项目链接的Framework项目中的断言(this question中的详细信息)。为什么?如何解决?
答案 0 :(得分:2)
您尝试过的选项:
Enable Foundation Assertions
位于预处理部分(宏)中。 Swift没有预处理,也没有使用宏。此选项会禁用{-1}},NSAssert
以及Objective-C中常用的类似宏。
NSParameterAssert
是一种表现选项:
默认情况下,标准库可确保内存安全。许多函数和方法记录了调用者必须满足的要求,例如数组索引有效;即使违反要求,也能保证记忆安全。但是,违反要求可能会触发运行时错误。在其名称中包含“unsafe”一词的API允许您在需要额外性能的位置明确禁用安全检查。您有责任验证使用不安全API的代码的内存安全性。如果多线程代码中存在竞争条件,则无法保证内存安全。
您应该尝试我的回答here
(在Disable Safety Checks
中使用-assert-config Release
。
或者只是将断言保留在生产版本中。每个失败的断言都是一个错误,一般来说,最好尽快了解一个错误。