The standard solution to this problem is to add two keys to your ATS dictionary:
This works as follows:
iOS 10 honours
iOS 9 ignores
NSAllowsArbitraryLoadsInWebContent, but honours
older versions of iOS do not include ATS
IMPORTANT The presence of
NSAllowsArbitraryLoadsInWebContentcauses iOS 10 to ignore
NSAllowsArbitraryLoads. This results in best practice security on iOS 10 while maintaining compatibility with iOS 9.
Note This behaviour is called out in the ATS documentation, which says:
If you add [
NSAllowsArbitraryLoadsInWebContent] to your
Info.plistfile, then, irrespective of the value of the key, ATS ignores the value of the
To support older versions of iOS and macOS, you can employ this key and still manually configure ATS. To do so, set this key’s value to YES and also configure the
Share and Enjoy
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"
Thanks Eskimo for answering. This is exactly what I do as I read the documentation but I think you miss the point of my question. Davem (below) got the point however. Can you confirm that this will trigger an App Review justification? If this is the case, I would like to know if I can justify this by saying I am following Apple's recommendation and there are no other way to do it for iOS 9? Thanks again!
Note that Apple just updated their documentation on ATS & App Reviews to note that NSAllowsArbitraryLoadsInWebContent itself will trigger additional justification: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
So you will be facing additional app review scrutiny no matter the situation if you use NSAllowsArbitraryLoadsInWebContent.