Ich erstelle eine App in Xamarin.iOS, die SecKeyChain aus Security verwendet. Darin versuche ich, die Anmeldeinformationen eines Benutzers als SecRecord im KeyChain zu speichern und später darauf zuzugreifen. Wenn die App gestartet wird, prüft sie, ob im KeyChain gespeicherte Anmeldedaten gespeichert sind und entscheidet, ob eine manuelle Anmeldung erforderlich ist oder nicht.SecKeyChain Elemente und SecRecord Unterschiede zwischen Debugging auf Gerät und Simulator, Xamarin iOS
Wenn SecKeyChain.Add aufgerufen wird, wird der Erfolg zurückgegeben. Nach einem erzwungenen Schließen der App schlägt SecKeyChain.QueryAsRecord jedoch mit dem Fehlercode AuthFailed fehl. Dies geschieht nur auf dem Gerät, während der Simulator erfolgreich ist.
Ein anderes Problem hängt mit dem SecRecord zusammen. Es gibt schwerwiegende Unterschiede zwischen dem Objekt, das beim Debuggen auf dem Device erstellt wird, und dem Simulator. Der Code der SecRecord Erstellung ist:
var credentialsRecord = new SecRecord(SecKind.GenericPassword)
{
Generic = NSData.FromString("record"),
Label = credentials.Username,
Account = credentials.Username,
Service = CredentialsStorageServiceName,
ValueData = NSData.FromBytes(credentials.Password.ToIntPtr(), Convert.ToUInt32(credentials.Password.Length()) * 2),
AccessControl = new SecAccessControl(SecAccessible.WhenPasscodeSetThisDeviceOnly, SecAccessControlCreateFlags.TouchIDCurrentSet)
};
var statusCode = SecKeyChain.Add(credentialsRecord);
In entitlements.plist habe ich Schlüsselbund Gruppen aktiviert ist, und hat eine Gruppe, die die gleiche wie meine Dummy Xcode project's Bundle-Bezeichner genannt. In Projektoptionen -> iOS-Bundle-Signierung habe ich eine Signaturidentität und ein Bereitstellungsprofil, wobei das Feld für benutzerdefinierte Berechtigungen leer ist.
Fehle ich etwas, um auf den Schlüsselbund des Geräts zuzugreifen, oder ist das Problem etwas anderes?
Bitte lassen Sie mich wissen, wenn ich etwas vermisse, und ich danke Ihnen im Voraus.