IMHO the problem is because some apps on the devices arent built correctly using this method described in here (on apple iOS developer library guide guide)
Look especially what i've put in BOLD
PS: I all started my investigation starting from my older post in here Link to this post
- canOpenURL:
Returns a Boolean value indicating whether or not the URL’s scheme can be handled by some app installed on the device.
Declaration
SWIFT
func canOpenURL(_ url: NSURL) -> Bool
OBJECTIVE-C
- (BOOL)canOpenURL:(NSURL *)url
Parameters
url | A URL (Universal Resource Locator). At runtime, the system tests the URL’s scheme to determine if there is an installed app that is registered to handle the scheme. More than one app can be registered to handle a scheme. The URL you pass to this method can have a common scheme or a custom scheme. |
Return Value
NO if there is no app installed on the device that is registered to handle the URL’s scheme, or if you have not declared the URL’s scheme in your Info.plist file; otherwise, YES.
Read the Discussion section for more information on conditions that affect the return value.
Discussion
If this method returns YES for a given URL, iOS guarantees that that if the openURL: method is subsequently called using the same URL, an app registered to handle the URL’s scheme will launch to handle it. This method’s return value does not indicate whether or not the full URL is valid or if the specified resource exists.
If your app is linked against an earlier version of iOS but is running in iOS 9.0 or later, you can call this method on 50 distinct URL schemes. After hitting this limit, subsequent calls to this method return NO. If a user reinstalls or upgrades the app, iOS resets the limit.
Unlike this method, the openURL: method is not constrained by the LSApplicationQueriesSchemesrequirement: If an app that handles a scheme is installed on the device, the openURL: method works, whether or not you have declared the scheme.
Availability
Available in iOS 3.0 and later.
See Also
– openURL: