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 GitHubBuilt for iOS, Through and Through
Deep integration with Apple frameworks means Aria feels like it belongs on your iPhone.
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.
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.
Access your iPhone contacts through CNContactStore. Search, browse, and dial any contact with a phone number in a single tap.
A familiar T9 dial pad with haptic feedback on every key press. Supports quick-dial favorites and paste-to-dial for long numbers.
Mute, hold, speaker, and in-call DTMF keypad. All controls are accessible from the native CallKit UI and within the app.
Full call log with direction tracking (inbound, outbound, missed). Tap any entry to call back instantly.
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 Push Gateway maintains a SIP REGISTER on behalf of the device
- 2 PBX sends an INVITE to the gateway when a call comes in
- 3 Gateway sends an APNs VoIP push notification to the iPhone
- 4 iOS wakes the app via PushKit; CallKit shows the incoming call UI
- 5 App calls GET /v1/calls/{token} to retrieve call details
- 6 User answers; app calls POST /v1/calls/{token}/accept
- 7 RTP media flows directly between the PBX and the iPhone
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
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.
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.
Part of the Aria Ecosystem
Aria for iOS shares code and infrastructure with the rest of the open-source Aria project.
Get Started with Aria for iOS
Clone the repo, build with Xcode, and start making calls from your iPhone.