Explanation of canOpenURL changes in iOS 9

Update 12/2/2021:

As of iOS 15, LSApplicationQueriesSchemes is now limited to a maximum of 50 entries, which effectively limits using canOpenURL to only check if up to 50 total apps are installed. This was largely thought to be the limit imposed by iOS 9 which led me to writing this blog post explaining in more detail why this was not the case. Now 6 years later, the point is moot. Launcher and many other apps are suddenly less useful and the reason for enforcing this limit is still unclear. Perhaps there were some bad actors taking advantage of this and profiling users based on installed apps and instead of punishing those responsible Apple decided to just remove a very useful feature for everyone. I’m leaving this blog post up for posterity’s sake, but if you link your app against iOS 15 or higher, it is no longer helpful to understand its explanations.

Intro

Since iOS 9 has been out for almost 4 months, I realize that this post is a bit overdue, but since I still see a lot of misinformation on the subject bandied about on social media, I figure it is better late than never.

Here are some examples of misconceptions I still hear propagated by developers about the changes Apple made to the canOpenURL call in iOS 9:

“You can now only call up to 50 unique custom URL schemes in an app.”

“Apple made this change to kill app launching apps.”

In this post I will try to explain the changes made in iOS 9 that affect the canOpenURL call as clearly and concisely as I can in order to quell any remaining fear or false information out there on the subject. And then I’ll probably discuss more of the mundane details for developers out there with too much time on their hands.

Continue Reading