KeychainAccess 用于 Swift:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 KeychainAccess 以及为什么需要它?

\n\n

KeychainAccess 是一个轻量级但功能强大的 Swift 库,它为使用 Apple 的 Keychain Services(钥匙串)提供了便捷且类型安全的接口。Keychain 是内置于 iOS、macOS、watchOS 和 tvOS 中的安全存储,用于存储敏感数据:密码、加密密钥、身份验证令牌、信用卡号以及任何其他机密信息。

\n\n

如果不使用库,通过原生 C 接口(SecItemAdd、SecItemCopyMatching、SecItemUpdate、SecItemDelete 函数)操作 Keychain 非常繁琐,需要编写大量样板代码,并且容易出错。KeychainAccess 通过提供以下功能解决了这个问题:

\n
    \n
  • 简单的 Swift 语法:通过属性(get/set)和名称清晰的方法进行操作。
  • \n
  • 类型安全:数据会自动转换为 String、Data 或实现 Codable 的自定义类型。
  • \n
  • 灵活性:支持不同的访问级别(应用可访问、设备解锁后访问、生物识别访问),支持 Keychain 组和 iCloud 同步。
  • \n
  • 默认安全:该库使用了 Apple 设定的最佳安全实践。
  • \n
\n\n

该库非常适合存储 OAuth 令牌、用户密码、API 密钥、加密货币钱包的助记词以及任何其他不能以明文形式存储在 UserDefaults 或文件系统中的数据。

\n\n

安装 KeychainAccess

\n\n

KeychainAccess 不能通过 pip (Python) 或 npm (JavaScript) 安装。它是 Apple 生态系统的一个原生库。主要安装方式如下:

\n\n

1. Swift Package Manager (SPM) — 推荐方式

\n

在 Xcode 中:File → Add Packages... → 粘贴仓库 URL:

\n
https://github.com/kishikawakatsumi/KeychainAccess.git
\n

选择版本(通常选择 "Up to Next Major" 并选择最新的稳定版本),然后将包添加到您的 target。

\n\n

或者,在您的包的 Package.swift 中添加依赖:

\n
// 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\n

2. CocoaPods

\n

在您的 Podfile 中添加一行:

\n
pod 'KeychainAccess'
\n

然后执行 pod install。

\n\n

3. Carthage

\n

在 Cartfile 中添加:

\n
github "kishikawakatsumi/KeychainAccess"
\n

然后执行 carthage update 并将框架添加到您的项目中。

\n\n

KeychainAccess 快速入门

\n\n

安装后,导入库:import KeychainAccess

\n\n

最简单的示例是保存和读取字符串:

\n\n
import 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 操作可能会抛出异常(例如,在访问问题或缺少权限时)。

推荐