De API antwurdet yn Safari op deselde telefoan, wylst it fersyk fan 'e app yn in tiidlimiet rint. Dat gat is meastal net de tunnel: in app dy't in ynterne tsjinst oanropt, docht in gewoan HTTPS-fersyk, en de besteande VPN op it apparaat beslút allinnich oft dat fersyk in paad hat. In twadde tunnel yn 'e app skriuwe is in produktbeslút, gjin reparaasje foar in tiidlimiet. Wat folget, klassifisearret de flater neffens wêr't dy bart, mei it flateroerflak dat de app al hat.

Begjin by de flater, net by de tunnel

URLSession rapportearret transportflaters as NSError wearden yn NSURLErrorDomain, en de koade is it goedkeapste bewiis dat beskikber is. Foardat jo hokker konfiguraasje dan ek feroarje, logje dy koade tegearre mei de mislearjende hostnamme en de ferstreken tiid fan 'e taak. In tiidlimiet, in namflater en in fertrouwensflater sjogge der op it skerm itselde út en freegje trije ferskillende reparaasjes. Klassifisearje earst, lês dan de seksje foar dy klasse.

Taakmetriken beantwurdzje de folgjende fraach, oft der ea in ferbining ta stân kaam, wat in fersyk dat nea in rûte hie skiedt fan ien dêr't de server te lang oer die om te antwurdzjen. Neat fan dit alles fereasket in oare tunnel; it fereasket dat de eigen diagnostyk fan it fersyk earne printe wurdt dêr't jo it lêze kinne.

Namresolúsje mislearret foardat eat oars kin

In koart kantoarnamme lykas api.corp.example hinget meastal ôf fan in sykdomain dat de telefoan net draacht, sadat de app in namme oplost dy't allinnich binnen it gebou bestiet. NSURLErrorCannotFindHost is de hantekening. De folsleine hostnamme moat oplost wurde fia wa't resolver de VPN ek ynstallearret, en de app moat de folslein kwalifisearre foarm freegje wannear't it sykdomain net garandearre is. It namme ferfange troch in adres en sertifikaatkontrôles útsette ferpleatst de flater ynstee fan dy te reparearjen.

In privee DNS-record en in sertifikaat útjûn foar krekt dy namme binne it stipe pear. Al it oare is in omwei dy't by brûkers telâne komt.

In tiidlimiet is in fraach fan paad, net fan namme

NSURLErrorTimedOut betsjut dat de namme oplost is en neat antwurde, wat wiist op 'e rûte, it pakketbelied of de tsjinst. As de tunnel per tapassing tawiisd wurdt, seit in oare app dy't deselde server berikt neat oer jo build, om't dy map net dield wurdt. Kontrollearje dat de bondel dy't jo útfiere binnen dy tawizing leit, en kontrolearje dan dat it tsjinstpaad dêrfoar tastien is. In ûntwikkelingsbuild bûten de tawizing kin hielendal bûten de tunnel stean en der as in brutsen API útsjen.

In browserfergeliking lit sjen dat ien of oare app op it apparaat in paad hat. It bewiist nea dat jo build dat hat, en dêrom moatte de beide tests apart útfierd wurde.

Fertrouwensflaters geane oer de namme op it sertifikaat

NSURLErrorServerCertificateUntrusted tegearre mei de TLS-flater derûnder betsjut dat de keatling of de identiteitskontrôle mislearre is. In ynterne CA moat op it apparaat fertroud wêze, en in sertifikaat útjûn foar in oare hostnamme is noch altyd ferkeard nei hokker netwurkwerkonfiguraasje dan ek. Apple syn App Transport Security-rjochtline bliuwt jilde foar dizze URL-ladende ferbiningen, en in tunnel om in gewoane HTTP-tsjinst makket dy tsjinst net fan ein oant ein feilich.

Reparearje de identiteit of it fertrouwensanker en hâld de útsûnderingslist leech. In algemiene útsûndering foar willekeurich laden ferberget de flater by ûntwikkeling en lit dy dêrnei foar elke brûker stean.

In HTTP-ôfwizing heart by de app, net by it netwurk

In 401 of 403 nei in foltôge hânskutten betsjut dat it fersyk oankaam en de tsjinst it wegere, dus de oerbleaune fraach is in akkount, in tokenpublyk, in omfang of in kaai. Logje de statuskoade en de hostnamme, nea it dragerstoken of de antwurdlichem. Op dat punt docht de tunnel syn wurk en fierdere netwurkferoarings fertrage allinnich de echte reparaasje.

De tabel is de klassifikaasje om by de terminal te hâlden: ien rige per flater dy't de app echt rapportearje kin. Print de koade foardat jo him lêze, want de rige dy't jo kieze beslút hokker seksje jo trochwurkje.

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

Elke rige is goedkeaper te testen as dy derûnder, en elk slút in oare laach fan itselde fersyk út. Wurkje de tabel del oant in rige past, en stop dan mei it feroarjen fan it netwurk.

Relatearre artikelen