什么是 KeychainAccess 以及为什么需要它?
\n\nKeychainAccess 是一个轻量级但功能强大的 Swift 库,它为使用 Apple 的 Keychain Services(钥匙串)提供了便捷且类型安全的接口。Keychain 是内置于 iOS、macOS、watchOS 和 tvOS 中的安全存储,用于存储敏感数据:密码、加密密钥、身份验证令牌、信用卡号以及任何其他机密信息。
\n\n如果不使用库,通过原生 C 接口(SecItemAdd、SecItemCopyMatching、SecItemUpdate、SecItemDelete 函数)操作 Keychain 非常繁琐,需要编写大量样板代码,并且容易出错。KeychainAccess 通过提供以下功能解决了这个问题:
- \n
- 简单的 Swift 语法:通过属性(get/set)和名称清晰的方法进行操作。 \n
- 类型安全:数据会自动转换为
String、Data或实现Codable的自定义类型。 \n - 灵活性:支持不同的访问级别(应用可访问、设备解锁后访问、生物识别访问),支持 Keychain 组和 iCloud 同步。 \n
- 默认安全:该库使用了 Apple 设定的最佳安全实践。 \n
该库非常适合存储 OAuth 令牌、用户密码、API 密钥、加密货币钱包的助记词以及任何其他不能以明文形式存储在 UserDefaults 或文件系统中的数据。
\n\n安装 KeychainAccess
\n\nKeychainAccess 不能通过 pip (Python) 或 npm (JavaScript) 安装。它是 Apple 生态系统的一个原生库。主要安装方式如下:
\n\n1. Swift Package Manager (SPM) — 推荐方式
\n在 Xcode 中:File → Add Packages... → 粘贴仓库 URL:
\nhttps://github.com/kishikawakatsumi/KeychainAccess.git\n选择版本(通常选择 "Up to Next Major" 并选择最新的稳定版本),然后将包添加到您的 target。
\n\n或者,在您的包的 Package.swift 中添加依赖:
// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n name: "MyPackage",\n dependencies: [\n .package(url: "https://github.com/kishikawakatsumi/KeychainAccess.git", from: "4.2.2")\n ],\n targets: [\n .target(\n name: "MyPackage",\n dependencies: ["KeychainAccess"]),\n ]\n)\n\n2. CocoaPods
\n在您的 Podfile 中添加一行:
pod 'KeychainAccess'\n然后执行 pod install。
3. Carthage
\n在 Cartfile 中添加:
github "kishikawakatsumi/KeychainAccess"\n然后执行 carthage update 并将框架添加到您的项目中。
KeychainAccess 快速入门
\n\n安装后,导入库:import KeychainAccess
最简单的示例是保存和读取字符串:
\n\nimport KeychainAccess\n\n// 创建一个用于应用 Keychain 的实例\nlet keychain = Keychain(service: "com.example.myapp")\n\n// 保存值\ntry keychain.set("my_secret_password", key: "user_password")\n\n// 读取值\nif let password = try keychain.get("user_password") {\n print("找到的密码: \\(password)")\n} else {\n print("未找到密码")\n}\n\n// 删除值\ntry keychain.remove("user_password")\n\n这段代码执行了三个基本操作:写入、读取和删除。请注意通过 try 进行错误处理——Keychain 操作可能会抛出异常(例如,在访问问题或缺少权限时)。