Features: - VOD library with movie grouping and version detection - TV show library with season/episode organization - TMDB integration for trending shows and recently aired episodes - Recent releases section with TMDB release date sorting - Watch history tracking with continue watching - Playlist caching (12-hour TTL) for offline support - M3U playlist parsing with XStream API support - Authentication with credential storage Technical: - SwiftUI for tvOS - Actor-based services for thread safety - Persistent caching for playlists, TMDB data, and watch history - KSPlayer integration for video playback Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
401 lines
10 KiB
Markdown
401 lines
10 KiB
Markdown
# Next Steps - SimVision Project Setup
|
|
|
|
## Current Status
|
|
|
|
✅ All source code files have been created (24 Swift files)
|
|
✅ Architecture documentation completed
|
|
✅ README documentation completed
|
|
|
|
⚠️ **Xcode project needs to be created and configured**
|
|
|
|
---
|
|
|
|
## Step-by-Step Setup Instructions
|
|
|
|
### Step 1: Create Xcode Project
|
|
|
|
1. Launch Xcode (version 15.0 or later required)
|
|
|
|
2. Select **File → New → Project** (⌘⇧N)
|
|
|
|
3. In the template chooser:
|
|
- Select **tvOS** tab at the top
|
|
- Select **App** template
|
|
- Click **Next**
|
|
|
|
4. Configure the project:
|
|
```
|
|
Product Name: simvision
|
|
Team: [Select your team]
|
|
Organization Identifier: com.yourdomain
|
|
Bundle Identifier: com.yourdomain.simvision
|
|
Interface: SwiftUI
|
|
Language: Swift
|
|
Include Tests: ✓ (recommended)
|
|
```
|
|
- Click **Next**
|
|
|
|
5. Save location:
|
|
- Navigate to: `/Users/michaelsimard/dev/tvos/simvision`
|
|
- **Important**: Choose the existing `simvision` folder
|
|
- Uncheck "Create Git repository" (if not needed)
|
|
- Click **Create**
|
|
|
|
### Step 2: Add Source Files to Xcode Project
|
|
|
|
1. In Xcode Project Navigator (left sidebar):
|
|
- Right-click on the **simvision** folder (blue folder icon)
|
|
- Select **Add Files to "simvision"...**
|
|
|
|
2. In the file browser:
|
|
- Navigate to `/Users/michaelsimard/dev/tvos/simvision/simvision`
|
|
- Select **all subdirectories**:
|
|
- App/
|
|
- Models/
|
|
- Views/
|
|
- Services/
|
|
- Parsers/
|
|
- ViewModels/
|
|
- Utilities/
|
|
|
|
3. Configuration options (bottom of dialog):
|
|
- ✓ **Copy items if needed** (uncheck this - files already in correct location)
|
|
- ✓ **Create groups** (should be selected)
|
|
- ✓ **Add to targets: simvision** (ensure checked)
|
|
- Click **Add**
|
|
|
|
4. Verify file structure in Project Navigator matches:
|
|
```
|
|
simvision
|
|
├── App
|
|
│ ├── simvisionApp.swift
|
|
│ └── AppState.swift
|
|
├── Models
|
|
│ ├── Credentials.swift
|
|
│ ├── VODItem.swift
|
|
│ ├── Playlist.swift
|
|
│ └── APIResponse.swift
|
|
├── Views
|
|
│ ├── Authentication
|
|
│ ├── Main
|
|
│ ├── Detail
|
|
│ ├── Player
|
|
│ └── Components
|
|
├── Services
|
|
├── Parsers
|
|
├── ViewModels
|
|
└── Utilities
|
|
```
|
|
|
|
### Step 3: Delete Default Files
|
|
|
|
Xcode creates default files that are not needed:
|
|
|
|
1. In Project Navigator, select and delete these files:
|
|
- `ContentView.swift` (if created)
|
|
- Move to Trash when prompted
|
|
|
|
### Step 4: Configure Project Settings
|
|
|
|
#### A. Set Deployment Target
|
|
|
|
1. Select the **simvision** project (blue icon at top of navigator)
|
|
2. Select the **simvision** target (under TARGETS)
|
|
3. In **General** tab:
|
|
- Set **Minimum Deployments: tvOS 17.0**
|
|
|
|
#### B. Add Required Capabilities
|
|
|
|
1. Stay in target settings
|
|
2. Select **Signing & Capabilities** tab
|
|
3. Click **+ Capability** button
|
|
4. Search for and add: **Outgoing Connections (Client)**
|
|
5. This capability is required for network requests
|
|
|
|
#### C. Configure Code Signing
|
|
|
|
1. In **Signing & Capabilities** tab:
|
|
- Select your **Team** from dropdown
|
|
- Ensure **Automatically manage signing** is checked
|
|
- Xcode will generate provisioning profile
|
|
|
|
### Step 5: Update Configuration File
|
|
|
|
1. In Xcode, open `simvision/Utilities/Constants.swift`
|
|
|
|
2. Locate this section:
|
|
```swift
|
|
enum API {
|
|
static let authenticationBaseURL = "https://your-web-service.com"
|
|
static let authenticationEndpoint = "/api/auth"
|
|
static let authenticationHeaderKey = "X-Password"
|
|
// ...
|
|
}
|
|
```
|
|
|
|
3. Replace the URL with your actual web service endpoint:
|
|
```swift
|
|
static let authenticationBaseURL = "https://your-actual-domain.com"
|
|
```
|
|
|
|
4. If needed, update:
|
|
- `authenticationEndpoint` (if different from `/api/auth`)
|
|
- `authenticationHeaderKey` (if different from `X-Password`)
|
|
|
|
5. Save the file (⌘S)
|
|
|
|
### Step 6: Build the Project
|
|
|
|
1. Select a tvOS Simulator from the scheme selector:
|
|
- Click the device selector next to the play/stop buttons
|
|
- Choose **Apple TV** (any tvOS 17.0+ simulator)
|
|
|
|
2. Build the project:
|
|
- Select **Product → Build** (⌘B)
|
|
- Or click the play button to build and run
|
|
|
|
3. Resolve any build errors:
|
|
- **Common issue**: File not found
|
|
- Solution: Ensure all files were added to target (Step 2)
|
|
- **Common issue**: Missing imports
|
|
- Solution: Verify deployment target is tvOS 17.0+
|
|
- **Common issue**: Duplicate symbols
|
|
- Solution: Check that default ContentView.swift was deleted
|
|
|
|
### Step 7: Run in Simulator
|
|
|
|
1. Ensure tvOS Simulator is selected
|
|
|
|
2. Run the application:
|
|
- Select **Product → Run** (⌘R)
|
|
- Or click the play button (▶)
|
|
|
|
3. Wait for simulator to launch and app to install
|
|
|
|
4. Test the authentication flow:
|
|
- Password entry screen should appear
|
|
- Enter a test password
|
|
- Verify network request to your web service
|
|
|
|
### Step 8: Test on Physical Apple TV (Optional)
|
|
|
|
1. Connect Apple TV to your Mac via USB-C (Apple TV 4K) or network
|
|
|
|
2. In Xcode:
|
|
- Select your Apple TV device from scheme selector
|
|
- You may need to pair the device first
|
|
|
|
3. Build and run:
|
|
- Same process as simulator
|
|
- App will install on physical device
|
|
|
|
4. Test with Siri Remote:
|
|
- Navigate using touchpad
|
|
- Select items with center button
|
|
- Test focus states and animations
|
|
|
|
---
|
|
|
|
## Verification Checklist
|
|
|
|
After completing setup, verify the following:
|
|
|
|
### Project Structure
|
|
- [ ] Xcode project exists at `/Users/michaelsimard/dev/tvos/simvision/simvision.xcodeproj`
|
|
- [ ] All 24 Swift files are visible in Project Navigator
|
|
- [ ] Files are organized in groups (App, Models, Views, etc.)
|
|
- [ ] No duplicate files or conflicts
|
|
|
|
### Build Configuration
|
|
- [ ] Project builds without errors (⌘B succeeds)
|
|
- [ ] Deployment target is tvOS 17.0 or later
|
|
- [ ] Outgoing Connections capability is enabled
|
|
- [ ] Code signing is configured with valid team
|
|
|
|
### Runtime Configuration
|
|
- [ ] Constants.swift has correct web service URL
|
|
- [ ] App launches in simulator without crashes
|
|
- [ ] PasswordEntryView appears as first screen
|
|
- [ ] Text input works on password field
|
|
|
|
### Functionality Tests
|
|
- [ ] Can enter password in authentication view
|
|
- [ ] Sign In button becomes active when password is valid
|
|
- [ ] Network request sends to configured endpoint
|
|
- [ ] Error messages display correctly for invalid password
|
|
- [ ] (After successful auth) VOD library view loads
|
|
|
|
---
|
|
|
|
## Troubleshooting Common Issues
|
|
|
|
### Issue: "No such module 'SwiftUI'"
|
|
|
|
**Cause**: Deployment target is too low
|
|
|
|
**Solution**:
|
|
1. Select project → Target → General
|
|
2. Set **Minimum Deployments** to tvOS 17.0
|
|
|
|
---
|
|
|
|
### Issue: Build fails with "Command CompileSwift failed"
|
|
|
|
**Cause**: Swift syntax errors or missing files
|
|
|
|
**Solution**:
|
|
1. Check error details in Report Navigator (⌘9)
|
|
2. Common fixes:
|
|
- Ensure all files are added to target
|
|
- Verify no typos in file names
|
|
- Check that simvisionApp.swift exists
|
|
|
|
---
|
|
|
|
### Issue: "Thread 1: signal SIGABRT" at runtime
|
|
|
|
**Cause**: SwiftUI preview crashes or missing environment object
|
|
|
|
**Solution**:
|
|
1. Check console output for specific error
|
|
2. Ensure AppState is injected as environment object
|
|
3. Verify all @EnvironmentObject declarations match
|
|
|
|
---
|
|
|
|
### Issue: Network requests fail immediately
|
|
|
|
**Cause**: Outgoing Connections capability not enabled or App Transport Security
|
|
|
|
**Solution**:
|
|
1. Verify capability is added (Step 4B)
|
|
2. If using HTTP (not HTTPS):
|
|
- Add to Info.plist:
|
|
```xml
|
|
<key>NSAppTransportSecurity</key>
|
|
<dict>
|
|
<key>NSAllowsArbitraryLoads</key>
|
|
<true/>
|
|
</dict>
|
|
```
|
|
- **Warning**: Only use for development
|
|
|
|
---
|
|
|
|
### Issue: Cannot type in password field in simulator
|
|
|
|
**Cause**: Simulator keyboard not enabled
|
|
|
|
**Solution**:
|
|
1. In Simulator menu: **I/O → Keyboard → Toggle Software Keyboard**
|
|
2. Or press: ⌘K
|
|
|
|
---
|
|
|
|
## Web Service Requirements Reminder
|
|
|
|
Your authentication web service must implement:
|
|
|
|
**Endpoint**: `POST {baseURL}/api/auth`
|
|
|
|
**Request**:
|
|
```
|
|
Headers:
|
|
X-Password: user_entered_password
|
|
```
|
|
|
|
**Success Response** (200 OK):
|
|
```json
|
|
{
|
|
"serverUrl": "xstream.example.com",
|
|
"port": "8080",
|
|
"username": "user123",
|
|
"password": "pass456"
|
|
}
|
|
```
|
|
|
|
**Error Response** (401):
|
|
```json
|
|
{
|
|
"error": "Invalid password"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Next Development Steps (After Setup Complete)
|
|
|
|
Once the basic setup is complete and the app runs successfully:
|
|
|
|
1. **Implement your web service**
|
|
- Create authentication endpoint
|
|
- Test with Postman/curl first
|
|
- Update Constants.swift with real URL
|
|
|
|
2. **Test with real XStream server**
|
|
- Obtain test XStream credentials
|
|
- Verify m3u playlist format matches parser expectations
|
|
- Test video stream playback
|
|
|
|
3. **Customize UI** (optional)
|
|
- Update app icon
|
|
- Adjust colors in Constants.swift
|
|
- Modify grid layout (column count, spacing)
|
|
|
|
4. **Add features**
|
|
- Implement search functionality
|
|
- Add favorites system
|
|
- Implement continue watching
|
|
- Add Live TV support
|
|
|
|
5. **Prepare for release**
|
|
- Add app icon (1280x768 pixels)
|
|
- Create launch screen
|
|
- Test on multiple tvOS versions
|
|
- Submit to App Store Connect
|
|
|
|
---
|
|
|
|
## Important File Locations
|
|
|
|
For future reference:
|
|
|
|
| Purpose | File Path |
|
|
|---------|-----------|
|
|
| Xcode Project | `/Users/michaelsimard/dev/tvos/simvision/simvision.xcodeproj` |
|
|
| Source Files | `/Users/michaelsimard/dev/tvos/simvision/simvision/` |
|
|
| Configuration | `/Users/michaelsimard/dev/tvos/simvision/simvision/Utilities/Constants.swift` |
|
|
| Architecture Docs | `/Users/michaelsimard/dev/tvos/simvision/ARCHITECTURE.md` |
|
|
| Setup Guide | `/Users/michaelsimard/dev/tvos/simvision/README.md` |
|
|
| This File | `/Users/michaelsimard/dev/tvos/simvision/NEXT_STEPS.md` |
|
|
|
|
---
|
|
|
|
## Support & Documentation
|
|
|
|
- **README.md**: Overview, features, troubleshooting
|
|
- **ARCHITECTURE.md**: Detailed system architecture and design decisions
|
|
- **Apple Documentation**: https://developer.apple.com/tvos/
|
|
- **SwiftUI Documentation**: https://developer.apple.com/documentation/swiftui/
|
|
|
|
---
|
|
|
|
## Status Tracking
|
|
|
|
Current step: **Step 1 - Create Xcode Project**
|
|
|
|
Mark steps as completed:
|
|
- [ ] Step 1: Create Xcode Project
|
|
- [ ] Step 2: Add Source Files
|
|
- [ ] Step 3: Delete Default Files
|
|
- [ ] Step 4: Configure Project Settings
|
|
- [ ] Step 5: Update Configuration
|
|
- [ ] Step 6: Build Project
|
|
- [ ] Step 7: Run in Simulator
|
|
- [ ] Step 8: Test on Device (optional)
|
|
|
|
---
|
|
|
|
**Last Updated**: 2026-01-08
|
|
**Status**: Ready for Xcode project creation
|