Xamarin iOS为KeyChain增加价值,可以通过设备上的所有应用程序访问

问题描述:

我已经为此创建了一个新问题,因为这更关联到Xamarin。当我偶然发现*中的这个question时,我正在寻找一种在iOS中唯一标识设备的方法。我花了一段时间才弄清楚如何在Keychain中添加任何东西,而我偶然发现了这个questionXamarin iOS为KeyChain增加价值,可以通过设备上的所有应用程序访问

经过所有的绊脚石,我想出了this一段代码来生成唯一的令牌。

var s = new SecRecord(SecKind.GenericPassword) 
      { 
       AccessGroup = "kSecAttrAccessGroupToken", 
       ValueData = NSData.FromString(value), 
       Generic = NSData.FromString(key) 
      }; 
      SecKeyChain.Add(s); 

现在的问题是,即使我将这个条目添加到钥匙串,我无法找到它。我也有兴趣知道我是否正确使用kSecAttrAccessGroupToken。

我Enlistments.plist文件

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>keychain-access-groups</key> 
    <array> 
     <string>my app id</string> 
     <string>kSecAttrAccessGroupToken</string> 
    </array> 
</dict> 
</plist> 

kSecAttrAccessGroupToken只有CryptoTokenKit智能卡驱动程序是可写的。应用程序可以使用该属性查询钥匙串,以查找存储在特定智能卡上的项目。该属性不适用于其他任何用途。

10.3.x测试版中存在一个错误,它允许任何应用程序也写入它,但已被修补。

回复:https://forums.developer.apple.com/thread/72271

+0

感谢您的回复。你有没有看过我发布的Gist?我对它做了一些修改,现在就开始工作。所以当我卸载应用程序并重新安装时,我仍然能够获得Guid。但是现在你说了这些,我是否在做一些反对苹果政策的事情? –

+0

@MadhavShenoy 1)你在iOS 10.2或更低版本上做这个? 2)你在物理设备上测试吗? (模拟器不遵循运行时间规则) – SushiHangover

+0

好的,让我测试一下这个设备。所以这意味着根本无法在iOS上唯一标识设备........ –