EvenBetter é um aplicativo de iOS que oferece suporte ao usuário em sua jornada de bem-estar pessoal e produtividade, através de um conjunto de ferramentas intuitivas e acessíveis.
- Demonstração
- Instalação
- Uso
- Funcionalidades
- Tecnologias Utilizadas
- Modelagem das Classes
- Planos futuros
Aqui estão alguns screenshots e GIFs do aplicativo em ação:
Para configurar o projeto localmente, siga os passos abaixo:
- Clone o repositório:
git clone https://github.com/usuario/evenbetter.git cd evenbetter open evenbetter.xcodeproj Cmd + R
Para utilizar o aplicativo, siga os passos abaixo:
- Abra o aplicativo.
- Navegue até a tela principal.
- Siga as instruções na tela para utilizar as funcionalidades.
- Gestão de Tarefas: Adicione, edite e exclua tarefas.
- Desafios Diários: Complete desafios diários para um estilo de vida saudável.
- Player para Meditação: Ouça faixas relaxantes de meditação.
- Registro de Humor e Bem-estar: Registre seu humor e bem-estar diário.
SwiftUI é uma framework da Apple para construir interfaces de usuário declarativas. Ele permite a criação de UIs dinâmicas e responsivas de forma rápida e eficiente, utilizando uma sintaxe simples e intuitiva.
Swift é uma linguagem de programação poderosa e intuitiva desenvolvida pela Apple. Ela é usada para criar aplicativos para iOS, macOS, watchOS e tvOS. Swift é conhecida por sua segurança, performance e facilidade de uso.
Combine é uma framework de programação reativa da Apple. Ela permite que os desenvolvedores manipulem e processem valores assíncronos ao longo do tempo, facilitando a gestão de eventos e dados assíncronos.
SwiftData é uma maneira rápida, poderosa e fácil de usar para armazenar dados localmente. Ele permite a criação de objetos personalizados, definição de relacionamentos, recuperação com filtragem e classificação, e sincronização com o iCloud usando CloudKit.
CloudKit é a framework de serviços em nuvem da Apple. Ela permite que os desenvolvedores armazenem e gerenciem dados na nuvem, facilitando a sincronização de dados entre vários dispositivos. CloudKit oferece suporte a cache offline mínimo e depende da rede e de uma conta iCloud válida para armazenar dados específicos do usuário.
enum TaskStatus {
case completed, uncompleted
}
@Model
final class TaskModel {
var title: String
var summary: String
var hour: Date
var isCompleted: Bool = false
var color: String
}
enum MoodType: String, Codable {
case feliz = "Feliz"
case triste = "Triste"
case ansioso = "Ansioso"
case motivado = "Motivado"
case bravo = "Bravo"
case cansado = "Cansado"
case all
}
struct Mood: Identifiable, Equatable {
let id = UUID()
let type: MoodType
var name: String {
return self.type.rawValue
}
let description: String
let image: Image
struct MeditationDO: Identifiable {
let id = UUID()
let title: String
let description: String
let duration: TimeInterval
let track: String
let image: Image
}
import Foundation
import AVKit
final class AudioManager: ObservableObject {
var player: AVAudioPlayer?
@Published private(set) var isPlaying: Bool = false
@Published private(set) var isLooping: Bool = false
func startPlayer(track: String, isPreview: Bool = false) {
guard let url = Bundle.main.url(forResource: track, withExtension: "mp3") else {
print("Resource not found: \(track)")
return
}
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(contentsOf: url)
if isPreview {
player?.prepareToPlay()
} else {
player?.play()
isPlaying = true
}
} catch {
print("Fail to initialize player", error)
}
}
func playPause() {
guard let player = player else {
print("Instance of audio player not found")
return
}
if player.isPlaying {
player.pause()
isPlaying = false
} else {
player.play()
isPlaying = true
}
}
func stop() {
guard let player = player else { return }
if player.isPlaying {
player.stop()
isPlaying = false
}
}
func toggleLoop() {
guard let player = player else { return }
player.numberOfLoops = player.numberOfLoops == 0 ? -1 : 0
isLooping = player.numberOfLoops != 0
}
}
Estamos quase prontos para lançar nosso MVP. Atualmente, estamos na fase 0.8, o que significa que estamos muito próximos de uma versão 1.0, mas ainda há algumas áreas que precisam de melhorias e ajustes. Entre as principais tarefas pendentes estão:
- Sistema de Gerar Desafios: Melhorar a lógica e adicionar mais desafios para oferecer uma experiência mais rica aos usuários.
- Sistema de Tarefas: Implementar duas queries diferentes para tipos distintos de tarefas, aprimorando a funcionalidade e a usabilidade do sistema.
- Fazer streaming de faixas de meditação
- Sistema contendo mais "variaveis" para alocar a tarefa, como tipo da atividade etc...
- Desafios de atividades físicas baseam-se no HealthKit para ter dados mais precisos
- Nova aba contendo "ensinamentos" e motivacionais
print("Feito com ❤️ por Mello e Dani")