我正在开发支持iOS 6和iOS 7的应用程序,如果该功能可用(iOS 7.0.3及更高版本),我想支持iCloud Keychain同步。查看Security / SecItem.h,有以下条目:
extern CFTypeRef kSecAttrSynchronizable
__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
extern CFTypeRef kSecAttrSynchronizableAny
__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
过去,我已经检查过ObjC符号的地址不是NULL
,因此CFTypeRef
不应该有任何不同(右边?!)。那么,让我们去吧:
if (&kSecAttrSynchronizable != NULL) {
// iCloud Keychain syncing code
}
else {
// We're in iOS 6 territory
}
在我的iOS 6.1.3设备上构建一个运行并且...检查成功 - kSecAttrSynchronizable
存在。什么?这怎么可能?想到的两种可能性是:
kSecAttrSynchronizable
(私有?)(可能但不太可能)那么这里发生了什么?
答案 0 :(得分:0)
这些是我一直在寻找的机器人:
if (&kSecAttrSynchronizable != NULL && &kSecAttrSynchronizableAny != NULL)
iOS 6.1.3中提供了kSecAttrSynchronizable
外部符号,但kSecAttrSynchronizableAny
符号不可用。只检查后者可能是安全的,但未来 - 我会认为我不清楚为什么要检查价值而不是钥匙。