Dieser Artikel ist Teil der Friends4-Enzyklopädie und wird nach Wiki-Prinzipien gepflegt, geprüft und versioniert.
Friends4 Native Streaming - iOS Setup Guide
AppStoreUpload: fehlende LiveKitdSYMs Die Friends4App verwendet aktuell kein LiveKit (im SwiftCode gibt es weder import LiveKit noch import LiveKitWebRTC). Die beiden beim Upload genannten Frameworks LiveKitWebRTC.framework und RustLiveKitUniFFI.framework stammen daher von einer nicht mehr benoetigten SwiftPackageAbhaengigkeit. Ihre vorkompilierten Binaries werden ohne passende dSYMs ausgeliefert; Xcode kann diese dSYMs nicht nachtraeglich aus den Frameworks erzeugen. Die nachhaltige Loesung ist
Friends4 Native Streaming - iOS Setup Guide
App-Store-Upload: fehlende LiveKit-dSYMs
Die Friends4-App verwendet aktuell kein LiveKit (im Swift-Code gibt es weder
`import LiveKit` noch `import LiveKitWebRTC`). Die beiden beim Upload genannten
Frameworks `LiveKitWebRTC.framework` und `RustLiveKitUniFFI.framework` stammen
daher von einer nicht mehr benoetigten Swift-Package-Abhaengigkeit. Ihre
vorkompilierten Binaries werden ohne passende dSYMs ausgeliefert; Xcode kann
diese dSYMs **nicht** nachtraeglich aus den Frameworks erzeugen.
Die nachhaltige Loesung ist, LiveKit aus dem lokal gepflegten Xcode-Projekt zu
entfernen:
1. Das App-Target **Friends4 -> General -> Frameworks, Libraries, and Embedded
Content** oeffnen und das Produkt `LiveKit` entfernen.
2. Unter **Project -> Package Dependencies** das Paket
`livekit/client-sdk-swift` entfernen. Falls weitere Targets existieren, dort
vorher ebenfalls die unbenutzte Produktverknuepfung entfernen.
3. **File -> Packages -> Reset Package Caches**, danach **Product -> Clean Build
Folder** ausfuehren und ein neues Archive erstellen. Ein bereits erzeugtes
Archive wird dadurch nicht repariert.
4. Vor dem Upload pruefen, dass das neue Archive keines der beiden Frameworks
mehr enthaelt:
friends4-ios-app/scripts/verify_archive_dsyms.sh \
/pfad/zu/Friends4.xcarchive
LiveKit nur zu aktualisieren oder `DEBUG_INFORMATION_FORMAT` am App-Target zu
aendern behebt die Warnung nicht: Diese Einstellung erzeugt lediglich dSYMs fuer
selbst kompilierten Code, nicht fuer bereits vorkompilierte Drittanbieter-
Frameworks. Sollte LiveKit spaeter tatsaechlich wieder verwendet werden, muss
der Anbieter XCFramework und dSYM mit identischen UUIDs bereitstellen (oder das
Framework muss reproduzierbar aus dem Quellcode gebaut werden).
LiveKit und Xcode 27
Xcode 27 markiert `RPBroadcastSampleHandler` als veraltet. LiveKit-Versionen vor
**2.15.2** verwenden den Typ in `LKObjCHelpers.h` ohne lokale
Diagnose-Unterdrueckung und erzeugen deshalb beim Bauen die Warnung
`'RPBroadcastSampleHandler' is deprecated`.
Das Xcode-Projekt wird lokal gepflegt und ist nicht Teil dieses Repositories.
Deshalb muss die Paketversion dort einmal aktualisiert werden:
1. Xcode -> **File -> Packages -> Update to Latest Package Versions**.
2. Unter **Package Dependencies -> LiveKit** als Mindestversion `2.15.2`
einstellen (beispielsweise **Up to Next Major Version** ab `2.15.2`).
3. **File -> Packages -> Reset Package Caches** ausfuehren und anschliessend
**Product -> Clean Build Folder**.
4. Die lokal erzeugte `Package.resolved` pruefen:
friends4-ios-app/scripts/verify_livekit_version.sh \
/pfad/zum/Friends4.xcworkspace/xcshareddata/swiftpm/Package.resolved
LiveKit 2.15.2 kapselt die betroffene Objective-C-Deklaration mit
`-Wdeprecated-declarations`. Die Warnung verschwindet damit, ohne Warnungen fuer
den Friends4-eigenen Code global abzuschalten. Das ReplayKit-basierte
Bildschirmteilen bleibt fuer unterstuetzte iOS-Versionen weiterhin verfuegbar.
RTMP Live Broadcasting (HaishinKit) — aktiv ab Friends4Studio
Friends4Studio (`VideoworldView.swift`) sendet jetzt echtes Live-Video per RTMP
an den Media-Server `live.friends4.de`. Der Sende-Code ist mit
`#if canImport(HaishinKit)` gekapselt: **Ohne das HaishinKit-Paket bleibt der
Build grün** und das Studio zeigt nur die lokale Vorschau. Sobald das Paket
hinzugefügt ist, sendet es automatisch.
Einmalige Einrichtung in Xcode
1. **HaishinKit als Swift Package hinzufügen** (Version **2.x**, getestet mit 2.2.5)
- Xcode → *File → Add Package Dependencies…*
- URL: `https://github.com/shogo4405/HaishinKit.swift`
- **Dependency Rule:** *Up to Next Major* ab `2.0.0`.
- **Wichtig:** Beim Hinzufügen **zwei** Library-Produkte zum Target
**Friends4** linken:
- `HaishinKit`
- `RTMPHaishinKit` ← enthält `RTMPConnection` / `RTMPStream`
Der Sende-Code ist mit `#if canImport(RTMPHaishinKit)` gekapselt und
nutzt die 2.x-API (async `connect`/`publish`/`close`, `RTMPStream.append(_:)`).
Wird nur `HaishinKit` (ohne `RTMPHaishinKit`) gelinkt, bleibt das Senden
deaktiviert und nur die lokale Vorschau läuft.
2. **Info.plist prüfen** (für das Senden zwingend nötig):
- `NSCameraUsageDescription` — Begründung für Kamerazugriff
- `NSMicrophoneUsageDescription` — Begründung für Mikrofonzugriff
(Beide existieren bereits, da die Kameravorschau funktioniert — nur
sicherstellen, dass sie gesetzt sind.)
3. **App Transport Security:** Ingest läuft über `rtmps://` und HLS über
`https://` — keine ATS-Ausnahme nötig. Nur falls der Server auf
unverschlüsseltes `rtmp://` umgestellt wird, wäre eine ATS-Ausnahme
für `live.friends4.de` erforderlich.
Voraussetzung serverseitig
MediaMTX muss unter `live.friends4.de` laufen und
- RTMP(S)-Ingest auf der `/live`-App akzeptieren,
- HLS unter `https://live.friends4.de/live/<streamKey>/index.m3u8` ausliefern.
Die Wiedergabe-URL für Zuschauer wird im Backend
(`src/models/videoworldModel.js`) gebildet; die Defaults zeigen jetzt auf
`live.friends4.de` (per `VIDEOWORLD_RTMPS_INGEST_BASE` /
`VIDEOWORLD_HLS_PLAYBACK_BASE` überschreibbar).
Test
1. Auf physischem iPhone (Simulator hat keine Kamera) live gehen.
2. Im Live-Header erscheint „Live – Video wird gesendet", sobald RTMP steht.
3. `curl https://live.friends4.de/live/<streamKey>/index.m3u8` → enthält
`#EXTM3U` + Segmente.
4. Auf einem zweiten Gerät den Stream als Zuschauer öffnen — das Video sollte
automatisch starten (Probe-Mechanismus aus dem Viewer).
---
Prerequisites (Legacy / veraltet — nicht mehr verwendet)
1. CocoaPods Dependencies
Add to your `Podfile`:
pod 'Socket.IO-Client-Swift', '~> 16.0'
Then run:
pod install
pod update
2. Framework Requirements
Ensure these are linked in Build Phases:
- AVFoundation
- AVKit
- Combine
- UIKit
3. Build Settings
Set `Minimum Deployments Target` to **iOS 14.0 or higher**
Components Overview
StreamSocketClient.swift
- Real-time Socket.io communication
- Requires: Socket.IO-Client-Swift pod
- Handles: Video chunks, chat, gifts, battles, moderation
StreamVideoBufferManager.swift
- Buffers video chunks
- Generates HLS playlist locally
- Uses AVPlayer for playback
- No external dependencies
StreamBroadcaster.swift
- Camera capture with AVCaptureSession
- Hardware H.264 encoding with VideoToolbox
- Real-time bitrate control
- CPU monitoring
UI Components
VideoworldLiveViewerView.swift
- Video player with HLS support
- Real-time chat
- Gift picker
- Moderation tools
VideoworldLiveCreatorView.swift
- Pre-broadcast setup
- Camera preview
- Live stats display
- Settings panel
Integration Steps
1. **Install Pods**
cd friends4-ios-app
pod install
2. **Update Podfile Location**
- Make sure Podfile is in: `friends4-ios-app/Podfile`
3. **Add Components to Xcode**
- File → Add Files to "Friends4"
- Select the `.swift` files from streaming folder
- Target: Friends4 app
4. **Update VideoworldView**
- Add "Go Live" button to main view
- Present `VideoworldLiveCreatorView` when tapped
- Present `VideoworldLiveViewerView` when user taps stream
5. **Compile & Test**
pod install
xcodebuild -workspace Friends4.xcworkspace -scheme Friends4 -configuration Debug
Testing
Simulator Testing
- Use iPhone 14 Pro simulator (minimum iOS 14.0)
- Test camera preview (may not show video in simulator)
- Test Socket.io connection (requires local backend running)
Device Testing
- Test on physical iPhone with iOS 14+
- Requires camera permissions (Info.plist)
- Test with actual backend server
Known Limitations
- HLS playlist server runs on localhost:8889
- Camera preview may not work in simulator
- WebSocket requires HTTPS in production (update Socket.io config)
Troubleshooting
"Cannot find module 'Socket.IO-Client-Swift'"
→ Run `pod install` and rebuild
"Cannot find type 'AVCaptureSession'"
→ Add AVFoundation to Build Phases
"Unrecognized selector"
→ Ensure iOS deployment target is 14.0+
Next Steps
- [ ] Install CocoaPods
- [ ] Add Socket.IO-Client-Swift pod
- [ ] Integrate components into VideoworldView
- [ ] Test camera capture on device
- [ ] Test Socket.io with backend
- [ ] Polish UI & animations
Hinweise
Nutze diesen Artikel als Orientierung. Bei Regeln gilt die aktuell freigegebene Version und bei Unsicherheit die Moderation.
Warnungen
Melde veraltete, missverständliche oder sicherheitsrelevante Informationen direkt über das Formular.
Diskussion
Die Diskussionsseite ist für konkrete Verbesserungsvorschläge gedacht: fehlende Abschnitte, unklare Formulierungen, Quellenhinweise oder Korrekturen. Sie ist keine Chatfunktion.
Bilder und Downloads
Optionale Medien, Grafiken oder Downloads können über strukturierte Daten und zukünftige Dateifreigaben ergänzt werden.