.NET MAUI 通过 SecureStorage 自动调用 iOS Keychain 实现安全存储,无需手动调用 SecItemAdd;其底层使用 kSecClassGenericPassword 和指定 Service 字段写入加密字符串,需启用 keychain-access-groups 权限、匹配 Bundle ID 并真机测试。
.NET MAUI 本身不直接暴露 iOS Keychain 的底层 API,但通过 SecureStorage(来自 Microsoft.Maui.Essentials)自动、透明地使用 Keychain 实现安全存储——你只需调用统一接口,MAUI 在 iOS 上会自动把数据存进 Keychain,无需手动写 SecItemAdd 或处理 SecRecord。
当你在 MAUI 中调用 SecureStorage.SetAsync("token", "abc123"),在 iOS 平台运行时,Essentials 会:
SecRecord,其中 Service 字段设为 "{your-app-bundle-id}.microsoft.maui.essentials.preferences"(不是旧版 Xamarin 的 .xamarinessentials)kSecC
lassGenericPassword 类型,将键值对加密后写入系统 Keychain确保 Keychain 正常工作,需检查以下三点:
Entitlements.plist 中已启用 keychain-access-groups(Xcode 项目设置里勾选 “Keychain Sharing”)SecureStorage 只支持字符串类型,适合存 token、API key、用户 ID 等小段敏感文本。它不适合存:
kSecAttrAccessible 等细粒度选项真机连接 Mac 后,在 Xcode → Window → Devices and Simulators → 选择设备 → Installed Apps 找到你的 App → 点击齿轮图标 → “Show Container”,然后打开 Library/Keychains/ 目录(需越狱或配合专用工具如 keychain_dumper 查看;普通开发者可通过日志 + 异常判断:若 SecureStorage.GetAsync 返回 null 且无异常,大概率是 entitlement 缺失或模拟器环境)
基本上就这些。用好 SecureStorage,你就等于用上了 iOS 原生 Keychain 的全部安全性,不用碰 C# 调 Objective-C 的桥接代码。