MediumBuilding a SIP Softphone for iOS That Respects Both Standards and Privacy | by Emin Lin | Sep, 2026 | Medium
Sitemap
Emin Lin

Emin Lin

Building a SIP Softphone for iOS That Respects Both Standards and Privacy

4 min readSep 18, 2026
Press enter or click to view image in full size
shot on 17.05.2014

It started with an old phone. There’s a SIP desk phone at my home that has been running for about twenty years, registered to a self-hosted Asterisk box the whole time. It still works. At some point I wanted that same extension on my iPhone — with a native call UI, push wake-up driven by my own PBX, and call transcription that doesn’t send audio to someone else’s cloud. I couldn’t find a client that did all of that, so I wrote one.

Yak Phone is a SIP softphone for iOS & MacOS & iPad, built on the open-source baresip stack. It works with any standards-compliant server — Asterisk, FreePBX, FreeSWITCH, 3CX, Kamailio, or your own PBX. This post covers what it does and the thinking behind a few design choices we made along the way.

Press enter or click to view image in full size

The problem with SIP on iOS

iOS is hostile to persistent network connections by design. An app that tries to keep a SIP registration alive in the background will get suspended, and your phone becomes unreachable. Most softphones historically worked around this with hacks — silent audio loops, location tricks.

The correct answer on iOS is PushKit: the system wakes your app when a VoIP push arrives. But that requires someone to *send* the push, and most solutions make that “someone” the vendor’s cloud, meaning your SIP credentials and call metadata live on infrastructure you don’t control.

Yak Phone takes a different approach: the push relay is designed so your own PBX can trigger the wake-up. The app doesn’t need to stay running in the background — even after it’s been fully killed, an incoming call to your Asterisk box can push-wake the phone, ring it like a normal call, and deliver missed-call alerts. Your PBX stays the source of truth.

Native where it matters

We spent a lot of effort on making the app feel like the iPhone’s built-in Phone app rather than a port of something else:

- CallKit integration — incoming SIP calls appear as standard system calls on the lock screen, with the familiar answer/decline UI, and they respect Do Not Disturb and Focus modes

- Multiple SIP accounts with per-account server, transport, credentials, caller ID, and auto-answer settings, plus automatic re-registration when the network changes

- HD video calling (H.264, VP8) with draggable picture-in-picture, tap to swap views, and camera flip mid-call

- Full codec coverage: Opus, G.722, G.711, G.729, GSM, iLBC, AMR-NB/WB, with echo cancellation, AGC, noise suppression, and jitter buffer

- DTMF, blind and attended transfer, call forwarding— the table stakes, done properly

On-device AI, and why that matters

This is the part we think is genuinely new for a SIP client. YakPhone can transcribe your calls in real time and generate summaries afterward — but unlike every “AI call assistant” you’ve seen, none of it leaves the phone.

The app downloads quantized Whisper models directly to the device. Transcription runs locally. A local LLM produces post-call summaries and lets you ask questions about recent calls (“what was the ticket number they mentioned?”). There’s no API key to configure because there’s no API. No audio, no transcripts, no embeddings ever touch a server.

Get Emin Lin’s stories in your inbox

Join Medium for free to get updates from this writer.

For businesses with compliance requirements — or anyone who simply doesn’t want their calls training someone’s model — this is the difference between “AI features” and “AI features you can actually turn on.”

There’s also a built-in AI chat between calls, running on the same local models.

For the tinkerers

If you like poking at things, YakPhone exposes the underlying stack:

- A SIP log viewer with filtering and export

- An on-device HTTP server to query and configure the app over Wi-Fi

- A CLI mode: send JSON commands over TCP to control baresip in real time

- Custom User-Agent strings, iCloud backup, and localization in 8 languages

Try it, break it, tell us

The app is on the App Store now:

App Store: https://apps.apple.com/us/app/yak-ai-sip-phone/id6763033863

Website: https://app.yakteam.com/

If you run a PBX — especially something unusual — we’d genuinely like to hear how it behaves in your environment. NAT edge cases, TLS/SRTP interop quirks, codec negotiation surprises: that’s the feedback that makes the app better.

We’ve also set aside 5 promo codes for the full Pro unlock for readers of this post, first come first served:

1. P3JR76KL8N76KK4LL4

2. HPL6EF4YA6AHLJ7T3X

3. 48LY6WYHP8RF687K6M

4. T4KYKEXN6MRKWEMYJH

5. NFRY36JLJ7TY443XTP

Thanks for reading — and if you build on open SIP infrastructure, we’d love to compare notes.

--

--