目前,我有一个用 Swift 编写的 iOS 应用程序,它将被替换为
通过 Xamarin Forms 的新版本。我在访问旧版本时遇到问题
(Swift) 钥匙串(keychain),其中 ItemNotFound
是返回的唯一请求代码。
两个应用程序都使用相同的 bundle ID。
这是我正在使用的代码:
byte[] _LegacyGetKeychainItem<T>(string key)
{
using (var record = ExistingRecordForKey(key))
using (var match = SecKeyChain.QueryAsData(record, false, out var resultCode))
{
if (resultCode == SecStatusCode.Success)
{
return match.ToArray();
}
}
throw new InvalidOperationException(string.Format("GetKeychainItem: data was null for key: {0}", key));
}
SecRecord ExistingRecordForKey(string key)
{
return new SecRecord(SecKind.GenericPassword)
{
Service = SEC_SERVICE, // Same as Bundle ID
Account = key
};
}
最佳答案
检查 Entitlements.plist 是否有 Enable Keychain设置
<dict>
<key>keychain-access-groups</key>
<array>
<string>BUNDLE_ID</string>
</array>
</dict>
如果它已经存在的话。检查项目的 iOS Bundle Signing(项目 => iOS Bundle Signing)。
您可能必须将“自定义权利”设置为“Entitlement.plist”,因为“自定义权利”的默认设置对于模拟器来说为空。看看this和 this答案。
关于ios - 如何将现有 iOS 应用程序升级到 Xamarin Forms 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57680344/