首页 > 解决方案 > 如何在 Xamarin.iOS 中使用数据保护?

问题描述

我正在尝试遵循此 Apple 文档来使用数据保护。但是,鉴于它在 Swift 中,我似乎无法将其翻译为 C#/Xamarin。

需要明确的是,我不需要整个代码,当然,只需要从哪里开始。特别是这一行:

try data.write(to: fileURL, options: .completeFileProtection)

我尝试了几种将其翻译成 C# 的选项,但没有奏效。

标签: c#iosswiftxamarinxamarin.ios

解决方案


有关数据保护的官方 Apple 文档可在此处获得。

正如 Oleg 在链接中指出的那样,我将在此处对其进行总结,以防他们关闭 Xamarin 论坛:

  • 首先,您必须为您的 App ID 启用数据保护并更新您的配置文件。
  • 将您的 iOS 密码锁定设置为“立即”要求密码,然后通过启动您的应用程序然后锁定设备来测试它。
public static void SetFileProtection(string filePath)
{
    NSMutableDictionary dict = new NSMutableDictionary ();
    var protection = new NSString("NSFileProtectionCompleteUnlessOpen");
    dict.Add((new NSString("NSFileProtectionKey") as NSObject), (protection as NSObject));
    NSError error;
    NSFileManager.DefaultManager.SetAttributes(dict, filePath, out error);
    if (error != null)
        System.Console.WriteLine("SetFileProtection Error: " + error.Description);
}

您可以使用iExplorer测试功能。您将看到除非设备受信任,否则无法访问数据。借助官方文档中的数据保护等级选择适当的保护级别:

(NSFileProtectionComplete):类密钥受用户密码和设备 UID 派生的密钥保护。用户锁定设备后不久(10 秒,如果 Require Password 设置为 Immediately),解密的类密钥将被丢弃,使此类中的所有数据都无法访问,直到用户再次输入密码或使用 Touch ID 或 Face 解锁设备ID。


推荐阅读