Skip to content
CAI
Software that uses CAICheck a score

stasel/WebRTC-iOS

54.5

Weak · 1 October 2026

1k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a WebRTC demonstration application for iOS that facilitates real-time audio, video, and data communication between peers. It manages peer connections through a signaling layer, which is implemented via both a native Swift server and a Node.js alternative, using WebSocket connections to exchange session descriptions and ICE candidates. The client application handles media capture, rendering, and state management while supporting modern iOS features like dark mode and native WebSocket APIs.

How it got here

2018 — iOS demo removal and dependency updates

4 changes.

The WebRTC iOS demo application was removed from the repository, alongside the cleanup of personal Xcode breakpoint configurations. Concurrently, underlying dependencies for both the client and the Node.js signaling server were updated and reorganized.

2019 — Swift migration and demo restructuring

12 changes.

The project underwent a comprehensive migration from CocoaPods to Swift Package Manager and updated the codebase to Swift 5, replacing the Objective-C bridging header with native Swift implementations. This period introduced a new Swift-based signaling server, native WebSocket support for iOS 13+, and a refactored demo app architecture featuring data channels and dark mode compatibility.

Features

Added native WebSocket provider for iOS 13+

The app now includes a new \NativeWebSocket\ implementation that uses the native \URLSessionWebSocketTask\ for iOS 13 and later, providing a built-in alternative to the existing \Starscream\-based provider. This change introduces the necessary protocol definitions (\WebSocketProvider\ and \WebSocketProviderDelegate\) and the native client class to handle WebSocket connections without external dependencies on supported iOS versions.

WebRTC-Demo-App/Sources/Services/WebSocketProvider · high confidence

Initial WebRTC signaling and media service implementation

This change introduces the core service layer for the WebRTC demo application, adding \Message.swift\ for JSON encoding/decoding of SDP and ICE candidates, \SignalingClient.swift\ to manage WebSocket connections and relay signaling data, and \WebRTCClient.swift\ to handle peer connection setup, audio/video capture, and data channels. Users can now establish WebRTC connections with unified plan semantics, continual gathering, and native data channel support.

WebRTC-Demo-App/Sources/Services · high confidence

New Swift signaling server and Node.js refactor

A new Swift-based signaling server has been added to the signaling/Swift directory, providing an alternative implementation using the Network framework for WebSocket communication. The existing Node.js signaling server (signaling/NodeJS/app.js) has been reorganized into its own subdirectory and updated to use ES module imports for the 'ws' library, along with improved connection logging.

signaling · high confidence

Removals

WebRTC iOS demo app removed

The WebRTC demonstration application for iOS has been removed. This change deletes the core application files, including the AppDelegate, the Main storyboard interface, and the Swift source code for the WebRTC client, signaling logic, and UI extensions.

WebRTC/WebRTC · high confidence

Behavioural changes

2 commits (0 fixes) modifying WebRTC/WebRTC.xcodeproj

A change to existing behaviour in WebRTC/WebRTC.xcodeproj — 2 commits, 1 file.

WebRTC/WebRTC.xcodeproj · medium confidence · unverified

Demo app now supports dark mode and 64-bit-only architecture

The WebRTC demo application has been updated to support iOS dark mode via a new LaunchScreen storyboard and has been restricted to 64-bit (arm64) architectures only. Additionally, the app now supports background VoIP modes and is limited to portrait orientation.

WebRTC-Demo-App/SupportingFiles · high confidence

Improved JSON encoding for WebRTC types and safer state descriptions

The app now includes Swift wrappers for \RTCIceCandidate\ and \RTCSessionDescription\ that conform to \Codable\, enabling easier JSON encoding and decoding of these WebRTC objects. Additionally, the \RTCStates\ extension has been refactored to remove \CustomStringConvertible\ protocol conformance from imported WebRTC enums (preventing potential compatibility issues) and now provides explicit \stringValue\ properties for connection, signaling, gathering, and data channel states, with added handling for unknown enum cases.

WebRTC-Demo-App/Sources/Extensions · high confidence

Main screen UI updated and refactored for WebRTC status and data channels

The MainViewController has been refactored to use dependency injection for its signaling and WebRTC clients, and its interface now includes a dedicated WebRTC status label and a 'Send data' button to support the new data channels example. The speaker toggle logic has been simplified to delegate audio routing control to the WebRTC client, and the view controller is now presented as a modal from a lazily instantiated VideoViewController rather than being created inline.

WebRTC-Demo-App/Sources/Screens/MainScreen · high confidence

