Bonjour à tous !
J’aimerais partager Dexo, un client natif iOS pour les forums Discourse que je construis avec UIKit et Swift.
Captures d’écran
Fonctionnalités
- Gestion Multi-Forums — Ajouter, basculer entre et supprimer plusieurs instances Discourse dans une seule application
- Navigation dans les Sujets — Listes des sujets Récents et Meilleurs avec défilement infini
- Catégories & Tags — Parcourir les sujets par catégorie ou tag
- Détail du Sujet — Rendu complet du contenu HTML avec visionneuse d’images, blocs de code avec coloration syntaxique et sections réductibles
- Répondre — Répondre aux sujets ou à un message spécifique
- Authentification Sécurisée — Utilise le flux de clé d’API utilisateur de Discourse avec chiffrement RSA ; les informations d’identification sont stockées dans le Trousseau d’iOS (iOS Keychain)
- Apparence — Mode Système / Clair / Sombre
Prévu
- Notifications et messages privés
- Création de sujets
Pile Technologique (Tech Stack)
| Composant | Détail |
|---|---|
| Langage | Swift 5 |
| Framework UI | UIKit |
| Cible Minimale | iOS 17.0 |
| Architecture | MVVM + @Observable |
| Base de données | SQLite (GRDB) |
| Réseau (Networking) | Alamofire |
| Chargement d’Images | SDWebImage |
Comment fonctionne l’authentification
Dexo suit la spécification de la Clé d’API Utilisateur de Discourse. Il génère une paire de clés RSA sur l’appareil, envoie la clé publique à votre instance Discourse pour autorisation, et stocke la clé API résultante de manière sécurisée dans le Trousseau d’iOS (iOS Keychain). Aucun mot de passe n’est stocké sur l’appareil.
TestFlight
Code Source
Le projet est entièrement open source :
Construire à partir des Sources
Nécessite Xcode 16+ et mise :
make setup # Installe les outils, récupère les dépendances, génère le projet Xcode
Puis ouvrez dexo.xcodeproj, sélectionnez votre équipe de développement et exécutez.
Retour d’information
Ceci est toujours un travail en cours.
J’aimerais avoir vos retours, demandes de fonctionnalités ou rapports de bugs.
N’hésitez pas à répondre ici ou à ouvrir un ticket sur GitHub.


