Thursday, August 5, 2010

Shaping - Cages And Breakthroughs

When we started our work on bringing service for iPhone to life, we faced some unique challenges that we needed to overcome to make the product ready for public. These obstacles had significant impact on how for iPhone works - things like announcing that the call is being recorded, charging users per minute instead of a one-time upfront fee, and others.

Since many of you are asking us why the things have to be like they are, this is our attempt to shed some light on the whole thing.

Catch #1. It is not possible to intercept an audio of the phone call and record it to a local file on iPhone

This is technical limitation of iPhone. There is nothing in iPhone operating system that could allow us - application developers - to create an application that could listen to what is being said on a phone call and save that into an audio file. It is simply not possible. Period.

Although some other mobile OSes which are considered obsolete and technologically outdated, like PalmOS and Windows Mobile, were perfectly capable of doing so, none of the modern platforms, including iPhone, Android and BlackBerry, provide this feature (currently only Nokia Symbian phones can do this).

To make things even more interesting, even if we solved this problem with some coding magic, Apple would not allow such an app to be published in the App Store: recording phone calls in a local file on a phone is something that Apple, for some reason, simply does not allow.

So, we had to think of other ways for recording phone calls.

Our Take - Since it is forbidden/cannot be done on the phone, we have implemented a phone call recording machine on our servers, as that is the only place where we can patch into a call to record it.

Bottom Line - Because the recording must be done on a server, the call itself must be routed through that server. This means that app cannot simply dial the number you wish to call - it has to connect to our server first, and our server will dial the number you entered. Now, to be able to do this, our servers need to be connected to the telephone network of the world, and that can be achieved only through phone companies - which charge us per minute of call. This is the reason why we have to charge our users per minute of recording: our costs are directly dependent on a) the duration of a call, and b) the location of the number you are dialing. Our servers are in US, so for example, if you are in Japan calling number in Japan, our phone company would charge us with US to Japan per-minute rate. Fortunately, if you are in Japan dialing US number, it would be a local call for us - and we will charge you with local US calling rate which is significantly lower than Japan-US rate.

Catch #2. We are not allowed to initiate phone call with a purpose of recording it

This is the requirement that Apple imposed on us after the version 1.0 of application was released, in-use by many people, and when we wanted to update it with some new features.

We have no idea where did this restriction came from - no such thing is mentioned anywhere in agreements between developers and Apple - but it exists: we were informed that our app could be banned from iTunes App Store if it contained such a feature. Since this feature - initiating and recording calls - is the essence of our product, it appeared that we are stuck.

Our Take - Use VoIP. VoIP (Voice over Internet Protocol) is technology that allows phone calls to be made through Internet connection on your phone rather than using "standard" cellular network - the one which is measured by bars in status bar on your phone. Probably one of the best known implementations of this technology is Skype - so we had to make work like Skype - over the Internet. This was a huge effort, and once Apple confirmed that it is an acceptable solution, we started to work.

Bottom Line - After we switched to VoIP, with version 1.2 of, users are required to have a good Internet connection on their phones. "Good" means 3G or WiFi - Edge connections simply do not provide enough bandwidth to transmit human voice in real time.

Another consequence of this was that we are no longer able to detect incoming phone call and initiate its recording: since we are not allowed to record anything that is not VoIP, and of course regular phone calls that you receive are not VoIP, recording incoming phone calls became an explicit no-no by Apple. So, to record an incoming phone call you must initiate the recording process manually (described here) or our app would be kicked out of App Store.

Catch #3 - the BIG one: If the phone call is recorded, even through VoIP, the application must emit a beep every 15 seconds, or announce that call is being recorded at its beginning

This is another rule that is being enforced on us by Apple - and same as with previous one - it is not clear where it is coming from. But it is there, and we must obey or we will be banned.

There are lot of materials and discussions on the Internet that cover legal aspects of recording phone calls - you can find one here - so one can think that Apple is trying to protect itself from potential legal issues by enforcing this rule. But we simply cannot understand why the application that records calls must enforce such rules on all users. For example, if you are in California you must inform the other party on a call that the call is being recorded - that is the law. But in Texas (and in fact in most US states) you don’t. So why our app must be the one that will enforce this rule even to users that are not legally obliged to do so? And even if you are required, by law, to announce the recording, it is your obligation to do so, not ours as developers of the app. When you buy a car you are required to drive by the traffic rules - but no one will ever force the car manufacturers to implement technology that will forbid you to drive faster than 30mph even on roads with higher speed limits. It simply doesn’t make sense.

Our Take. Make the type of announcement configurable, and provide other means for initiating calls without announcement. You can configure app whether you want to have a spoken announcement or beeps during the call - here is how to do it - but you cannot completely turn it off.

Fortunately, there is a way to overcome this - initiating phone call recording from app on iPhone is not the only way you can use our service. You can initiate phone calls from outside the application and then listen to recordings from the app. This way, our app is not initiating any phone calls on its own, so we are good by Apple, and you can still use service without announcing recording if it is not required by your laws. Visit our help pages for more details on how to use this feature.

These are just some of the rules defined by Apple that we need to obey to stay in the iTunes App Store. Although we don’t agree with these methods that Apple is using to limit the feature set of iPhone apps, we believe that we understand what is Apple trying to achieve with all those restrictions. Recording phone calls is still a taboo for many people at least until they give it a second, more rational thought. That is why we have decided to comply with those restrictions even when it required significant investments both in time and money on our side to make the product useful and worthy tool. We believe that we have succeeded in it, and we will do our best to make it even better in the future.


  1. How can I cancel my I had a LG8350 with the record button on the side which I liked for recording 5 minutes incoming service calls while i was on the road.I do not use recording for court but for my own company after service call I erase.Apple phone is expensive to own.I like simplicity.I'm going back to my $39.00 phone.You loose app sale.How many have you and Apple lost already? Shame!

  2. This comment has been removed by the author.

  3. I actually found this blog and that is amazing thing I enjoy reading this easy to understand stuff. Keep it up.