更新到Xcode 6.3打破应用程序 - 谷歌GTLTouchStaticLib"不等于空指针总是如此"

时间:2015-04-11 05:08:45

标签: ios google-drive-api comparison xcode6.3

我在自己的应用中使用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相比时,这两个键始终为真。

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

我查看了this question,但无法理解与我的Google Drive SDK实施文件GTMOAuth2ViewControllerTouch.m

相关的问题。

我真的很想了解潜在的问题。

请帮忙......

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

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

我告诉你可以通过添加-Wno-tautological-pointer-compare与编译器标志来全局禁用警告,或者通过包装"& whatever&#34来一次性地禁用警告;在括号中。