309 lines
6.6 KiB
Markdown
309 lines
6.6 KiB
Markdown
# Troubleshooting: Players/Library Not Loading
|
||
|
||
## Symptom
|
||
|
||
After successful login, the Players and Library tabs show:
|
||
- Loading spinner forever
|
||
- "No Players Found"
|
||
- "Error Loading Players"
|
||
- Empty lists
|
||
|
||
## Debugging Steps
|
||
|
||
### 1. Check Connection Info
|
||
|
||
**In the app:**
|
||
1. Go to **Players** tab
|
||
2. Tap **Info icon** (ℹ️) in toolbar
|
||
3. Check:
|
||
- ✅ Server URL is correct
|
||
- ✅ "Connected" shows "Yes"
|
||
- ✅ "WebSocket" shows "Connected"
|
||
- ✅ "Status" shows "Authenticated"
|
||
|
||
### 2. Check Console Logs
|
||
|
||
**In Xcode:**
|
||
1. Run the app with console open (⌘+Shift+Y)
|
||
2. Look for these log messages:
|
||
|
||
**Good signs:**
|
||
```
|
||
🔵 PlayerListView: Starting to load players...
|
||
🔵 MAService.getPlayers: Sending 'players' command
|
||
✅ MAService.getPlayers: Received 3 players
|
||
✅ PlayerListView: Successfully loaded 3 players
|
||
```
|
||
|
||
**Bad signs:**
|
||
```
|
||
❌ MAService.getPlayers: Error - notConnected
|
||
❌ PlayerListView: Failed to load players: Not connected to server
|
||
```
|
||
|
||
**Or:**
|
||
```
|
||
❌ WebSocket receive error: The operation couldn't be completed
|
||
❌ Failed to decode response
|
||
```
|
||
|
||
### 3. Common Causes & Solutions
|
||
|
||
#### Cause A: WebSocket Not Connected
|
||
|
||
**Symptoms:**
|
||
- Console shows: "Not connected to server"
|
||
- Connection Info shows: WebSocket = "Disconnected"
|
||
|
||
**Solution:**
|
||
```swift
|
||
// Check if WebSocket endpoint is reachable
|
||
// For reverse proxy users:
|
||
wss://musicassistant-app.hanold.online/ws
|
||
|
||
// Test in terminal:
|
||
websocat wss://musicassistant-app.hanold.online/ws
|
||
```
|
||
|
||
**Reverse Proxy Fix:**
|
||
Ensure nginx has WebSocket support:
|
||
```nginx
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
```
|
||
|
||
#### Cause B: API Endpoint Wrong
|
||
|
||
**Symptoms:**
|
||
- Login works but nothing else loads
|
||
- Console shows: "Invalid URL" or "404"
|
||
|
||
**Solution:**
|
||
Check server URL format:
|
||
- ✅ `https://musicassistant-app.hanold.online` (no port if using reverse proxy)
|
||
- ✅ `http://192.168.1.100:8095` (with port if direct)
|
||
- ❌ `https://musicassistant-app.hanold.online:8095` (wrong if using reverse proxy on 443)
|
||
|
||
#### Cause C: Token Invalid
|
||
|
||
**Symptoms:**
|
||
- Login succeeds but API calls fail
|
||
- Console shows: "401 Unauthorized"
|
||
|
||
**Solution:**
|
||
1. Generate new long-lived token
|
||
2. In app: Settings → Disconnect
|
||
3. Login again with new token
|
||
|
||
#### Cause D: Music Assistant Commands Changed
|
||
|
||
**Symptoms:**
|
||
- "Command not found" errors
|
||
- Decoding errors
|
||
|
||
**Solution:**
|
||
- Update Music Assistant server to latest version
|
||
- Check API compatibility (Server v2.7+ required)
|
||
|
||
#### Cause E: CORS or Security Issues
|
||
|
||
**Symptoms:**
|
||
- WebSocket connects but commands fail
|
||
- Mixed content warnings
|
||
|
||
**Solution:**
|
||
- Ensure reverse proxy allows WebSocket
|
||
- Check HTTPS is properly configured
|
||
- Verify no CORS blocking
|
||
|
||
### 4. Test WebSocket Directly
|
||
|
||
**Terminal test:**
|
||
```bash
|
||
# Install websocat
|
||
brew install websocat
|
||
|
||
# Test WebSocket connection
|
||
websocat wss://musicassistant-app.hanold.online/ws
|
||
|
||
# Should see connection open
|
||
# Press Ctrl+C to close
|
||
```
|
||
|
||
**With authentication:**
|
||
```bash
|
||
# You'll need to send auth first
|
||
# This is complex - use app debugging instead
|
||
```
|
||
|
||
### 5. Test API Endpoints
|
||
|
||
**Test REST API:**
|
||
```bash
|
||
# Get players (won't work without WebSocket but tests connectivity)
|
||
curl -X POST https://musicassistant-app.hanold.online/api/players \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-H "Content-Type: application/json"
|
||
```
|
||
|
||
### 6. Enable Detailed Logging
|
||
|
||
The app now includes print statements for debugging.
|
||
|
||
**What to look for in console:**
|
||
|
||
**1. Connection Phase:**
|
||
```
|
||
[INFO] Connecting to Music Assistant
|
||
[INFO] Connecting to wss://...
|
||
[INFO] Connected successfully
|
||
```
|
||
|
||
**2. Loading Phase:**
|
||
```
|
||
🔵 PlayerListView: Starting to load players...
|
||
🔵 MAService.getPlayers: Sending 'players' command
|
||
[DEBUG] Sending command: players (ID: ABC-123)
|
||
```
|
||
|
||
**3. Response Phase:**
|
||
```
|
||
[DEBUG] Received event: player_updated
|
||
✅ MAService.getPlayers: Received 3 players
|
||
```
|
||
|
||
**4. Error Messages:**
|
||
```
|
||
❌ WebSocket receive error: ...
|
||
❌ Failed to decode response: ...
|
||
❌ Request timeout
|
||
```
|
||
|
||
### 7. Check Music Assistant Server
|
||
|
||
**On the server:**
|
||
```bash
|
||
# Check Music Assistant is running
|
||
systemctl status music-assistant
|
||
|
||
# Check logs
|
||
journalctl -u music-assistant -f
|
||
|
||
# Look for:
|
||
# - WebSocket connection attempts
|
||
# - Authentication success/failure
|
||
# - Command processing
|
||
# - Errors
|
||
```
|
||
|
||
**Expected in server logs:**
|
||
```
|
||
[INFO] WebSocket connection from 192.168.1.X
|
||
[INFO] Client authenticated: user@example.com
|
||
[DEBUG] Received command: players
|
||
[DEBUG] Sent response: players (3 items)
|
||
```
|
||
|
||
## Quick Fixes
|
||
|
||
### Fix 1: Reconnect
|
||
|
||
**In app:**
|
||
1. Players tab → Info icon → **Reconnect**
|
||
2. Or: Settings → **Disconnect** → Login again
|
||
|
||
### Fix 2: Clear Cache
|
||
|
||
**In Xcode:**
|
||
1. Product → Clean Build Folder
|
||
2. Delete app from simulator/device
|
||
3. Rebuild and run
|
||
|
||
### Fix 3: Check WebSocket in nginx
|
||
|
||
**Add logging:**
|
||
```nginx
|
||
location /ws {
|
||
access_log /var/log/nginx/websocket.log;
|
||
error_log /var/log/nginx/websocket_error.log;
|
||
|
||
proxy_pass http://127.0.0.1:8095;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
}
|
||
```
|
||
|
||
**Check logs:**
|
||
```bash
|
||
tail -f /var/log/nginx/websocket_error.log
|
||
```
|
||
|
||
### Fix 4: Test with Browser
|
||
|
||
**Open browser:**
|
||
```
|
||
https://musicassistant-app.hanold.online
|
||
```
|
||
|
||
**If web interface works:**
|
||
→ Problem is in iOS app
|
||
|
||
**If web interface doesn't work:**
|
||
→ Problem is server/proxy configuration
|
||
|
||
## iOS-Specific Issues
|
||
|
||
### Issue: App Timeout
|
||
|
||
**Cause:** iOS background timeout (30 seconds)
|
||
|
||
**Solution:**
|
||
Server must respond quickly. Check:
|
||
- Music Assistant not overloaded
|
||
- Database queries fast
|
||
- Network latency low
|
||
|
||
### Issue: App Suspension
|
||
|
||
**Cause:** App goes to background
|
||
|
||
**Solution:**
|
||
- App reconnects automatically
|
||
- Pull to refresh when returning
|
||
|
||
### Issue: SSL Certificate
|
||
|
||
**Cause:** Self-signed certificate
|
||
|
||
**Solution:**
|
||
Add ATS exception (see HTTPS-Troubleshooting.md)
|
||
|
||
## Still Not Working?
|
||
|
||
**Collect this info:**
|
||
|
||
1. **Server URL:** ________________
|
||
2. **Music Assistant Version:** ________________
|
||
3. **Reverse Proxy:** Yes/No
|
||
4. **Console Output:** (paste logs)
|
||
5. **Connection Info Screenshot**
|
||
6. **Server Logs:** (paste relevant lines)
|
||
|
||
**Debug checklist:**
|
||
|
||
- [ ] Browser can access https://YOUR_SERVER
|
||
- [ ] WebSocket test with websocat works
|
||
- [ ] Server logs show WebSocket connections
|
||
- [ ] Token is valid (not expired/revoked)
|
||
- [ ] Reverse proxy has WebSocket support
|
||
- [ ] Console shows "Connected successfully"
|
||
- [ ] Music Assistant has configured players
|
||
- [ ] Network connectivity is good
|
||
|
||
**If all checks pass but still fails:**
|
||
→ Likely a bug in the app or API incompatibility
|
||
→ Check Music Assistant version is 2.7+
|
||
→ Try with official Music Assistant mobile app to compare
|