108 lines
5.0 KiB
Markdown
108 lines
5.0 KiB
Markdown
# jellypig tvOS Alpha 1 Release
|
|
|
|
**Release Date**: October 17, 2025
|
|
**Base Version**: Swiftfin 1.3
|
|
**Branch**: jellypig-1.3
|
|
**License**: MPL-2.0
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
jellypig is a personal fork of [Jellyfin/Swiftfin](https://github.com/jellyfin/swiftfin) optimized for tvOS with specialized support for Jellyfin.Xtream plugin content. This alpha1 release represents a stable, working build that plays everything upstream Swiftfin on tvOS plays **and more**, with an elegant native UI maintained by the Swiftfin development team.
|
|
|
|
## Key Features
|
|
|
|
### ✅ What Works
|
|
- **Full Jellyfin Playback**: All standard Jellyfin content (movies, series, live TV) plays correctly
|
|
- **Xtream Content Support**: Properly displays and plays Xtream VOD and Series content from Jellyfin.Xtream plugin
|
|
- **Channel Navigation**: Fixed channel browsing with proper grid view for categories and content
|
|
- **Full-Screen Navigation**: All views display full-screen (no modal popups)
|
|
- **Video Playback Controls**: ESC key properly shows controls and allows exit with confirmation
|
|
- **Native UI**: Maintains the elegant, native tvOS interface from upstream Swiftfin
|
|
|
|
### 🎯 Major Improvements Over Upstream
|
|
1. **Xtream Content Listing**: Fixed channel folder navigation to use proper Jellyfin Channel API endpoints
|
|
- Xtream VOD and Xtream Series channels now display correct, distinct content
|
|
- Channel folders display in grid view matching library behavior
|
|
|
|
2. **tvOS Navigation Architecture**: Restructured routing to fix modal popup issues
|
|
- Channels, items, and content display full-screen using `.push` navigation
|
|
- MediaCoordinator uses `.fullScreen` to prevent navigation stack corruption
|
|
- Video player properly stops on dismiss (no background playback)
|
|
|
|
3. **Leaner Codebase**: Removed entire iOS build and code (28,370+ deletions)
|
|
- tvOS-only focus reduces complexity
|
|
- Faster build times and easier maintenance
|
|
- Single target: `jellypig tvOS`
|
|
|
|
## Technical Changes
|
|
|
|
### Core Fixes
|
|
- **ItemLibraryViewModel.swift**: Implements proper channel API routing (`/Channels/{channelID}/Items`)
|
|
- **PagingLibraryView.swift**: Added `.channelFolderItem` support for grid view display
|
|
- **MainCoordinator.swift**: Restructured MediaCoordinator routing with `.fullScreen` navigation
|
|
- **ItemView.swift**: Removed `.channelFolderItem` handling (delegates to library view)
|
|
|
|
### Project Configuration
|
|
- **Bundle ID**: `org.ashik.jellypig`
|
|
- **Project Name**: jellypig (renamed from Swiftfin)
|
|
- **Targets**: tvOS only (iOS removed)
|
|
- **CI/CD**: Updated GitHub Actions workflows for jellypig tvOS builds
|
|
- **Dependencies**: Properly configured VLCKit (TVVLCKit.xcframework v3.5.0)
|
|
|
|
## Known Limitations
|
|
|
|
### Acceptable Trade-offs
|
|
- **Error Dismissal**: Errors in deeply nested views (e.g., failed episode playback) dismiss all the way to Media tab instead of one level back
|
|
- This is a limitation of `.fullScreen` presentation architecture
|
|
- Prevents worse issue of returning to Home screen
|
|
|
|
- **Video Player Back Button**: Slightly "buggy" behavior but functional
|
|
- ESC key works properly (shows controls → confirm → exit)
|
|
- Playback stops correctly on dismiss
|
|
|
|
## Development Environment
|
|
|
|
### Requirements
|
|
- **Platform**: macOS with Xcode 16+
|
|
- **Build Method**: Must use Xcode GUI (Command+B)
|
|
- Command-line `xcodebuild` fails due to Swift macro issues in swift-case-paths dependency
|
|
- All other operations (git, editing) work via command line
|
|
- **Simulator**: Any tvOS 16.0+ simulator or device
|
|
|
|
### Repository
|
|
- **Fork**: [ashikslab/jellypig](https://github.com/ashikslab/jellypig)
|
|
- **Upstream**: [jellyfin/swiftfin](https://github.com/jellyfin/swiftfin)
|
|
- **Plugin**: [ashikslab/Jellyfin.Xtream](https://github.com/ashikslab/Jellyfin.Xtream)
|
|
|
|
## Companion Plugin
|
|
|
|
jellypig works best with the reverted **Jellyfin.Xtream** plugin (v0.7.2.0001) which uses pure upstream logic:
|
|
- Repository: https://ashikslab.github.io/Jellyfin.Xtream/repository.json
|
|
- Download: https://github.com/ashikslab/Jellyfin.Xtream/releases/download/v0.7.2.0001/jellyfin-xtream-for-jellypig_0.7.2.1.zip
|
|
|
|
The plugin provides standard Jellyfin Channel API endpoints for Xtream content, and jellypig handles the display and navigation correctly.
|
|
|
|
## What's Next
|
|
|
|
### Short Term (Until Upstream Stabilizes)
|
|
- Bug fixes as discovered
|
|
- UI adjustments and polish
|
|
- Stay on Swiftfin 1.3 base
|
|
|
|
### Long Term
|
|
- **Major Intake**: When upstream Swiftfin releases their next stable major version, jellypig will merge those changes
|
|
- **iOS Support**: May consider re-adding iOS support with Xtream fixes as a separate project
|
|
- **Upstream Contributions**: Channel navigation fixes could potentially be contributed back to Swiftfin
|
|
|
|
## Credits
|
|
|
|
- **Original Project**: [Jellyfin Swiftfin](https://github.com/jellyfin/swiftfin) - MPL-2.0 License
|
|
- **Plugin**: [Kevinjil/Jellyfin.Xtream](https://github.com/Kevinjil/Jellyfin.Xtream) - GPL-3.0 License
|
|
- **jellypig Fork**: Personal modifications for Xtream content support and tvOS optimization
|
|
|
|
---
|
|
|
|
**This is an alpha release**: Suitable for personal use and testing. Report issues at https://github.com/ashikslab/jellypig/issues
|