private SecStatusCode Save(IiOSKey key, string payload)
        {
            var recordToSave = new SecRecord(SecKind.GenericPassword)
            {
                Account        = key.iOSAccount,
                Service        = key.iOSService,
                Generic        = key.iOSGeneric,
                CreatorType    = key.iOSType,
                ValueData      = NSData.FromString(payload, NSStringEncoding.UTF8),
                AccessGroup    = _keychainGroup,
                Accessible     = _defaultAccessiblityPolicy,
                Synchronizable = _defaultSyncSetting,
            };

            var secStatusCode = Update(recordToSave);

            if (secStatusCode == SecStatusCode.ItemNotFound)
            {
                secStatusCode = SecKeyChain.Add(recordToSave);
            }

            if (secStatusCode == SecStatusCode.MissingEntitlement)
            {
                throw new MsalClientException(
                          MsalError.MissingEntitlements,
                          string.Format(
                              CultureInfo.InvariantCulture,
                              MsalErrorMessage.MissingEntitlements,
                              recordToSave.AccessGroup));
            }

            return(secStatusCode);
        }
        private SecStatusCode Remove(IiOSKey key)
        {
            var record = new SecRecord(SecKind.GenericPassword)
            {
                Account     = key.iOSAccount,
                Service     = key.iOSService,
                CreatorType = key.iOSType,
                AccessGroup = _keychainGroup
            };

            return(SecKeyChain.Remove(record));
        }
        private string GetPayload(IiOSKey key)
        {
            var queryRecord = new SecRecord(SecKind.GenericPassword)
            {
                Account     = key.iOSAccount,
                Service     = key.iOSService,
                CreatorType = key.iOSType,
                AccessGroup = _keychainGroup
            };

            var match = SecKeyChain.QueryAsRecord(queryRecord, out SecStatusCode resultCode);

            return((resultCode == SecStatusCode.Success)
                ? match.ValueData.ToString(NSStringEncoding.UTF8)
                : string.Empty);
        }
        public void SaveAccessToken(MsalAccessTokenCacheItem item)
        {
            IiOSKey key = item.GetKey();

            Save(key, item.ToJsonString());
        }