YaniPay pour macOS
Dashboard fintech desktop-class pour macOS Sequoia 15+. Architecture SPM-based, interface native SwiftUI avec integration barre de menus et raccourcis clavier avances.
Overview
YaniPay pour macOS apporte l'experience financiere YaniPay sur le bureau. Concue comme une application SwiftUI native (sans Catalyst), elle tire parti de la puissance des Mac Apple Silicon pour offrir un dashboard financier fluide et reactif.
L'application repose sur une architecture Swift Package Manager (SPM) sans fichier .xcodeprojtraditionnel, facilitant la maintenance, les tests et l'integration continue. Le framework partage YaniPayCore fournit les models, protocols et services metier identiques a ceux des autres plateformes Apple.
Configuration Requise
- macOS Sequoia 15.0 ou superieur
- Mac avec puce Apple Silicon (M1+) recommande
- Macs Intel (x86_64) supportes via Rosetta 2
- Touch ID optionnel pour l'authentification biometrique
Fonctionnalites Cles
Desktop Dashboard
Vue financiere complete en plein ecran. Graphiques interactifs, tableaux de donnees et resume de patrimoine sur un affichage haute resolution.
Menu Bar Widget
Acces rapide au solde et aux notifications depuis la barre de menus macOS. Consultez vos alertes de transactions sans ouvrir l'application.
Raccourcis Clavier
Workflow power-user avec raccourcis clavier complets. Naviguez, recherchez et executez des operations sans quitter le clavier.
macOS Natif
Application 100% SwiftUI native, sans Catalyst. Menus, barre d'outils, preferences systeme et integration Finder nativement supportes.
Architecture
L'application macOS utilise une architecture SPM pure, sans fichier Xcode project. Le point d'entree est un Package.swift qui declare les dependances et les targets, incluant le framework partage YaniPayCore.
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "YaniPayMac",
platforms: [
.macOS(.v15)
],
dependencies: [
.package(path: "../YaniPayCore"),
],
targets: [
.executableTarget(
name: "YaniPayMac",
dependencies: [
.product(name: "YaniPayCore", package: "YaniPayCore"),
],
path: "Sources",
swiftSettings: [
.enableExperimentalFeature("StrictConcurrency")
]
),
.testTarget(
name: "YaniPayMacTests",
dependencies: ["YaniPayMac"]
),
]
)import SwiftUI
import YaniPayCore
@main
struct YaniPayMacApp: App {
@StateObject private var authManager = AuthManager()
@StateObject private var walletManager = WalletManager()
var body: some Scene {
// Main Window
WindowGroup {
ContentView()
.environmentObject(authManager)
.environmentObject(walletManager)
}
.windowStyle(.titleBar)
.defaultSize(width: 1200, height: 800)
.commands {
CommandGroup(replacing: .newItem) {
Button("Nouveau Virement") {
// Handle new transfer
}
.keyboardShortcut("n", modifiers: .command)
}
CommandMenu("Transactions") {
Button("Rechercher...") { }
.keyboardShortcut("f", modifiers: .command)
Divider()
Button("Exporter CSV") { }
.keyboardShortcut("e", modifiers: [.command, .shift])
}
}
// Menu Bar Extra
MenuBarExtra("YaniPay", systemImage: "creditcard.fill") {
MenuBarView()
.environmentObject(walletManager)
}
.menuBarExtraStyle(.window)
// Settings
Settings {
SettingsView()
.environmentObject(authManager)
}
}
}YaniPayCore
Framework partage : Models, Protocols, Services, Managers. Identique a toutes les plateformes.
SwiftUI Views
Interface declarative macOS avec NavigationSplitView, Tables et Inspector natifs.
SPM Build
Build et test via swift build /swift test sans Xcode project.
Build sans Xcode
L'architecture SPM pure permet de compiler et tester l'application directement depuis le terminal avec swift build et swift test, facilitant l'integration CI/CD sans necessite d'ouvrir Xcode.
Statut & Roadmap
L'application macOS est actuellement en phase Beta. Le developpement suit une approche incrementale en 3 phases, avec un focus initial sur les fondations architecturales et l'experience dashboard.
Version Beta
L'application macOS est en developpement actif. Certaines fonctionnalites peuvent etre instables ou incompletes. Vos retours sont precieux pour ameliorer l'experience.
Foundation
- Architecture SPM
- Dashboard de base
- Authentification biometrique (Touch ID)
Core Features
- Menu Bar widget
- Notifications natives
- Raccourcis clavier complets
Advanced
- Shortcuts (Automator)
- Partage AirDrop
- Extension Finder pour recus
Menu Bar Widget
Le widget Menu Bar donne acces instantane au solde et aux actions rapides depuis la barre de menus macOS, sans ouvrir le dashboard complet. Il repose sur MenuBarExtra, disponible depuis macOS 13 Ventura, et utilise le style .window pour afficher un popover redimensionnable.
@main struct YaniPayMacApp: App {
var body: some Scene {
MenuBarExtra("YaniPay", systemImage: "creditcard.fill") {
VStack(spacing: 12) {
BalanceView()
Divider()
Button("Send Payment") { openWindow(id: "payment") }
Button("View History") { openWindow(id: "history") }
Divider()
Button("Quit") { NSApplication.shared.terminate(nil) }
}
.frame(width: 280)
}
.menuBarExtraStyle(.window)
WindowGroup("Dashboard", id: "dashboard") { DashboardView() }
Settings { SettingsView() }
}
}openWindow environment action
Utilisez @Environment(\.openWindow) var openWindow dans la vue Menu Bar pour ouvrir les fenetres nommees (payment, history, dashboard) depuis le widget sans couplage fort.
Acces instantane
Solde en temps reel visible depuis la barre de menus sans ouvrir l'application principale.
Style .window
Popover SwiftUI natif, redimensionnable, avec support du Dark Mode et des themes systeme.
Actions rapides
Envoi de paiement, consultation de l'historique et acces aux parametres en un clic.
Keyboard Shortcuts
YaniPay pour macOS offre un jeu complet de raccourcis clavier pour un workflow power-user. Les raccourcis sont declares avec le modificateur .keyboardShortcut() sur les boutons et commandes SwiftUI, et sont integres au menu systeme pour la decouverte automatique.
// Declare dans le bloc .commands {} de la Scene principale
CommandGroup(replacing: .newItem) {
Button("Nouveau Paiement") { /* ... */ }
.keyboardShortcut("n", modifiers: [.command]) // Cmd+N
}
CommandMenu("Transactions") {
Button("Actualiser le solde") { /* ... */ }
.keyboardShortcut("r", modifiers: [.command]) // Cmd+R
Button("Rechercher...") { /* ... */ }
.keyboardShortcut("f", modifiers: [.command]) // Cmd+F
Divider()
Button("Exporter CSV") { /* ... */ }
.keyboardShortcut("e", modifiers: [.command, .shift]) // Cmd+Shift+E
}
// Les Preferences s'ouvrent automatiquement avec Cmd+,
// grace au scene Settings { SettingsView() }| Raccourci | Action | Contexte |
|---|---|---|
Cmd + N | Nouveau paiement | Global |
Cmd + R | Actualiser le solde | Global |
Cmd + , | Preferences | Global |
Cmd + F | Rechercher transactions | Dashboard |
Cmd + Shift + E | Exporter CSV | Dashboard |
Cmd + W | Fermer la fenetre | Global |
Cmd + Q | Quitter YaniPay | Global |
Escape | Annuler / Fermer popover | Modal / Menu Bar |
Native macOS Features
En tant qu'application SwiftUI native, YaniPay tire pleinement parti des fonctionnalites systeme de macOS : centre de notifications, Spotlight, Touch Bar et badge Dock.
Notification Center
Widgets interactifs affichant le solde, les dernieres transactions et les alertes de depenses dans le centre de notifications macOS. Supporte les actions directement depuis la notification (confirmer un paiement, voir les details).
Spotlight Integration
Les transactions sont indexees via CoreSpotlightpour une recherche instantanee depuis Spotlight. Tapez un montant, un beneficiaire ou une date pour retrouver une transaction sans ouvrir l'application.
Touch Bar (Legacy)
Support de la Touch Bar pour les MacBooks Intel compatibles. Affiche les actions contextuelles (confirmer, annuler, voir solde) et s'adapte a la vue active dans le dashboard.
Dock Badge
Le badge Dock affiche le nombre de notifications non lues. Mis a jour en temps reel via le service de push YaniPay sans necessiter d'ouvrir l'application.
import AppKit
/// Met a jour le badge Dock avec le nombre de notifications non lues.
func updateDockBadge(unreadCount: Int) {
if unreadCount > 0 {
NSApp.dockTile.badgeLabel = "\(unreadCount)"
} else {
NSApp.dockTile.badgeLabel = nil // Supprime le badge
}
}
// Appel depuis le service de notifications
NotificationService.shared.onUnreadCountChanged = { count in
DispatchQueue.main.async {
updateDockBadge(unreadCount: count)
}
}CoreSpotlight — Indexation des transactions
Utilisez CSSearchableItem et CSSearchableIndex pour indexer chaque transaction apres synchronisation. Definissez CSSearchableItemAttributeSet avec le montant, la date et le beneficiaire pour des resultats Spotlight riches.
Catalyst vs Native
Apple propose deux approches pour porter une application iOS sur macOS : Mac Catalyst (adaptation automatique de UIKit/SwiftUI iOS) et SwiftUI natif macOS (reecriture tirant parti des APIs Mac). YaniPay a fait le choix du SwiftUI natif.
| Critere | Mac Catalyst | SwiftUI Natif (choix YaniPay) |
|---|---|---|
| Menu Bar (MenuBarExtra) | Non supporte | Support natif complet |
| Window management | Limite (UIScene) | Multi-fenetres, Inspector, Split |
| Raccourcis clavier | Partiel | Commands menu systeme complet |
| Effort de developpement | Faible (portage rapide) | Moyen (reecriture UI Mac) |
| UX fidelite macOS HIG | Moyenne (UI iOS adaptee) | Maximale (composants Mac natifs) |
| Partage de code metier | Eleve (meme target) | Eleve (via YaniPayCore SPM) |
| Acces APIs Mac (Dock, Spotlight) | Restreint | Complet (AppKit + SwiftUI) |
Choix YaniPay : SwiftUI Natif
YaniPay a choisi le SwiftUI natif pour trois raisons principales : le Menu Bar widget (impossible avec Catalyst), la gestion multi-fenetres (dashboard, paiement, historique en fenetres separees) et la fidelite HIG macOS (Navigation Split View, Tables, Inspector). Le code metier reste partage a 100% via YaniPayCore.
Security on macOS
La securite de YaniPay sur macOS s'appuie sur les mecanismes systeme d'Apple : Keychain Services, Gatekeeper, sandboxing App Store et Touch ID. Ces couches complementaires assurent une protection des donnees equivalente a celle de l'application iOS.
Keychain Services
Les tokens d'acces et secrets cryptographiques sont stockes dans le Keychain systeme. Avec iCloud Keychain active, le trousseau est partage de facon securisee entre l'iPhone, l'iPad et le Mac de l'utilisateur.
Touch ID (T2 / M1+)
Sur les MacBooks equipes d'une puce T2 ou Apple Silicon (M1+), l'authentification biometrique est disponible via LocalAuthentication.framework. Utilisee pour deverrouiller l'application et confirmer les paiements sensibles.
Gatekeeper & Notarisation
L'application est signee avec un Developer ID Apple et notarisee par les serveurs Apple avant distribution. Gatekeeper verifie la signature et la notarisation a chaque lancement pour garantir l'integrite du binaire.
App Sandbox
Le sandboxing App Store limite l'acces de l'application au systeme de fichiers, reseau et peripheriques. YaniPay declare uniquement les entitlements necessaires : acces reseau sortant, Keychain et notifications push.
import LocalAuthentication
/// Authentifie l'utilisateur avec Touch ID ou Face ID.
func authenticateWithBiometrics() async throws {
let context = LAContext()
var error: NSError?
guard context.canEvaluatePolicy(
.deviceOwnerAuthenticationWithBiometrics,
error: &error
) else {
throw BiometricError.notAvailable
}
let reason = "Confirmez votre identite pour acceder a YaniPay"
let success = try await context.evaluatePolicy(
.deviceOwnerAuthenticationWithBiometrics,
localizedReason: reason
)
guard success else { throw BiometricError.failed }
}Entitlements requis pour le sandboxing
Ajoutez les entitlements suivants dans le fichier .entitlements de la target macOS :
com.apple.security.app-sandbox→truecom.apple.security.network.client→truecom.apple.security.device.biometric(Touch ID)com.apple.security.keychain-access-groups(iCloud Keychain partage)
References
Documentation officielle Apple et ressources complementaires pour le developpement de l'application macOS YaniPay.
macOS Human Interface Guidelines
Directives de conception Apple pour les applications macOS : fenetres, menus, raccourcis, typographie et integration systeme.
MenuBarExtra
Documentation de reference SwiftUI pour MenuBarExtra, le composant Scene permettant de creer des widgets dans la barre de menus macOS.
macOS Distribution
Guide de distribution des applications macOS : notarisation, signature Developer ID, App Store et TestFlight pour Mac.
Autres ressources utiles
- CoreSpotlight —
developer.apple.com/documentation/corespotlight: indexation de contenu pour Spotlight - LocalAuthentication —
developer.apple.com/documentation/localauthentication: Touch ID et Face ID - Swift Package Manager —
swift.org/package-manager: documentation officielle SPM - App Sandbox Design Guide —
developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide