【问题标题】:Why would release builds be more strict than debug为什么发布版本比调试更严格
【发布时间】:2019-10-09 20:41:24
【问题描述】:

在这行代码中:

NSInteger 答案 = 3; NSString *s = [NSString stringWithFormat:@"%ld",answer];

在 Xcode 10.3 中,在调试版本下没有错误。 在发布版本下,我收到此错误:

“NSInteger”类型的值不应用作格式参数;添加 显式转换为 'long' [-Werror,-Wformat]

我理解错误的原因,我也应该将答案转换为 (long),如果我以 @"%d" 开头,编译器会抱怨并修复问题。但是当 ld 存在时,调试版本中的编译器会保持安静,但在发布时它会引发一个标志。

关于什么设置会导致这种情况发生的任何想法?

提前致谢!

【问题讨论】:

  • 查看构建设置。有很多默认差异。

标签: objective-c xcode gcc gcc-warning


【解决方案1】:

您的问题的答案非常广泛,但我认为您应该有所了解。就像上面的评论一样,有一大堆因素可以过滤在构建调试和构建生产发布时将要进行的更改。对于性能和兼容性,苹果对发布非常严格。因此,构建设置中某些构建配置的默认值与构建用于调试和发布有很大不同。

看看下面附上的图片:

注意:它们中的大多数都可以根据您的喜好进行定制,但它确实会影响构建过程以及交付!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2020-08-02
    相关资源
    最近更新 更多