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



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

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

在更新到Xcode 6.3之后,我的目标都没有构建。

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

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

特别是消息:"kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly的地址不等于空指针的比较总是正确的"。

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

特别是消息:"kSecAttrAccessible的地址不等于空指针的比较总是正确的"。

编译器告诉我,与!= NULL相比,这两个键总是正确的。

我相信我缺乏计算机科学培训,这让我无法理解这里的问题——也许这只是一种糟糕的看法?

我已经看了这个问题,但无法理解与Google Drive SDK实现文件GTMOAuth2ViewControllerTouch.m 问题相关的上下文

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

请帮忙。。。

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

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

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

有人告诉我,你可以通过在编译器标志中添加-Wno同义重复指针compare来全局禁用警告,或者通过将"&whatever"括在括号中来一次性禁用警告。

最新更新