Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨应用程序密钥链访问,在哪里配置?_C#_Ios_Xamarin_Xamarin.forms_Keychain - Fatal编程技术网

C# 跨应用程序密钥链访问,在哪里配置?

C# 跨应用程序密钥链访问,在哪里配置?,c#,ios,xamarin,xamarin.forms,keychain,C#,Ios,Xamarin,Xamarin.forms,Keychain,我目前正在开发多个跨平台应用程序,这些应用程序(在iOS下)使用一些共享的密钥链条目。我目前的项目是从android开始的,在我们有了一个可用的版本后,我继续使用iOS版本。我从早期的项目中导入了我们的钥匙链访问代码,以访问我们的共享登录数据。只有这一次,查询总是返回SecStatusCode.ItemNotFound 我比较了资源调配配置文件和权利,结果都是一样的。一段时间后,它让我发疯,我创建了一个新的空应用程序,只有钥匙链代码、与当前不工作的应用程序相同的捆绑标识、配置文件和授权文件,它工

我目前正在开发多个跨平台应用程序,这些应用程序(在iOS下)使用一些共享的密钥链条目。我目前的项目是从android开始的,在我们有了一个可用的版本后,我继续使用iOS版本。我从早期的项目中导入了我们的钥匙链访问代码,以访问我们的共享登录数据。只有这一次,查询总是返回SecStatusCode.ItemNotFound

我比较了资源调配配置文件和权利,结果都是一样的。一段时间后,它让我发疯,我创建了一个新的空应用程序,只有钥匙链代码、与当前不工作的应用程序相同的捆绑标识、配置文件和授权文件,它工作正常并返回我的数据

对于我的问题,除了authorities.plist和provisioning profile之外,还有哪些东西需要配置,这些东西可能会干扰我对密钥链条目的访问?因为这个项目有点大,我不想把所有的代码都复制到新的项目中。我尝试了Visual Studio 2017 for Windows和VS for Mac 2019。这是一个内部/企业应用程序,它是任何关注点

钥匙链呼叫:

KeyChain kc = new KeyChain("USER_DATA", "de.rlp.myCompany.Shared");
var data = kc.Find("LOGIN_DATA");
钥匙链类别:

public class KeyChain
{
    public string ServiceName { get; set; }
    public string GroupName { get; set; }

    public KeyChain(string serviceName, string groupName = null)
    {
        ServiceName = serviceName;
        GroupName = groupName;
    }

    public byte[] Find(string key)
    {
        SecStatusCode res;
        var rec = PrepareDictionary(key);
        var match = SecKeyChain.QueryAsRecord(rec, out res);
        if (res == SecStatusCode.Success) // ItemNotFound return-code here
        {
            return match.ValueData.ToArray();
        }
        else
        {
            System.Diagnostics.Debug.Write(res.ToString()); 
        }
        return null;
    }

    private SecRecord PrepareDictionary(string key)
    {
        var sr = new SecRecord(SecKind.GenericPassword)
        {
            Service = this.ServiceName,
            Generic = NSData.FromString (key),
            Account = key,
            Accessible = SecAccessible.AlwaysThisDeviceOnly
        };
        if (string.IsNullOrEmpty(GroupName))
        {
            sr.AccessGroup = GroupName;
        }
        return sr;
    }

}
权利条目

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)de.rlp.myCompany.Shared</string>
</array>
钥匙链访问组
$(AppIdentifierPrefix)de.rlp.myCompany.Shared

您是否已将两个应用程序从授权添加到同一个应用程序组/密钥链组并启用了它

VS可能有车。只需在苹果开发者网站上查看这两款应用的授权即可。 这可能就是问题所在


如果我在我的非工作应用程序和工作测试应用程序中使用相同的捆绑标识,那么开发人员站点上的应用id和配置文件不应该相同吗?权利文件实际上是相同的,我将它从一个项目复制到另一个项目。这将是相同的,但您的权利在您的工作项目和非工作项目中可能不同。您是否让它工作过?