%205.17.08%E2%80%AFp.m..png)
En este proyecto, desarrollamos una aplicación en Xcode que permite a los usuarios iniciar sesión utilizando credenciales almacenadas en un archivo TXT. A diferencia de las bases de datos tradicionales, esta implementación es útil para proyectos pequeños o aplicaciones offline, donde no se requiere un backend complejo.
🛠 Tecnologías Utilizadas
Para la creación de este proyecto usamos las siguientes tecnologías:
✅ Xcode – Entorno de desarrollo para aplicaciones iOS.
✅ Swift 5 – Lenguaje de programación utilizado.
✅ SwiftUI – Framework para la interfaz de usuario.
✅ File Handling en Swift – Lectura de archivos locales en iOS.
🏗 Estructura del Proyecto
El proyecto consta de tres archivos principales:
1. usuarios.txt – Contiene los nombres de usuario y contraseñas.
2. LoginViewModel.swift – Lógica para la autenticación y lectura del archivo TXT.
3. ContentView.swift – Interfaz de usuario para el login.
📂 Archivo de Usuarios (usuarios.txt)
Este archivo almacena las credenciales de los usuarios en formato “usuario,contraseña”:
valencia,contrasena123
usuario2,password456
admin,adminpass
📌 Ubicación: Se encuentra dentro del bundle del proyecto en Xcode.
⚙ Implementación del Login en SwiftUI
📌 1. LoginViewModel.swift (Lógica del Login)
Este archivo se encarga de leer el archivo TXT y verificar si el usuario ingresado es válido.
import Foundation
class LoginViewModel: ObservableObject {
@Published var username: String = ""
@Published var password: String = ""
@Published var isAuthenticated: Bool = false
@Published var errorMessage: String?
func login() {
guard let credentials = readCredentials() else {
errorMessage = "Error al leer el archivo."
return
}
if credentials.contains("\(username),\(password)") {
isAuthenticated = true
errorMessage = nil
} else {
errorMessage = "Usuario o contraseña incorrectos."
}
}
private func readCredentials() -> String? {
guard let path = Bundle.main.path(forResource: "usuarios", ofType: "txt") else {
return nil
}
return try? String(contentsOfFile: path, encoding: .utf8)
}
}
🔹 ¿Qué hace este código?
✅ Lee el archivo usuarios.txt para obtener la lista de credenciales.
✅ Compara los datos ingresados con las credenciales almacenadas.
✅ Muestra un mensaje de error si los datos no coinciden.
📌 2. ContentView.swift (Interfaz de Usuario del Login)
Este archivo contiene la pantalla de inicio de sesión en SwiftUI.
import SwiftUI
struct ContentView: View {
@StateObject private var viewModel = LoginViewModel()
var body: some View {
VStack {
Text("Login")
.font(.largeTitle)
.bold()
.padding(.bottom, 20)
TextField("Usuario", text: $viewModel.username)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
SecureField("Contraseña", text: $viewModel.password)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
if let errorMessage = viewModel.errorMessage {
Text(errorMessage)
.foregroundColor(.red)
.padding()
}
Button(action: {
viewModel.login()
}) {
Text("Iniciar sesión")
.frame(maxWidth: .infinity)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
.padding()
if viewModel.isAuthenticated {
Text("✅ Acceso permitido")
.foregroundColor(.green)
.padding()
}
}
.padding()
}
}
🔹 ¿Qué hace este código?
✅ Crea los campos de entrada de usuario y contraseña.
✅ Muestra mensajes de error si el login es incorrecto.
✅ Muestra un mensaje de éxito si el login es correcto.
✅ Usa LoginViewModel para validar los datos ingresados.
🎯 Funcionamiento del Proyecto
📌 1. El usuario ingresa su nombre y contraseña.
📌 2. Se verifica si existe en el archivo usuarios.txt.
📌 3. Si las credenciales son correctas, se muestra un mensaje de “Acceso permitido”.
📌 4. Si son incorrectas, se muestra un mensaje de error.
🚀 Posibles Mejoras
Este proyecto se puede expandir con funcionalidades adicionales, como:
✔ Persistencia con UserDefaults o Core Data.
✔ Interfaz con animaciones y temas oscuros.
✔ Redirección a una pantalla de bienvenida tras el login exitoso.
📌 Conclusión
Este proyecto demuestra cómo crear un sistema de autenticación básico en SwiftUI utilizando un archivo TXT en lugar de bases de datos más complejas. Es una solución práctica para aplicaciones pequeñas o de prueba donde no se necesita almacenamiento en la nube.
No hay comentarios