Telephone 1.5 is there, and it supports encryption.

UDP is probably the most widely used protocol for SIP. It is also used by default in Telephone. If you haven’t changed SIP transport in settings, UDP is used. …


Voice over IP is a way of having phone calls via the Internet or local computer network. Calls on Face Time, Skype, WhatsApp, Messenger, or Telegram are VoIP calls. But these services are locked to itself. You can’t call somebody on WhatsApp from Skype.

Luckily, VoIP is not limited to…


Earlier this week, Telephone turned 10. On December 17, 2008, I released the first version 0.8 to the public. It was on Google Code — a go-to place for hosting and publishing opensource projects.

Since then, it’s come a long way. The source code repository has been migrated two times…


It’s been quite some time since the last release and I’m glad to present Telephone 1.4 to you.

Dark Mode

Dark Mode is a feature of macOS Mojave and Telephone now fully supports it.

Same as system

Historically, Telephone has been using built-in devices for playing and capturing audio unless a specific device is selected…


Telephone 1.3 has been released and I’m thrilled to tell you about this update.

Call history

The long-awaited call history is finally here!

It conveniently looks up names in your macOS Contacts, just as one of the app’s favorite features — contacts autocompletion — already does.

Press Tab to switch the keyboard…


Over a year ago I stopped using NSNotifications and KVO in favor of a plain old observer pattern. Here’s what I have to say after using it for a year.

Not going back

I never regretted making this decision during this year. My APIs became more obvious and testable. I forgot about the…


After writing in Swift for about a year almost exclusively, I sometimes forget how concise it is compared to Objective-C. Especially when you use similar safety features like nullability and designated initializer declarations.

Take a look at this example of an app receipt validation. It’s a simple decorator implementing one…


The refactoring in the previous article stopped at breaking down a big public method into several smaller and private ones. While the violation of the single responsibility principle on the function level was reduced, the violation on the object level stayed the same. …


A lot has been told about the guard statement since its appearance in Swift. Indeed, it simplifies code and makes it more readable. But is guard really a silver bullet?

Small Functions

A lot has been told about the function size. It’s obvious to everyone that functions should be small. They should…


The Humble Object Pattern in Swift article demonstrated a way of testing the UI update logic. However, it didn’t provide an example of handling and testing view events. Which object should be responsible for the event handling? Should it be a presenter, like VIPER proposes?

Introduction to VIPER states that…

Alexey Kuznetsov

iOS and Mac developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store