YaniPay pour tvOS
Dashboard financier familial sur Apple TV 4K. Visualisez transactions et budgets sur grand ecran avec tvOS 18+. Ideal pour la gestion financiere partagee.
Overview
YaniPay pour tvOS transforme l'Apple TV en un centre de commande financier familial. Concue pour le grand ecran, l'application offre une vue d'ensemble claire et lisible des finances du foyer, accessible a tous les membres de la famille depuis le salon.
L'interface est entierement optimisee pour la navigation au focus (Siri Remote) avec des elements larges, des contrastes eleves et des animations fluides qui exploitent la puissance de l'Apple TV 4K.
Configuration Requise
- tvOS 18.0 ou superieur
- Apple TV 4K (2e generation ou ulterieure)
- Siri Remote pour la navigation
- Connexion Internet requise
Fonctionnalites Cles
Family Dashboard
Vue financiere partagee pour toute la famille sur grand ecran. Chaque membre voit ses comptes, depenses et budgets dans une interface unifiee et lisible.
Timeline Transactions
Parcourez l'activite financiere recente avec une timeline visuelle. Naviguez chronologiquement dans les transactions avec la Siri Remote.
Controle Parental
Gerez les depenses des enfants directement depuis le canape. Definissez des limites, approuvez des demandes et suivez les habitudes financieres des plus jeunes.
Navigation tvOS
tvOS utilise un systeme de navigation base sur le focus, fondamentalement different du tactile ou de la souris. L'utilisateur deplace le focus entre les elements interactifs avec la surface tactile de la Siri Remote, et les elements selectionnes sont visuellement mis en avant.
Siri Remote
Navigation par surface tactile et boutons physiques. Swipe pour defiler, clic pour selectionner.
Commandes vocales
"Dis Siri, montre les depenses de ce mois." Recherche et navigation par commandes vocales.
Focus Engine
Systeme de focus natif tvOS avec animations de mise en avant sur les elements navigables.
import SwiftUI
import YaniPayCore
struct FamilyDashboardView: View {
@EnvironmentObject var familyManager: FamilyManager
@FocusState private var focusedMember: FamilyMember.ID?
var body: some View {
NavigationStack {
VStack(spacing: 40) {
// Family members row (focusable cards)
ScrollView(.horizontal) {
LazyHStack(spacing: 24) {
ForEach(familyManager.members) { member in
MemberCard(member: member)
.focusable()
.focused($focusedMember, equals: member.id)
.scaleEffect(
focusedMember == member.id ? 1.1 : 1.0
)
.animation(.spring, value: focusedMember)
}
}
.padding(.horizontal, 60)
}
// Transaction timeline
TransactionTimeline(
transactions: familyManager.recentTransactions
)
.focusSection()
// Budget overview
BudgetOverview(
budgets: familyManager.budgets
)
.focusSection()
}
.onPlayPauseCommand {
// Quick action: toggle monthly view
}
.onMoveCommand { direction in
// Custom directional navigation
}
}
}
}
// tvOS Focus-styled card
struct MemberCard: View {
let member: FamilyMember
@Environment(\.isFocused) var isFocused
var body: some View {
VStack(spacing: 12) {
AsyncImage(url: member.avatarURL) { image in
image.resizable()
} placeholder: {
Circle()
.fill(member.themeColor.gradient)
}
.frame(width: 120, height: 120)
.clipShape(Circle())
Text(member.name)
.font(.headline)
Text(member.balance.formatted(.currency(code: "EUR")))
.font(.title2)
.bold()
}
.padding(24)
.background(
RoundedRectangle(cornerRadius: 20)
.fill(isFocused ? .white.opacity(0.15) : .clear)
)
.hoverEffect(.lift)
}
}Design pour le salon
L'interface tvOS utilise des elements surdimensionnes et des contrastes eleves pour garantir la lisibilite a distance (3+ metres). Les textes financiers utilisent une taille minimum de 24pt et les montants sont affiches en gras pour une visibilite optimale.
Statut
L'application tvOS est actuellement en phase experimentale. Le concept a ete valide avec un prototype fonctionnel et le developpement suit la maturite de la plateforme tvOS pour les applications financieres.
Phase Experimentale
tvOS est en phase experimentale. Ideal pour la gestion financiere familiale sur grand ecran. L'application sera disponible lorsque les fonctionnalites de securite biometrique seront pleinement supportees sur Apple TV.
Feuille de route
Securite familiale
Sur tvOS, les operations sensibles (virements, modification de parametres) requierent une confirmation via l'application iPhone liee. Cela garantit que les consultations sur grand ecran restent en lecture seule pour les membres non autorises.
Focus Engine Deep Dive
Le Focus Engine de tvOS est le coeur de toute navigation sur Apple TV. Contrairement aux interfaces tactiles ou a la souris, chaque element interactif doit etre explicitement declaree focusable et repondre aux mouvements de la Siri Remote. YaniPay implementes des animations de focus financierement significatives.
// Focus-based navigation for Siri Remote
struct TransactionRow: View {
let transaction: Transaction
@FocusState private var isFocused: Bool
var body: some View {
HStack {
VStack(alignment: .leading, spacing: 4) {
Text(transaction.description)
.font(.headline)
.foregroundStyle(.primary)
Text(transaction.date.formatted(.dateTime.day().month()))
.font(.caption)
.foregroundStyle(.secondary)
}
Spacer()
Text(transaction.amount, format: .currency(code: "EUR"))
.font(.title3)
.bold()
.foregroundStyle(
transaction.amount < 0 ? .red : .green
)
}
.padding(.horizontal, 32)
.padding(.vertical, 20)
.background(
RoundedRectangle(cornerRadius: 12)
.fill(isFocused ? .white.opacity(0.15) : .clear)
)
.focusable()
.focused($isFocused)
.scaleEffect(isFocused ? 1.05 : 1.0)
.shadow(
color: .black.opacity(isFocused ? 0.3 : 0),
radius: isFocused ? 20 : 0,
y: isFocused ? 10 : 0
)
.animation(.spring(duration: 0.2), value: isFocused)
}
}Regles du Focus Engine
- Tout element interactif doit etre
.focusable() - Grouper les sections avec
.focusSection() - Animation scale entre 1.0 et 1.1 (max 1.15)
- Shadow elevee uniquement sur l'element focused
Commandes Siri Remote
- Swipe : deplacer le focus
- Clic : selectionner / confirmer
- Play/Pause : action contextuelle
- Menu : retour / annuler transaction
Taille minimale des cibles focusables
Apple recommande une taille minimale de 250 x 250 pointspour les elements focusables sur tvOS. Les montants financiers et boutons d'action doivent etre surdimensionnes pour garantir la lisibilite et la precision de navigation depuis le canape.
Family Dashboard
L'Apple TV est un appareil partage au coeur du foyer. YaniPay tvOS propose un systeme de profils familiaux avec des niveaux d'acces differencies, des controles parentaux integres et un commutateur de profil rapide par reconnaissance faciale sur tvOS 17+.
Profils multiples
Jusqu'a 6 profils par Apple TV, chacun avec ses propres comptes, budgets et historiques. Bascule entre profils en 2 clics depuis le menu principal.
Controles parentaux
Limites de depenses quotidiennes et hebdomadaires pour les profils enfants. Approbation parentale requise au-dela du seuil defini. Alertes en temps reel sur l'iPhone parental.
Face Recognition (tvOS 17+)
Bascule automatique de profil par reconnaissance faciale. La camera TrueDepth identifie le membre de la famille devant l'ecran et charge automatiquement son profil financier.
Securite des profils enfants
- Les profils enfants sont en lecture seule par defaut : aucun virement, aucune modification de parametres
- Toute operation financiere requiert la confirmation PIN du parent ou une validation biometrique via iPhone
- Les soldes des adultes sont masques sur les profils enfants
Top Shelf & App Clips
Le Top Shelfest l'espace privilegiee de l'Apple TV : lorsque l'utilisateur met l'app en avant sur son ecran d'accueil, le Top Shelf affiche du contenu dynamique directement visible. YaniPay l'utilise pour un apercu financier instantane.
import TVServices
// Top Shelf widget: balance + recent transactions
class YaniPayTopShelfProvider: TVTopShelfContentProvider {
override func loadTopShelfContent() async -> TVTopShelfContent {
// Fetch balance and last 3 transactions
let balance = await WalletManager.shared.fetchBalance()
let transactions = await TransactionManager.shared.fetchRecent(limit: 3)
// Sectioned content: balance card + transaction shortcuts
let balanceItem = TVTopShelfSectionedItem(identifier: "balance")
balanceItem.displayTitle = "Solde: \(balance.formatted(.currency(code: "EUR")))"
balanceItem.imageURL = await generateBalanceCard(balance: balance)
balanceItem.playAction = TVTopShelfAction(url: URL(string: "yanipay://dashboard")!)
let txItems = transactions.map { tx -> TVTopShelfSectionedItem in
let item = TVTopShelfSectionedItem(identifier: "tx-\(tx.id)")
item.displayTitle = tx.description
item.displaySubtitle = tx.amount.formatted(.currency(code: "EUR"))
item.playAction = TVTopShelfAction(
url: URL(string: "yanipay://transaction/\(tx.id)")!
)
return item
}
let section = TVTopShelfItemCollection(items: [balanceItem] + txItems)
section.title = "YaniPay — Activite recente"
return TVTopShelfSectionedContent(sections: [section])
}
}Mise a jour dynamique du Top Shelf
Appelez TVTopShelfContentProvider.invalidateTopShelfItems() apres chaque transaction pour que le Top Shelf reflote les donnees les plus recentes. La mise a jour est differee par tvOS selon les ressources systeme disponibles — planifiez les refreshs apres les BackgroundTasks, pas en temps reel.
Voice Commands
Siri sur tvOS permet des commandes vocales naturelles pour acceder rapidement aux informations financieres sans toucher a la telecommande. YaniPay enregistre des App Intents personnalises pour les actions les plus frequentes.
// Siri intent: "Hey Siri, check my YaniPay balance"
// Custom intents for common actions
import AppIntents
struct CheckBalanceIntent: AppIntent {
static let title: LocalizedStringResource = "Check Balance"
static let description = IntentDescription(
"Affiche votre solde YaniPay sur Apple TV"
)
func perform() async throws -> some IntentResult & ProvidesDialog {
let balance = await WalletManager.shared.fetchBalance()
let formatted = balance.formatted(.currency(code: "EUR"))
return .result(dialog: "Votre solde est de \(formatted)")
}
}
struct RecentTransactionsIntent: AppIntent {
static let title: LocalizedStringResource = "Recent Transactions"
static let description = IntentDescription(
"Liste les dernieres transactions YaniPay"
)
@Parameter(title: "Nombre", default: 5)
var count: Int
func perform() async throws -> some IntentResult & ProvidesDialog {
let txs = await TransactionManager.shared.fetchRecent(limit: count)
let summary = txs.map { "\($0.description): \($0.amount)€" }.joined(separator: ", ")
return .result(dialog: "Vos \(count) dernieres transactions : \(summary)")
}
}
// Shortcuts App integration
struct YaniPayShortcuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: CheckBalanceIntent(),
phrases: [
"Quel est mon solde \(.applicationName)",
"Montre mon solde \(.applicationName)",
"Check my \(.applicationName) balance"
],
shortTitle: "Solde YaniPay",
systemImageName: "creditcard"
)
}
}Commandes vocales disponibles
References
Documentation officielle Apple pour le developpement tvOS et les technologies utilisees par YaniPay TV.