¿Qué es KeychainAccess y para qué sirve?
\n\nKeychainAccess es una biblioteca ligera pero potente para Swift que proporciona una interfaz cómoda y type-safe para trabajar con Keychain Services (Llavero) de Apple. Keychain es un almacenamiento seguro integrado en iOS, macOS, watchOS y tvOS, diseñado para almacenar datos confidenciales: contraseñas, claves de cifrado, tokens de autenticación, números de tarjetas de crédito y cualquier otra información secreta.
\n\nSin bibliotecas, trabajar con Keychain a través de la interfaz nativa en C (funciones SecItemAdd, SecItemCopyMatching, SecItemUpdate, SecItemDelete) es extremadamente engorroso, requiere escribir una gran cantidad de código repetitivo y es propenso a errores. KeychainAccess resuelve este problema ofreciendo:
- \n
- Sintaxis Swift simple: trabajo mediante propiedades (get/set) y métodos con nombres claros. \n
- Type-safety: los datos se convierten automáticamente a
String,Datao tipos personalizados que implementanCodable. \n - Flexibilidad: soporte para diferentes niveles de acceso (disponibilidad de la aplicación, después del desbloqueo del dispositivo, con biometría), trabajo con grupos de Keychain y sincronización con iCloud. \n
- Seguridad por defecto: la biblioteca utiliza las mejores prácticas de seguridad establecidas por Apple. \n
La biblioteca es ideal para almacenar tokens OAuth, contraseñas de usuarios, claves de API, frases semilla de billeteras criptográficas y cualquier otro dato que no deba almacenarse en UserDefaults o en el sistema de archivos en texto plano.
\n\nInstalación de KeychainAccess
\n\nKeychainAccess no se instala mediante pip (Python) ni npm (JavaScript). Es una biblioteca nativa para el ecosistema Apple. Los métodos principales de instalación son:
\n\n1. Swift Package Manager (SPM) — Método recomendado
\nEn Xcode: File → Add Packages... → pegue la URL del repositorio:
\nhttps://github.com/kishikawakatsumi/KeychainAccess.git\nSeleccione la versión (generalmente "Up to Next Major" con la última estable) y añada el paquete a su target.
\n\nO añada la dependencia en su 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
\nAñada la línea a su Podfile:
pod 'KeychainAccess'\nLuego ejecute pod install.
3. Carthage
\nAñada al Cartfile:
github "kishikawakatsumi/KeychainAccess"\nLuego ejecute carthage update y añada el framework a su proyecto.
Inicio rápido con KeychainAccess
\n\nDespués de la instalación, importe la biblioteca: import KeychainAccess
El ejemplo más simple: guardar y leer una cadena de texto:
\n\nimport KeychainAccess\n\n// Creamos una instancia para trabajar con el Keychain de la aplicación\nlet keychain = Keychain(service: "com.example.myapp")\n\n// Guardamos un valor\ntry keychain.set("my_secret_password", key: "user_password")\n\n// Leemos el valor\nif let password = try keychain.get("user_password") {\n print("Contraseña encontrada: \\(password)")\n} else {\n print("Contraseña no encontrada")\n}\n\n// Eliminamos el valor\ntry keychain.remove("user_password")\n\nEste código realiza tres operaciones básicas: escritura, lectura y eliminación. Observe el manejo de errores mediante try — las operaciones con Keychain pueden lanzar excepciones (por ejemplo, ante problemas de acceso o ausencia de p