API-et svarar i Safari på same telefon, medan førespurnaden til appen går ut på tid. Dette gapet er vanlegvis ikkje tunnelen: ein app som kallar ein intern teneste, sender ein vanleg HTTPS-førespurnad, og VPN-en som allereie finst på eininga avgjer berre om førespurnaden har ei rute. Å skrive ein andre tunnel inn i appen er ei produktavgjerd, ikkje ein reparasjon for eit tidsavbrot. Det som følgjer, klassifiserer feilen etter kvar han oppstår, ved hjelp av feilflata appen allereie har.

Start med feilen, ikkje tunnelen

URLSession rapporterer transportfeil som NSError verdiar i NSURLErrorDomain, og koden er det billigaste beviset som finst. Før du endrar noka konfigurasjon, logg den koden saman med vertsnamnet som feilar og den medgåtte tida til oppgåva. Eit tidsavbrot, ein namnefeil og ein tillitsfeil ser like ut på skjermen og krev tre ulike reparasjonar. Klassifiser først, og les deretter avsnittet for den klassen.

Oppgåvemålingar svarar på oppfølgingsspørsmålet, om ei tilkopling nokon gong vart oppretta, noko som skil ein førespurnad som aldri hadde ei rute frå ein som serveren brukte for lang tid på å svare på. Ingenting av dette krev at tunnelen vert endra; det krev at diagnostikken til førespurnaden sjølv vert skriven ut ein stad du kan lese han.

Namneoppslag feilar før noko anna kan

Eit kort kontornamn som api.corp.example avheng vanlegvis av eit søkedomene telefonen ikkje har, så appen slår opp eit namn som berre finst inne i bygningen. NSURLErrorCannotFindHost er signaturen. Det fullstendige vertsnamnet må slåast opp gjennom den oppløysaren VPN-en installerer, og appen bør be om den fullt kvalifiserte forma når søkedomenet ikkje er garantert. Å bytte namnet mot ei adresse og slå av sertifikatkontrollar flyttar feilen i staden for å reparere han.

Ein privat DNS-post og eit sertifikat utstedt for nøyaktig det namnet er det støtta paret. Alt anna er ein omveg som vert send til brukarane.

Eit tidsavbrot er eit spørsmål om rute, ikkje om namn

NSURLErrorTimedOut betyr at namnet vart slått opp og ingenting svara, noko som peikar på ruta, pakkepolicyen eller tenesta. Når tunnelen vert tildelt per applikasjon, seier ein annan app som når den same serveren ingenting om bygget ditt, fordi den tilordninga ikkje vert delt. Kontroller at pakken du køyrer er innanfor den tildelinga, og kontroller deretter at tenestestien er tillaten for han. Eit utviklingsbygg installert utanfor tildelinga kan ligge heilt utanfor tunnelen og sjå ut som eit øydelagt API.

Ein nettlesarsamanlikning viser at ein eller annan app på eininga har ei rute. Ho beviser aldri at bygget ditt har det, og difor må dei to testane køyrast kvar for seg.

Tillitsfeil handlar om namnet på sertifikatet

NSURLErrorServerCertificateUntrusted saman med TLS-feilen under betyr at kjeda eller identitetskontrollen feila. Ein intern CA må vere klarert på eininga, og eit sertifikat utstedt til eit anna vertsnamn er framleis feil etter kva som helst omkonfigurering av nettverket. Apples rettleiing for App Transport Security gjeld framleis for desse URL-lastande tilkoplingane, og ein tunnel rundt ei vanleg HTTP-teneste gjer ikkje den tenesta sikker ende-til-ende.

Reparer identiteten eller tillitsankeret og hald unntakslista tom. Eit generelt unntak for vilkårleg lasting gøymer feilen under utvikling og lèt han stå for kvar brukar etterpå.

Ei HTTP-avvising høyrer til appen, ikkje nettverket

Ein 401 eller 403 på eit fullført handtrykk betyr at førespurnaden kom og tenesta avviste han, så det gjenståande spørsmålet er ein konto, ei tokenmålgruppe, eit omfang eller ein nøkkel. Logg statuskoden og vertsnamnet, aldri bærartokenet eller svarteksten. På det tidspunktet gjer tunnelen jobben sin, og ytterlegare nettverksendringar utset berre den verkelege rettinga.

Tabellen er klassifiseringa du bør ha ved terminalen: éi rad per feil appen faktisk kan rapportere. Skriv ut koden før du les han, fordi rada du vel avgjer kva 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

Kvar rad er billegare å teste enn den under, og kvar utelukkar eit anna lag av den same førespurnaden. Gå nedover tabellen til ei rad passar, og slutt deretter å endre nettverket.

Relaterte artiklar