Apple’s software quality has been drawing criticism for some time now. Marco Arment helped bring this to the forefront with his blog post “Apple has lost the functional high ground.” What followed was a firestorm that was so pronounced that when Apple publicly announced iOS 9, it framed the new version as a chance to “elevate the foundations” — addressing things like security, performance, and improvements to frequently used apps.
Unfortunately, it has been quite a shaky start. From breaking its seven-year standard in the 9.2 update, to the shared web credentials fiasco in the most recent 9.3 update, the software quality has definitely left something to be desired.
This time, Apple is taking its critics head-on before the software’s release, unleashing typically tight-lipped executives to talk about its ongoing efforts to improve and upgrade the software. Since an open-to-feedback Apple is a new and welcomed development for iOS developers, I wanted to take the opportunity to address a piece of iOS 9 software that deserves considerable attention: Universal Links.
Why developers develop apps for iOS
I started my mobile software development career building for Android. At the time, I had a Samsung Galaxy S II and was eager to start building tools. The prospect of reaching a powerful device that was in billions of people’s pockets was incredibly alluring. I built a few simple apps based on some crazy ideas I had, but nothing took off.
So, I decided to give iOS a try. It was generally believed that iOS apps generated more money as Apple users appreciated apps more and were believed to have more disposable income. The difference between the two platforms was immediately recognizable.
I opened up Xcode for the first time and followed some simple tutorials. Drag-and-drop widgets with simple, beautiful animations baked in? Graphical, storyboard style layouts that actually worked without having to edit the XML? The most beautiful method autocompletes of any IDE I’ve ever worked with? Oh man! This was programming.
Now, a few years later, I run a deep linking company called Branch that’s used in thousands of iOS and Android apps. What is deep linking? To put it simply, it’s the art of trying to make links work for apps in the same way that they work for websites: When you click a link, it opens up the app and shows you the page you clicked on. The tech promises to make apps as accessible as websites are, as well as significantly improving user experiences on the phone.
Sound familiar? It’s what Apple aimed to do with Universal Links, except that it doesn’t work all the time.
What are Universal Links?
Universal Links are a new feature that Apple launched in iOS 9 to help improve mobile deep linking by allowing marketers to include their app in traditional marketing campaigns. This product was met with considerable excitement by the mobile dev community, which had spent the last six years building complex hacks on top of the previous technical mechanism: URI schemes.
Universal Links promised a beautiful user experience where, when a link was clicked and the app was installed, the app would open up immediately and show the page loaded. (Branch incorporated Universal Links into our platform and extended it with analytics and the ability to deep link through install.)
However, there’s a significant problem: Universal Links don’t really work, and Apple doesn’t seem interested in responding to developer radars about the bugs.
What are the problems?
Let’s walk through a few of the main issues with them.
1. They are not universal. At all.
Apple implemented Universal Links in a way that would force the major app platforms (Facebook, Twitter, Pinterest, etc.) to make substantial and harmful changes to the way they handle external links. Currently, the way most of these feed-style apps handle external links is to intercept the click and open the link in an internal webview. This allows them to do a ton of tracking of how the user navigates the web, but only within the confines of the app. Triggering a Universal Link requires them to send a clicking user externally and disables their ability to track, which is core to their business.
Because of this, if you plan on using your links on these platforms, you must build special edge case handling to support deep linking with legacy methods. Facebook has its own App Links standard, which promises similar functionality to Universal Links, but its flagship iOS app doesn’t even support its own standard. As of March 2016, it’s basically impossible to open up your app out of Facebook in a reliable way.
There are few apps that support Universal Links today and most are Apple-built apps, like Mail, Notes, and Messages.
2. Universal Links don’t work for email (or other) campaigns.
Email is a primary communication channel for companies interacting with their users, and it is becoming increasingly relevant in mobile marketing. Because of the volume and complexity of email campaigns, most brands end up using an external provider like Sailthru, Responsys, or Sendgrid.
These providers offer an array of services, one of which is open, click, and conversion tracking. In order for them to do click tracking, they must wrap the original link in a redirect so that the user hits the provider’s server prior to being sent to the destination.
Sound familiar? It’s basically the description of every transactional and marketing email that you receive every day. The bad news: It’s impossible to use Universal Links in this scenario. You can’t wrap a Universal Link in a redirect and have it still work. So either you “universify” the redirecting domain or you give up click tracking entirely. Every marketer we’ve talked to has said this is a deal breaker for them.
3. They are easily broken by users and hard to re-enable.
It’s currently incredibly easy for a user (or an app developer for that matter) to permanently disable Universal Links on the phone. A user simply needs to click the domain name in the top right hand corner of the screen after clicking a Universal Link. You’ll notice in iOS 9 that there’s both a back button and a link to the domain if you originated from a Universal Link. Here’s an example from LinkedIn:
If I were to click ‘linkedin.com,’ it would open up Safari and permanently disable Universal Links for my device. There are a few ways to re-enable them, but for all intents and purposes, a user would never figure it out.
4. The feature is nearly impossible to debug and test.
For developers, the ability to verify the functionality of a feature is critical to development. Debugging Universal Links is easily a 6-7 step process spanning a web server configuration, developer portal configuration, and native app project configuration. And it’s incredibly easy to make a mistake along the way. Forget an end bracket in the structured JSON file you have to host on your own server? Broken Universal Links. Didn’t include the entitlements file in your app build? Broken Universal Links. It’s treacherous.
Despite the hundred ways that Universal Links can break, there wasn’t a single validator tool to help a developer debug. We had to build our own Universal Links validator (which we’ve opened to the public). Without it, developers must walk through each step, checking each line of code to ensure they didn’t miss a critical step. What should take five minutes can take a day or two to debug.
How Apple can improve
The fundamental problem with the Universal Links feature is that it lacks thoroughness and use case testing. From what we know, the feature wasn’t discussed with major apps on the platform or reviewed with developers who needed to build on top of it. Even the documentation changed substantially a month after release with no notice, forcing developers to re-implement what they had built in the previous month.
Universal Links is a developer tool. Developer tools are immensely personal products that give a business an opportunity to build strong relationships with its users. There are very few other types of product in the world that require its users to become experts in every detail of the product before they can use it. And for a product as complicated as a mobile linking tool, it is nearly impossible for the parent company to predict all of the ways people will think to use it or all of the edge cases induced by a fragmented, global market. Community feedback and thorough testing are the only way to deliver all of the necessary improvements.
Apple would benefit from taking a more open stance when launching developer tools. If it applied the same customer-first mentality that it applies to hardware development to the creation of its developer platform products, quality would improve dramatically. No company can pretend to know exactly what’s right for its customers. Once Apple starts listening prior to a launch, I know we’ll start to see dramatically fewer and more stable releases on the iOS platform.
Alex Austin is founder and CEO of Branch Metrics.