Aller au contenu
Narvy

NSAllowsArbitraryLoads : App Transport Security désactivé pour tous les domaines

NSAllowsArbitraryLoads = YES désactive App Transport Security pour tous les domaines : l'App Review demande donc une justification. Servez vos points de terminaison en HTTPS et, pour les hôtes qui ne le peuvent pas, ajoutez plutôt une exception par domaine dans NSExceptionDomains.

Console Xcode, à l'exécutionNSURLErrorDomain -1022
Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."
Console Xcode, à l'exécution
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

Ce que cela signifie

You must supply a justification during App Store review if you set the key's value to YES, as described in Provide Justification for Exceptions.

Apple, NSAllowsArbitraryLoads

Selon la documentation d'Apple, une justification doit être fournie lors de l'examen si la valeur est YES. App Transport Security impose HTTPS avec un TLS moderne pour le chargement d'URL. Les erreurs ci-dessus sont celles que voit une application quand ATS bloque une requête http:// ; désactiver ATS globalement les fait disparaître mais supprime la protection pour tous les hôtes. Sur iOS 10 et plus, NSAllowsArbitraryLoads est ignoré si NSAllowsArbitraryLoadsForMedia, NSAllowsArbitraryLoadsInWebContent ou NSAllowsLocalNetworking est présent ; le contrôle en tient compte.

Échéance

Pas de date : ATS ne produit aucune erreur à l'envoi. La question se pose lors de l'App Review.

Corriger

1. Passer les points de terminaison en HTTPS

Y compris les CDN d'images, les points de terminaison d'analytics et des SDK publicitaires, qui sont la raison habituelle de l'ajout de la clé.

2. Remplacer l'interrupteur global par des exceptions par domaine

Info.plist
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>legacy.example.com</key>
    <dict>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

Pour un contenu chargé uniquement dans une web view, NSAllowsArbitraryLoadsInWebContent est plus restreint que l'interrupteur global.

Vérifier avant de soumettre

Déposez l'IPA sur la page de contrôle des stores. Elle exécute APPSTORE-ATS avec les dates de cette page, puis supprime le fichier : rien de l'application n'est conservé. Le même moteur tourne hors ligne dans la CLI Narvy et renvoie le code 1 quand un point bloquant est trouvé, ce qui permet de bloquer un job de CI.

Hors ligne, depuis un terminal (narvy-cli 1.2.0 ou plus)
narvy store-check MyApp.ipa --lang fr

Contrôler un build dans le navigateur

Questions fréquentes

Apple refusera-t-il l'application à cause de NSAllowsArbitraryLoads ?

La documentation d'Apple exige une justification lors de l'examen quand la valeur est YES. L'acceptation d'une justification donnée relève de l'App Review : c'est pourquoi le contrôle signale un avertissement, pas un point bloquant.

Pourquoi mon application est-elle signalée pour des exceptions par domaine ?

Ce n'est pas un échec : les exceptions avec NSExceptionAllowsInsecureHTTPLoads sont listées en info pour que vous confirmiez que chaque hôte a toujours besoin du HTTP en clair.