More Extensions

Following last year’s focus on iPad, built-in apps, and performance, iOS 10 marks Apple’s return to opening up the platform to developers with extensions. After Messages, Maps, and Siri, iOS 10 has got a few more extensibility tricks up its sleeve that are also significant.

Markup

After its debut in Mail with iOS 9, Apple’s Preview-like annotation tool has graduated to a system extension for images and documents.

Using Markup in Photos.

Using Markup in Photos.

The tools available in Markup haven’t changed. You can draw colored lines of varying thickness80, add magnification loupes, and place text annotations. Notably, Markup can be used in Photos as an editing extension; it doesn’t offer the advanced tools of Annotable, but it should be enough for most users.

Add to iCloud Drive

Following iOS 9’s inconsistent use of an iCloud Drive extension (which was only available for attachments in Mail), iOS 10 makes “Add to iCloud Drive” a system-wide option that can be used anywhere, for any file.

Add to iCloud Drive is an action extension that copies a file passed to it into iCloud Drive. It works for individual files shared from apps as well as media from Photos.

Unfortunately, the extension is hindered by questionable design decisions. When saving a file, the dialog box shows every folder and sub-folder in your iCloud Drive without a way to collapse them. There’s no quick way to open a specific destination: you’ll have to scroll a seemingly endless list of folders every time you want to save a file. There are no recent locations, no bookmarks, no search. No person who deals with documents on iOS would ever want to save them with an interface like this.

I appreciate Apple making iCloud Drive a system extension, but its design is amateur hour. It makes me wonder if anyone at Apple has ever used iCloud Drive with more than a handful of folders. It’s such an obvious misstep, it almost looks like a joke.

VoIP Apps and CallKit

Apple is granting third-party developers access to another part of the OS through extensions: telephony.

For years, VoIP apps for audio and video calling have been relegated to a second-class experience. Apple created an API six years ago to bless VoIP apps with background execution privileges, but without a framework to integrate calls with the rest of the system, apps still needed to maintain their own contact lists and use standard push notifications for incoming calls.

iOS' old VoIP calling experience.

iOS’ old VoIP calling experience.

It was too easy to miss a call from apps like Skype or WhatsApp; accepting a call from a third-party app was also slow and confusing (why would you pick up a call from a banner alert?). Plus, developers couldn’t get access to functionalities such as blocked contacts, which remained exclusive to Apple’s Phone app.

All this is changing with CallKit, a framework that elevates third-party VoIP apps to a front-seat spot on iOS, allowing them to plug into advanced controls that have complemented Apple’s Phone and FaceTime services for years.

The CallKit framework permits an incoming call from a third-party VoIP app to take over everything else (including the Lock screen) with a full-screen view, just like Apple’s Phone and FaceTime apps. In a foremost example of dogfooding, Apple itself has adopted CallKit in all of their telephony services.

CallKit’s interface and behavior are consistent with Phone and FaceTime calls on iOS, with some differences. The calling UI is the same as Apple’s, with a label that describes which app the call is happening with, and the icon of the app replacing the dialer button. Tapping the icon takes users directly to the app for additional features. Developers can customize the in-call UI with a camera icon that indicates whether an app supports video calling or not.

Like Phone and FaceTime, CallKit boosts the priority of third-party VoIP apps. Other apps can’t interrupt a call during a CallKit session; routing for Accessibility features, CarPlay, and Bluetooth connections is handled by the system automatically without developers having to optimize for them.

A demo CallKit app on iOS 10.

A demo CallKit app on iOS 10.

CallKit’s integration with iOS’ calling infrastructure goes beyond a shared UI. VoIP apps built with CallKit get access to the same block list and Do Not Disturb settings used by Apple’s apps, they can support switching between multiple calls, and they can even appear in Contacts via the Recents and Favorites views.

Apple doesn’t seem to be religious about pushing users to FaceTime anymore. If iOS 10 sees that the same contact is also registered with other VoIP services, buttons to initiate calls through third-party apps will be embedded in the contact card.81 Users only need to give an app permission to be used as a Service Provider, and it’ll be promoted to a first-class calling experience by iOS 10.82

Apple’s embrace of third-party services with CallKit isn’t an admission of defeat. Rather, it’s a recognition of the fact that millions of people use iPhones to communicate with their friends and families through apps that aren’t FaceTime – that the App Store has reinvented communications beyond FaceTime and iMessage.

As platform owners, Apple understands that they have to help customers who are seeking alternative calling services. With CallKit, they’ve created a secure and consistent framework that takes advantage of every feature that makes an iPhone the ultimate communication device.

Using VoIP apps through CallKit feels and works like any other normal phone call. It’s refreshing to see this happen, and it’s a testament to the power of Apple’s extensibility APIs. I’m looking forward to seeing WhatsApp, Skype, and others update their apps for CallKit.

Call Directory

Call Directory is a surprising inclusion in the CallKit framework. With this extension type, apps can label phone numbers for incoming calls on the Lock screen.

Apple described the use case for call directory extensions at WWDC: spam calls. According to the company, robo-callers and spam calls are particularly problematic in China (though I can vouch for their annoyance in Italy, too), and they’ve set out to improve upon this problem by letting developers maintain a database of phone numbers known to be spam.

Craig will tolerate no spam.

Craig will tolerate no spam.

In Apple’s examples, a company like Tencent could build a call directory extension. When a call from a spam number comes in, the extension could add a label that identifies it as potential spam so the user can decide to reject the call without answering it.

Call Directory is another instance of Apple letting developers take over key bits of iOS in areas where the company doesn’t want to be involved.


  1. When drawing in Markup, you can press (3D Touch) on the screen for thicker lines, though there's no haptic feedback to accompany the increase in pressure. ↩︎
  2. Based on the same Intents framework used by SiriKit. ↩︎
  3. Apps that have requested permission will be displayed under Settings -> Phone. ↩︎

This Week's Sponsor:

Kolide

Ensure that if a device isn’t secure it can’t access your apps.  It’s Device Trust for Okta.