projects/2020–26 private
EverTech Livestream 2.0
The iOS app funeral homes use to livestream services, rebuilt from the ground up.
- Swift 6
- SwiftUI
- SPM
- HaishinKit
- GraphQL
- Swift Testing

EverTech Livestream lets funeral directors stream a service from an iPhone straight to the family's memorial page. Version 1 was UIKit and CocoaPods from 2020. Version 2 is a full rewrite in SwiftUI with Swift 6 strict concurrency, SPM only, and an upgrade path that keeps every 1.x install on the same bundle ID.
What changed in 2.0
- Architecture: a SwiftUI app with UIScene lifecycle, with the core logic in a local
LivestreamKitpackage split intoCore,BroadcastandDesignSystemmodules. Dependencies are injected, so nothing is excluded from coverage. - Broadcasting: RTMPS ingest via HaishinKit, with adaptive bitrate when the venue’s upload is weak, and optional background audio so a stream survives the phone locking.
- Contract checks: every GraphQL operation is checked against the server’s livestream schema. If the schema and the app drift apart, the run fails.
Testing that never touches production
The test suite is the part I’m proudest of:
- Tests run against dead ports and an in-process mock GraphQL server, with telemetry off, so they can’t reach the real API, Mux or Sentry.
- Broadcast tests publish to a local
ffmpegRTMP listener. Afterwards the script checks the recordings: the stream must arrive as 1280×720 H.264, and streams with mid-run quality changes must decode cleanly at every size. - A rate-limiting proxy in front of the listener forces adaptive bitrate to actually adapt.
- Every UI-test screenshot runs Xcode’s accessibility audit, with extra screenshots at the largest text size.
- A coverage gate and an unsigned Release build make sure no Debug-only code leaks into what ships.