Swift在调试和释放模式下表现不同

Jee*_*hut 11 closures release-mode ios swift alamofire

不确定这是Swift,XCode还是Alamofire的问题,但我认识到混合的Swift/Objc应用程序中不同位置的奇怪行为.它只发生在用Swift编写的部分中并使用闭包/网络.以下是它发生的示例代码:

Alamofire.request(.DELETE, "http://someUrl.com/user", parameters: nil)
     .response { (request, response, data, error) in
                 // some cleanup code and an alert
               }
Run Code Online (Sandbox Code Playgroud)

当我在我的iPhone上以调试模式运行我的应用程序时,一切正常,清理代码和警报就像我们执行运行上面代码的"删除帐户"操作时那样.

但是,当我把我的应用程序用户通过Testflight或直接运行我在同一个iPhone应用程序,但使用发布版本的配置,然后清理代码不运行警报显示不出来.看起来整个闭包不会被调用.

有没有人有这种奇怪行为的经验,知道如何预防它们?我不确定这里的问题是什么,因此我很难找到适用于调试和发布模式的解决方案.

感谢您的任何帮助!

环境: 我使用Alamofire 1.1.3作为嵌入式框架集成到我的项目中作为git子模块.该应用仅在iOS 8+上运行,我在iPhone 6上安装了iOS 8.1.2.

ald*_*am5 4

在与您的项目(Swift + Objective-C)类似的项目中构建发布时,我遇到了一些类似的问题,在我的例子中,它跳过了循环中的一段代码,但它并没有跳过循环本身。为了解决这个问题,我们将Build Settings -> Apple LLVM 6.0 Code Generation -> Optimization LevelDebug 的值更改为Fastest, Smallest [-Os],这与 Release 相同,然后我们在 Debug 上遇到了相同的错误。然后我们尝试将两者更改为None [-O0](这是调试默认值),但它只会使错误在调试模式下消失,而不是在发布模式下消失,因此我们必须解决该代码并更改一点 UI。

我愿意相信这是编译器在 Release 中所做的事情,我们无法更改,所以也许这是一个 Xcode Bug。