如何将现有的iOS应用程序升级为Xamarin Forms应用程序

7

目前,我有一个用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
    };
}

4
这个为什么被打上了Android的标签?你是删除了旧版本的应用吗?还是在旧应用的基础上安装了具有相同bundle id的新版本应用?你使用哪些代码来访问Keychain?你遇到了哪些错误或异常? - Jason
1
这里有一篇文章,可能会有所帮助。https://riptutorial.com/xamarin-ios/example/8337/using-keychain - Junior Jiang
@Jason,我更新了问题,删除了Android标签并添加了一些我的代码。 - igorgue
@igorgue:你已经检查了Entitlements.plist中的钥匙串启用吗? - CharithJ
@CharithJ 是的,它们是一样的... - igorgue
你是否像我在截图中展示的那样选择了正确配置的 plist 文件? - CharithJ
1个回答

0

检查 Entitlements.plist 是否设置了 启用钥匙串

<dict>
    <key>keychain-access-groups</key>
    <array>
        <string>BUNDLE_ID</string>
    </array>
</dict>

如果已经存在,则检查项目的iOS Bundle Signing(Project => iOS Bundle Signing)。
您可能需要将“Custom Entitlements”设置为“Entitlement.plist”,因为模拟器的“Custom Entitlements”的默认设置为空。请参阅thisthis答案。

enter image description here enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接