API-et svarer i Safari på samme telefon, mens appens forespørsel går ut på tid. Det gapet er vanligvis ikke tunnelen: en app som kaller en intern tjeneste, sender en vanlig HTTPS-forespørsel, og VPN-en som allerede finnes på enheten avgjør bare om forespørselen har en rute. Å skrive en andre tunnel inn i appen er en produktbeslutning, ikke en reparasjon for en tidsavbrudd. Det som følger, klassifiserer feilen etter hvor den oppstår, ved hjelp av feilflaten appen allerede har.

Start med feilen, ikke tunnelen

URLSession rapporterer transportfeil som NSError verdier i NSURLErrorDomain, og koden er det billigste beviset som finnes. Før du endrer noen konfigurasjon, logg den koden sammen med vertsnavnet som feiler og oppgavens medgåtte tid. En tidsavbrudd, en navnefeil og en tillitsfeil ser like ut på skjermen og krever tre forskjellige reparasjoner. Klassifiser først, og les deretter avsnittet for den klassen.

Oppgavemålinger svarer på oppfølgingsspørsmålet, om en tilkobling noen gang ble opprettet, noe som skiller en forespørsel som aldri hadde en rute fra en som serveren brukte for lang tid på å svare på. Ingenting av dette krever at tunnelen endres; det krever at forespørselens egne diagnostikker skrives ut et sted du kan lese dem.

Navneoppslag feiler før noe annet kan

Et kort kontornavn som api.corp.example avhenger vanligvis av et søkedomene telefonen ikke har, så appen slår opp et navn som bare finnes inne i bygningen. NSURLErrorCannotFindHost er signaturen. Det fullstendige vertsnavnet må slås opp gjennom den oppløseren VPN-en installerer, og appen bør be om den fullt kvalifiserte formen når søkedomenet ikke er garantert. Å bytte navnet mot en adresse og slå av sertifikatkontroller flytter feilen i stedet for å reparere den.

En privat DNS-post og et sertifikat utstedt for nøyaktig det navnet er det støttede paret. Alt annet er en omvei som sendes til brukerne.

En tidsavbrudd er et spørsmål om rute, ikke om navn

NSURLErrorTimedOut betyr at navnet ble slått opp og ingenting svarte, noe som peker på ruten, pakkepolicyen eller tjenesten. Når tunnelen tildeles per applikasjon, sier en annen app som når den samme serveren ingenting om bygget ditt, fordi den tilordningen ikke deles. Kontroller at pakken du kjører er innenfor den tildelingen, og kontroller deretter at tjenestestien er tillatt for den. Et utviklingsbygg installert utenfor tildelingen kan ligge helt utenfor tunnelen og se ut som et ødelagt API.

En nettlesersammenligning viser at en eller annen app på enheten har en rute. Den beviser aldri at bygget ditt har det, og derfor må de to testene kjøres hver for seg.

Tillitsfeil handler om navnet på sertifikatet

NSURLErrorServerCertificateUntrusted sammen med TLS-feilen under betyr at kjeden eller identitetskontrollen feilet. En intern CA må være klarert på enheten, og et sertifikat utstedt til et annet vertsnavn er fortsatt feil etter enhver omkonfigurering av nettverket. Apples veiledning for App Transport Security gjelder fortsatt for disse URL-lastende tilkoblingene, og en tunnel rundt en vanlig HTTP-tjeneste gjør ikke den tjenesten sikker ende-til-ende.

Reparer identiteten eller tillitsankeret og hold unntakslisten tom. Et generelt unntak for vilkårlig lasting skjuler feilen under utvikling og lar den stå for hver bruker etterpå.

En HTTP-avvisning tilhører appen, ikke nettverket

En 401 eller 403 på et fullført håndtrykk betyr at forespørselen ankom og tjenesten avviste den, så det gjenstående spørsmålet er en konto, en tokenmålgruppe, et omfang eller en nøkkel. Logg statuskoden og vertsnavnet, aldri bærertokenet eller svarteksten. På det tidspunktet gjør tunnelen jobben sin, og ytterligere nettverksendringer utsetter bare den virkelige rettelsen.

Tabellen er klassifiseringen du bør ha ved terminalen: én rad per feil appen faktisk kan rapportere. Skriv ut koden før du leser den, fordi raden du velger avgjør hvilket avsnitt du arbeider gjennom.

Where it failsWhat the app seesFirst check
name resolutionNSURLErrorCannotFindHost (-1003)resolve the fully qualified name from the device itself
no path, or no answerNSURLErrorTimedOut (-1001)is this bundle inside the per-app mapping, and is the service path allowed
TLS trustNSURLErrorServerCertificateUntrusted (-1202)does the certificate name match the host, and is the internal CA trusted
service refusalHTTP 401 or 403 after a completed handshakeaccount, token audience, scope or key

Hver rad er billigere å teste enn den under, og hver utelukker et annet lag av den samme forespørselen. Gå nedover tabellen til en rad passer, og slutt deretter å endre nettverket.

Relaterte artikler