更新到 Xcode 6.3 会破坏应用程序 - Google GTLTouchStaticLib "not equal to a null pointer is always true"

Update to Xcode 6.3 breaks app - Google GTLTouchStaticLib "not equal to a null pointer is always true"

我在我的应用程序中使用 Google Drive SDK。

自 2014 年 6 月左右以来,它一直运行良好。

更新到 Xcode 6.3 后,我的目标构建 none。

实现文件GTMOAuth2ViewControllerTouch.m包含编译器抱怨的两个块:

if (accessibility == NULL
    && &kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly != NULL) {
        accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
}

特别是消息:"Comparison of address of kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly not equal to a null pointer is always true"。

if (accessibility != NULL && &kSecAttrAccessible != NULL) {
    [keychainQuery setObject:(id)accessibility
                      forKey:(id)kSecAttrAccessible];
}

特别是消息:"Comparison of address of kSecAttrAccessible not equal to a null pointer is always true"。

编译器告诉我,与 != NULL 相比,这两个键始终为真。

我相信我缺乏计算机科学培训使我无法理解这里的问题 - 也许这只是一种不好的看法?

我看过 ,但无法理解与 Google Drive SDK 实现文件 GTMOAuth2ViewControllerTouch.m

问题相关的上下文

我真的很想了解根本问题。

请帮忙...

您可以使用以下代码代替这些片段: accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;[keychainQuery setObject:(id)accessibility forKey:(id)kSecAttrAccessible];

这是因为常量永远不会有 NULL 指针,所以没有理由进行检查。我相信可以通过 SDK 更新来修复,但您可以手动修复。

Apple 向他们的编译器添加了一个新的检查,当这些检查永远不会失败时发出警告,但不幸的是,它是基于当前的部署目标这样做的。但是,对于我们这些在具有多个部署目标的项目之间共享代码的人来说,这个新功能确实令人头疼。

我听说您可以通过在编译器标志中添加 -Wno-tautological-pointer-compare 来全局禁用警告,或者通过将“&whatever”括在括号中来一次性禁用警告。