NoSubVOD iOS est le client mobile natif de NoSubVOD, écrit entièrement en Swift. Il permet de lire des VODs et des lives Twitch depuis une interface iOS optimisée et fluide. Initialement basé sur Tauri et Rust, le projet a été intégralement migré vers une architecture native iOS avec Swift 6 pour offrir les meilleures performances et la meilleure intégration possible avec l'écosystème Apple.
La version Beta 1.0.0 marque une refonte totale de l'application, abandonnant l'ancienne stack web/Tauri au profit du natif.
- Architecture Native iOS : Refonte complète de l'interface en SwiftUI, offrant des animations fluides, des performances accrues et un respect des guidelines Apple.
- Performances Optimales : Concurrency moderne avec Swift 6, tâches asynchrones, et gestion optimisée de la mémoire (Actors).
- Lecteur Vidéo Repensé : Utilisation de
AVPlayerpour une lecture VOD et Live robuste, prise en charge du Picture in Picture (PiP), et intégration native des contrôles de lecture. - Base de Données Locale : Migration vers SwiftData avec des opérations asynchrones (ModelActor) pour une persistance fluide sans bloquer l'interface utilisateur.
- Téléchargements Améliorés :
DownloadManagerrepensé avecURLSessionen arrière-plan pour des téléchargements fiables de VOD, même avec l'application fermée.
- Lecture des VODs avec support des segments HLS.
- Lecture des lives Twitch fluides.
- Clips Twitch : Prise en charge de la lecture et navigation des clips.
- Mode Hors Ligne : Interface dédiée pour accéder et visionner vos vidéos téléchargées localement sans connexion Internet.
- Navigation complète : Accueil, Live, Recherche, Tendances, Chaînes, Lecteur.
- Lecteur basé sur
AVFoundationavec contrôles natifs et personnalisés (play/pause, seek, volume). - Support du Picture in Picture (PiP) natif d'iOS.
- Qualité adaptative (HLS) et possibilité de basculer en mode audio pour économiser les données.
- Prise en charge parfaite des Safe Areas et de l'encoche/Dynamic Island de l'iPhone/iPad.
- Replay de chat synchronisé pour les VODs.
- Historique de lecture intelligent pour reprendre vos vidéos là où vous vous étiez arrêté.
- Suivi des chaînes et persistance des données via SwiftData asynchrone.
- Langage : Swift 6
- Interface : SwiftUI
- Base de données : SwiftData
- Réseau : Apollo GraphQL & API REST Twitch (
URLSession) - Média : AVFoundation (
AVPlayer,AVPlayerViewController) - Architecture : MVVM (Model-View-ViewModel)
- Déploiement : iOS 17.0+
Sources/: Code source de l'application (SwiftUI, Modèles, Managers, etc.)Info.plist: Fichier de configuration de l'applicationproject.yml: Configuration XcodeGen pour la génération du projet Xcodebuild_ipa.sh: Script de build CI/CD
- macOS avec Xcode 16.0+ (pour le support complet de Swift 6)
- xcodegen (installable via Homebrew :
brew install xcodegen) - Compte Développeur Apple (optionnel, pour l'installation sur un appareil physique sans AltStore)
- Générez le projet Xcode à l'aide de XcodeGen :
xcodegen generate
- Ouvrez le projet généré dans Xcode :
open NoSubVod.xcodeproj
- Sélectionnez le simulateur ou votre appareil physique.
- Cliquez sur le bouton "Run" (
▶️ ) ou utilisez le raccourciCmd + R.
Dans la console développeur Twitch, configurez votre application et récupérez les identifiants nécessaires pour permettre l'authentification des utilisateurs.
Le script build_ipa.sh permet de générer une archive .ipa non signée, destinée à être installée via des outils tiers (AltStore, SideStore, TrollStore).
./build_ipa.shL'artefact sera généré dans le répertoire build/.
- L'application communique avec l'API de Twitch et peut être sujette à des limites de taux de requêtes (rate limiting).
- L'architecture
ModelActorest utilisée pour déporter les tâches lourdes de la base de données hors duMainActor.
Développé avec ❤️ par Theorhd