macOS催化剂上的钥匙串项目的PersistentRef

问题描述

背景

我正在尝试构建一个使用本地IKEv2实现连接到VPN的应用。该应用程序应为iOS构建,但也可以通过使用Catalyst平台在macOS上运行。

情况

在iOS / macOS中使用本地IKEv2实现连接到VPN时-要使用用户名和密码身份验证,应用必须将持久性钥匙串引用传递给包含密码的钥匙串项。 (Reference

问题

在iOS上,它可以完美运行,但是在Catalyst平台上启动VPN连接时,VPN服务无法使用给定的持久引用来检索密码。控制台打印:

[] (null): Failed to copy content,SecKeychainItemcopyContent returned The contents of this item cannot be retrieved.

钥匙串项存储在钥匙串中,持久引用不是nil,但是由于某种原因,操作系统的VPN服务无法检索密码。

如果我尝试使用相同的持久引用来检索密码-一切都会按预期进行,并且会检索到密码。

let query: [String: Any] = [
    kSecclass as String: kSecclassGenericPassword,kSecAttrPersistentReference as String: persistentRef,kSecReturnData as String: true
]
        
var item: CFTypeRef?
let status = SecItemcopyMatching(query as CFDictionary,&item)

任何信息将不胜感激。将密码保存到钥匙串时,也许应该添加一些标志?尤其是在Catalyst平台上从钥匙串检索持久引用时,也许应该添加一些标志?

解决方法

我直接通过苹果的反馈支持问了这个问题,得到的答案是:

apple support