Native iOS App

Aria for iOS

A fully native SIP softphone for iPhone, built with SwiftUI and powered by the same Rust engine as every other Aria client. Calls arrive instantly via push and show up in the native iOS call UI.

View on GitHub

Built for iOS, Through and Through

Deep integration with Apple frameworks means Aria feels like it belongs on your iPhone.

CallKit Integration

Incoming calls appear on the lock screen and in the native call UI. Answer from your AirPods, ask Siri to return a call, or see Aria calls in the Recents tab.

PushKit VoIP Push

Instant call delivery via Apple Push Notification service. The app wakes in the background the moment a call arrives, even if it was force-quit.

Contacts Integration

Access your iPhone contacts through CNContactStore. Search, browse, and dial any contact with a phone number in a single tap.

Full Dial Pad

A familiar T9 dial pad with haptic feedback on every key press. Supports quick-dial favorites and paste-to-dial for long numbers.

Mid-Call Controls

Mute, hold, speaker, and in-call DTMF keypad. All controls are accessible from the native CallKit UI and within the app.

Call History

Full call log with direction tracking (inbound, outbound, missed). Tap any entry to call back instantly.

How It Works

Push Gateway Call Flow

Mobile phones cannot hold a persistent SIP registration open without draining the battery. The Aria Push Gateway solves this by acting as a lightweight proxy that keeps your line active on the server side.

  1. 1 Push Gateway maintains a SIP REGISTER on behalf of the device
  2. 2 PBX sends an INVITE to the gateway when a call comes in
  3. 3 Gateway sends an APNs VoIP push notification to the iPhone
  4. 4 iOS wakes the app via PushKit; CallKit shows the incoming call UI
  5. 5 App calls GET /v1/calls/{token} to retrieve call details
  6. 6 User answers; app calls POST /v1/calls/{token}/accept
  7. 7 RTP media flows directly between the PBX and the iPhone
PBX INVITE →
Push Gateway B2BUA
APNs VoIP push
Aria iOS Wakes + accepts
RTP flows directly between PBX and iPhone
UI Framework SwiftUI
Minimum Target iOS 17.0+
SIP / RTP Engine Rust via UniFFI
Shared Core aria-mobile-core
Push PushKit VoIP
Call UI CallKit
Build Tool Xcode 15+
Tech Specs

Modern Stack, Shared Engine

The iOS app is a thin SwiftUI shell around the same Rust SIP and RTP engine that powers every Aria client. UniFFI generates native Swift bindings automatically, so the networking and media code is identical across platforms.

  • SwiftUI for declarative, reactive UI
  • Rust core compiled for iOS ARM64 targets
  • UniFFI-generated Swift bindings
  • PushKit + CallKit for background call delivery
  • Shared aria-mobile-core library with Android
Architecture

Project Structure

The codebase follows a clean separation of concerns. Apple-specific integrations (CallKit, PushKit, contacts) live in dedicated modules, while all SIP and RTP logic stays in the shared Rust core.

aria-ios/
App/
AriaSoftphoneApp.swift
ContentView.swift
SipEngineManager.swift
CallKit/
CallManager.swift
Push/
PushHandler.swift
Views/
DialerView.swift
CallView.swift
ContactsView.swift
SettingsView.swift

Requirements

What you need to build and run Aria for iOS.

iOS 17+

Requires an iPhone running iOS 17 or later. Xcode 15+ for building from source.

Rust Toolchain

Rust with aarch64-apple-ios target installed. Used to compile the shared SIP/RTP engine.

Push Gateway

Required for incoming calls. The self-hosted gateway maintains SIP registration and sends VoIP pushes.

Get Started with Aria for iOS

Clone the repo, build with Xcode, and start making calls from your iPhone.