Watch More

Context

Watch More is a player, not a service: no built-in IPTV service, no providers, no recommendations. Users play the sources they already have access to, entirely locally — credentials never leave the device.

Constraint

Two platforms (iOS and Android), two languages (Swift and Kotlin), and a requirement that they behave identically — with no shared source code, since the platforms share no runtime.

Decisions

  • Behaviour guarded by 114 executable conformance vectors instead of shared code: any behaviour change requires updated test vectors and both implementations passing them on the same pull request.
  • The entire Swift core was developed and tested on Windows, without Xcode — using a Swift 6 toolchain. That's why the core is built on Foundation only, with zero external dependencies.
  • Streaming M3U and XMLTV/EPG parsers, benchmarked against a 100,000-entry catalogue.
  • Privacy as a design principle: no account, credentials in Keychain, only redacted log lines allowed, and an offline demo mode for App Review.

What it costs to run

No hosting required — the app runs entirely on the user's device. Distributed via TestFlight (iOS) and a Play Store staging track (Android), with no hosted CI: one local gate script (check-parity.sh) validates Swift tests, conformance vectors, schema and strings for every release.

What I'd change

The first conformance vectors were too coarse-grained; knowing what I know now, I'd write them at the function level from the start rather than the scenario level, which would have surfaced regressions sooner.

A similar problem to solve?

A no-obligation introduction call about cross-platform product delivery.

Plan an introduction call