Skip to content

Instantly share code, notes, and snippets.

@Codelaby
Last active August 1, 2023 10:05
Show Gist options
  • Save Codelaby/5717370187c61cb54ee5c445e5be2d4f to your computer and use it in GitHub Desktop.
Save Codelaby/5717370187c61cb54ee5c445e5be2d4f to your computer and use it in GitHub Desktop.
DSD - lighprice - darkmode

Documento de Diseño: Tema Seleccionable por el Usuario para iOS

Título y Personas

Título: Tema Seleccionable por el Usuario para iOS

App: Precio de la luz

Plataforma: IOS

Autor: Codelaby

Revisores: 01 agosto 2023

Última Actualización: 01 agosto 2023

Resumen

Nuestro objetivo es agregar una función de tema seleccionable por el usuario a nuestra aplicación de iOS, permitiendo a los usuarios elegir entre un tema claro, oscuro o definido por el sistema para la aplicación. Esta función mejorará la experiencia del usuario al proporcionar una apariencia visual personalizada según sus preferencias.

Contexto

La necesidad de este proyecto surge de la creciente demanda de experiencias de usuario personalizables en aplicaciones móviles. Los usuarios tienen diferentes preferencias para los temas de la aplicación, y la falta de opciones de tema puede llevar a una menor satisfacción del usuario. Al implementar esta función, buscamos mejorar la retención y el compromiso del usuario. Además, este proyecto se alinea con el objetivo de nuestro equipo de mejorar la experiencia y la personalización del usuario en nuestra aplicación.

Metas y No Metas

Metas:

  • Permitir a los usuarios seleccionar su tema de aplicación preferido: claro, oscuro o definido por el sistema.
  • Mejorar la satisfacción y el compromiso del usuario al proporcionar una apariencia personalizada para la aplicación.
  • Medir el éxito mediante el seguimiento del compromiso del usuario, la retención y los comentarios a través de métricas dentro de la aplicación.

No Metas:

  • Implementar opciones de personalización de temas complejas más allá de los temas predefinidos claro, oscuro y del sistema.
  • Realizar cambios importantes en el diseño y la distribución actual de la aplicación.

Hitos

  • Fecha de Inicio: 01 de agosto 2023
  • Hito 1 — Agregar selector de temas en Configuración: 01 de agosto 2023
  • Hito 2 — Implementar temas claro (claro) y oscuro (oscuro): 01 de agosto 2023
  • Hito 3 — Integración del tema con el tema definido por el sistema: 01 de agosto 2023
  • Fecha de Finalización: 01 de agosto 2023

[Actualización] A medida que avanzamos, las fechas de los hitos pueden cambiar según los comentarios y el progreso del desarrollo.

Solución Existente

Actualmente, nuestra aplicación de iOS sigue un tema fijo basado en la configuración de luz o oscuridad del dispositivo. No hay opción para que los usuarios personalicen el tema de la aplicación.

Solución Propuesta

Historia de Usuario:

Alice, una usuaria de nuestra aplicación, accede a la página de Configuración y encuentra una nueva sección titulada "Preferencias de Tema". En esta sección, ve tres opciones: "Tema Claro" (claro), "Tema Oscuro" (oscuro) y "Tema del Sistema" (basado en la configuración de su dispositivo). Alice selecciona su tema preferido y, al volver a la aplicación, experimenta la aplicación con el tema que ha elegido.

Arquitectura Técnica:

  • Introducir una nueva vista de "Configuración de Tema" en la página de Configuración, que permita a los usuarios seleccionar su tema preferido.
  • Implementar un administrador de temas para manejar los cambios de tema y aplicar el tema seleccionado en toda la aplicación.
  • Utilizar API integradas de iOS para alternar entre temas claros y oscuros y sincronizar con el tema del sistema.

Alternativas Consideradas

Consideramos la posibilidad de implementar la creación de temas personalizados, pero esto agregaría complejidad y tiempo de desarrollo, lo que va más allá del alcance del proyecto. Utilizar el tema del sistema del dispositivo proporciona una experiencia óptima para el usuario con un esfuerzo mínimo.

Pruebas, Monitoreo y Alertas

  • Se realizarán pruebas exhaustivas para garantizar que los cambios de tema se apliquen de manera consistente en toda la aplicación.
  • El seguimiento de los comentarios de los usuarios y las métricas de la aplicación ayudarán a evaluar la satisfacción y el compromiso del usuario con la nueva función.
  • Se configurarán mecanismos de alerta para detectar cualquier comportamiento inesperado relacionado con los cambios de tema.

Impacto en Otros Equipos

  • La carga de trabajo de atención y operaciones no se verá afectada, ya que esta función no introduce cambios complejos en el servidor.
  • El costo de implementación será mínimo, ya que aprovecha las API integradas de iOS.
  • El rendimiento de la aplicación no se verá afectado por los cambios de tema.
  • No se esperan vulnerabilidades de seguridad asociadas con esta función.

Preguntas Pendientes

  • ¿Cómo podemos manejar posibles conflictos con ciertos elementos de la aplicación y esquemas de color para temas personalizados?
  • ¿Deberíamos proporcionar indicadores visuales adicionales para mostrar el tema seleccionado dentro de la aplicación?

Detalles de Planificación y Cronograma

Configurar el selector de tema en la vista de configuración.

  • Implementar el selector del tema claro y oscuro en la pantalla ajustes.
enum Theme: String {
    case light, dark, auto
}

struct SettingsView: View {
    @AppStorage("selectedTheme") var selectedTheme: Theme = .auto
    
    var body: some View {
        Form  {
            Section(header: Text("Customization")) {
                Picker(selection: $selectedTheme, label: Text("Appearance")) {
                    Text("Light").tag(Theme.light)
                    Text("Dark").tag(Theme.dark)
                    Text("Auto").tag(Theme.auto)
                }
                .padding()
            }
        }
        .preferredColorScheme(selectedTheme == .auto ? .none : selectedTheme == .dark ? .dark : .light)
    }
}
  • Implementar el tema claro y oscuro en las pantallas de la aplicación
  • Agregar indicadores visuales para mostrar el tema seleccionado.
struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme
    @AppStorage("selectedTheme") var selectedTheme: Theme = .auto
    
    var body: some View {
        NavigationView {
            VStack {
                Text("Hello, World!")
                    .navigationBarTitle("Dark Theme Switch")
                
                Text("Dark mode is: \(colorScheme == .dark ? "active" : "not active")")

            }
            .navigationBarItems(trailing: settingsButton)
        }
    }
    
    private var settingsButton: some View {
        NavigationLink(destination: ThemeSelectorView()) {
            Image(systemName: "gear")
        }
    }
}
  • Sincronizar el tema con la configuración del sistema.
        .preferredColorScheme(selectedTheme == .auto ? .none : selectedTheme == .dark ? .dark : .light)
  • Realizar pruebas exhaustivas para asegurar la consistencia del tema en toda la aplicación.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment