在更新到Xcode8.3之后,我在macOS SDK头文件中收到了许多新的可空性警告。例如
CoreText.framework/Headers/CTRubyAnnotation.h:175:5: warning: inferring '_Nonnull' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type] CFStringRef text[kCTRubyPositionCount] ) CT_AVAILABLE(10_10, 8_0);
CoreGraphics.framework/Headers/CGColorSpace.h:175:13: warning: array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness-on-arrays]
我可以抑制这些警告,但我注意到它们不会出现在新创建的项目中。
以下是用于编译生成警告的文件的命令的-W参数:
-Wnon-modular-include-in-framework-module
-Werror=non-modular-include-in-framework-module
-Wno-trigraphs
-Wno-missing-field-initializers
-Wno-missing-prototypes
-Wunreachable-code
-Wno-implicit-atomic-properties
-Wno-arc-repeated-use-of-weak
-Wnon-virtual-dtor
-Wno-overloaded-virtual
-Wno-exit-time-destructors
-Wduplicate-method-match
-Wno-missing-braces
-Wparentheses
-Wswitch
-Wunused-function
-Wno-unused-label
-Wno-unused-parameter
-Wunused-variable
-Wunused-value
-Wempty-body
-Wuninitialized
-Wno-unknown-pragmas
-Wno-shadow
-Wno-four-char-constants
-Wno-conversion
-Wconstant-conversion
-Wint-conversion
-Wbool-conversion
-Wenum-conversion
-Wshorten-64-to-32
-Wno-newline-eof
-Wno-selector
-Wno-strict-selector-match
-Wundeclared-selector
-Wno-deprecated-implementations
-Wno-c++11-extensions
-Wprotocol
-Wdeprecated-declarations
-Winvalid-offsetof
-Wno-sign-conversion
-Winfinite-recursion
-Wmove
-Wreorder下面是我的项目中的警告(左)和警告以及新创建的项目(右)之间的区别:

此外,在两个项目中,Base SDK都设置为最新的macOS (macOS 10.12)。
发布于 2017-04-18 04:59:23
对于Apple来说,在审查代码的可空性行为时,添加系统头中缺失的更多可空性注释并不少见。
默认的项目模板会有一些有用的警告没有打开,这也是很常见的。
我建议您将新项目中的警告设置与您的项目中的警告设置进行比较。SDK设置也会影响对哪些API进行注释。
很有可能,你会在一个新项目中得到同样的警告,只是默认情况下它们并没有打开。
https://stackoverflow.com/questions/43440021
复制相似问题