Native WebSocket support for iOS 13+ and simplified app initialization

The app now uses Apple's native WebSocket client for iOS 13 and later, falling back to the Starscream library for iOS 12 and earlier, reducing third-party dependencies on modern devices. Additionally, the application entry point has been refactored to initialize the WebRTC and signaling clients directly within the AppDelegate, removing the need for a bridging header and streamlining the startup process.

WebRTC-Demo-App/Sources · high confidence

Project renamed to WebRTC-Demo

The Xcode project has been renamed from WebRTC to WebRTC-Demo. This change updates the workspace configuration to reference the new project name, ensuring the development environment correctly points to the renamed project file.

WebRTC-Demo-App/WebRTC-Demo.xcodeproj/project.xcworkspace · high confidence

Removed local Xcode breakpoint configuration

The local Xcode breakpoint list file (Breakpoints\_v2.xcbkptlist) for the user Stas has been removed from the workspace. This change cleans up personal debugging settings that were previously tracked in version control, ensuring a cleaner repository state without affecting the application's runtime behavior or build process.

WebRTC/WebRTC.xcworkspace · high confidence

Updated Xcode scheme for WebRTC-Demo app

The Xcode scheme for the WebRTC-Demo application has been updated to align with newer development tooling. The scheme now targets the 'WebRTC-Demo.app' build product and configures the launch, test, and profile actions to use the LLDB debugger. This change reflects the project's migration to Swift 5 and updates to the WebRTC library versions (M95, M112, M146) as indicated by the surrounding commit history, ensuring the IDE correctly builds and runs the demo app.

WebRTC-Demo-App/WebRTC-Demo.xcodeproj/xcshareddata · medium confidence

Video screen layout and rendering updated for iOS 12+ and dark mode

The VideoScreen has been refactored to use Metal rendering exclusively (removing the OpenGLES fallback) and updated to support dark mode via system colors. The local video view layout has been adjusted (width multiplier changed to 0.33, margins adjusted) and the view controller module reference updated to WebRTC\_Demo, ensuring correct appearance and behavior on iOS 12 and later.

WebRTC-Demo-App/Sources/Screens/VideoScreen · high confidence

WebRTC-Demo app project restructured and renamed

The Xcode project has been renamed from WebRTC to WebRTC-Demo, and its internal structure has been reorganized into logical groups (Sources, Screens, Services, Extensions). The build system has migrated from CocoaPods to Swift Package Manager for dependencies (WebRTC and Starscream), removing the bridging header and legacy pod configurations. Source files have been renamed and reorganized, including SignalClient to SignalingClient, ViewController to MainViewController, and the introduction of new files like Config.swift and NativeWebSocket.swift.

WebRTC-Demo-App/WebRTC-Demo.xcodeproj · high confidence

Workspace restructured to remove CocoaPods and include signaling server

The Xcode workspace has been renamed from WebRTC to WebRTC-Demo and moved to the WebRTC-Demo-App directory. The project no longer uses CocoaPods for dependency management; the reference to the local Pods project has been removed and replaced with a reference to the new Swift signaling server project located at ../signaling/Swift/SignalingServer.xcodeproj.

WebRTC-Demo-App/WebRTC-Demo.xcworkspace · high confidence

Dependencies

Updated WebRTC and Starscream dependencies and migrated Node.js signaling server

The WebRTC demo app has updated its underlying libraries, pinning the WebRTC library to version 154.0.0 and the Starscream WebSocket library to version 4.0.4 via Swift Package Manager. On the server side, the Node.js signaling implementation has been upgraded to use the 'ws' library version 8.21.0, and the project structure has been reorganized with the signaling code moved into a dedicated 'NodeJS' subdirectory.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 54 → 54 (+0.5)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 93 → 97 (+4.1)
  • Maturity 76 → 70 (-6.2)
  • Readiness 15 → 21 (+5.6)
  • Security 100 → 100 (+0.0)

Resolved (2)

  • Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
  • Documentation: no architecture or design documentation (README.md)

New (1)

  • Outdated (npm): ws

Changes since last survey

  • 2 commits — 2 feature/other, 0 fixes

By area

  • (root) — 1 commit
  • WebRTC-Demo-App/WebRTC-Demo.xcodeproj — 1 commit

Notable commits

  • change: Bump minimum iOS version to 15 and updated WebRTC library to 154.0.0
  • change: Update WebRTC version to 153.0.0

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

stasel/WebRTC-iOS was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8237bb0ba85f16e991a317631b7fd00af5a3a103 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.