Android Studio couldn't build the iOS app: resolving the videolan/vlckit
Swift package fails inside it (Xcode's source control service reports
"Communication with the service was interrupted"), ending in
"Missing package product 'VLCKit'". VLCKit's README only documents
CocoaPods and Carthage anyway.
- Podfile with MobileVLCKit 3.7.5 (iOS-only build, 233 MB instead of the
922 MB cross-platform VLCKit 4 binary); build iosApp.xcworkspace.
- VlcPlayerEngine ported to the MobileVLCKit 3 API: it has a real
"ended" state, so the stop bookkeeping and the post-resume seek
workaround needed for VLCKit 4 are gone. Buffering/ES-added
notifications keep arriving while playing, so "playing" is reported
whenever VLC is playing.
- NativePlayerListener.onBuffered removed: MobileVLCKit has no buffering
progress callback.
- Pods/ is ignored; AGENTS.md notes the pod install + workspace setup.
AVPlayer misreads the duration of some fragmented MP4 streams (it reports
double the real length, leaving the second half silent and never ending the
track). Playback on iOS now goes through VLCKit 4, added as a Swift package
pinned to videolan/vlckit@6b87735.
- NativePlayerEngine (iosMain): single-media engine contract that Swift
implements and registers at launch; VLCKit ships as an SPM binary target,
so it can't be bound with cinterop from Gradle.
- AudioPlayer.ios.kt: rewritten on the engine. Playlist, loop modes, shuffle
and auto-advance live in Kotlin, mirroring the JVM player (the old iOS
player never advanced to the next track).
- VlcPlayerEngine.swift: VLCKit-backed engine. VLCKit 4 has no "ended" state,
so natural ends are told apart from requested stops; after a pause/resume
it stops reporting time, so a no-op seek restores position updates.