iOS లో Network Extension VPN కోసం చాలా మొదటి ప్రయత్నాలను రెండు లోప కోడ్లు వివరిస్తాయి: NEVPNErrorDomain Code=4 మరియు Code=5. వాటిలో ఏదీ సర్వర్ ఫిర్యాదు కాదు. ఒకటి, డిస్క్ నుండి ఎప్పుడూ చదవని ఆబ్జెక్ట్‌లో యాప్ సెట్టింగ్‌లు రాసినప్పుడు కనిపిస్తుంది, మరొకటి రాయడమే విఫలమైనప్పుడు, ఎక్కువగా ప్రొఫైల్ ఇంకా నిష్క్రియంగా ఉండగానే సేవ్ అవుతున్నందున. రెండూ నాలుగు కాల్‌ల క్రమాన్ని మార్చడం ద్వారా సరిచేయబడతాయి, IKEv2 పరామితులను తాకకుండా.

మొదట లోడ్ చేయండి, లేకపోతే సేవ్ చేయడానికి పోల్చడానికి ఏమీ ఉండదు

మేనేజర్ సేవ్ చేసిన ప్రొఫైల్ కాపీని ఉంచుతుంది, మరియు మీరు సవరించే ఆబ్జెక్ట్ దాన్ని చదివే వరకు ఆ కాపీ కాదు. మొదట loadFromPreferences కాల్ చేయండి, దాని పూర్తి హ్యాండ్లర్ లోపల సవరించండి, తర్వాత సేవ్ చేయండి. చదవడం దాటవేస్తే, ఫ్రేమ్‌వర్క్ తన వద్ద ఉన్నదానికి మరియు మీరు రాస్తున్నదానికి మధ్య భిన్నత్వాన్ని చూస్తుంది. Swift లో ప్రతి దశ రూపం ఒకటే, మరియు ప్రతి దశ దాని స్వంత క్లోజర్‌లో ఉంటుంది:

let mgr = NEVPNManager.shared()
mgr.loadFromPreferences { loadErr in
    guard loadErr == nil else { return }
    let proto = NEVPNProtocolIKEv2()
    proto.serverAddress = "vpn.example.net"
    proto.username = "alice"
    proto.useExtendedAuthentication = true
    mgr.protocolConfiguration = proto
    mgr.isEnabled = true
    mgr.saveToPreferences { saveErr in
        // do not start here; reload, then connect
    }
}

సేవ్ క్లోజర్ లోపలి నుండి టన్నెల్ ప్రారంభించడం వేరే చోట అదే తప్పు. అది ప్రొఫైల్ మళ్లీ చదవబడకముందే నడుస్తుంది, కాబట్టి ప్రారంభ కాల్ మీరు నిర్మించిన స్థితిని చూస్తుంది, సేవ్ చేసిన స్థితిని కాదు. సేవ్ క్లోజర్ రెండవ loadFromPreferences తో ముగుస్తుంది, మరియు ఆ పూర్తి హ్యాండ్లర్ మాత్రమే startVPNTunnel కాల్ చేస్తుంది.

యాక్టివేషన్ ఫ్లాగ్ సేవ్ చేయడంలో భాగం

సేవ్ చేసిన ప్రొఫైల్ ఆన్ చేయబడే వరకు నిష్క్రియంగా ఉంటుంది. isEnabled = true ను అదే రాతలో సెట్ చేయండి, లేకపోతే ప్రొఫైల్ నిష్క్రియంగా డిస్క్‌కు చేరుతుంది మరియు సెట్టింగ్‌లు పూర్తిగా కనిపించే కాన్ఫిగరేషన్‌ను చూపినా startVPNTunnel నిరాకరిస్తుంది.

బాహ్య సవరణలు దీని మరో సగం. వినియోగదారు సెట్టింగ్‌లలో ఏదైనా మార్చినా, లేదా పరికరం నెట్‌వర్క్‌ల మధ్య కదిలినా, మెమరీలో ఇంకా ఉంచుకున్న విలువలను నమ్మే ముందు మళ్లీ చదవండి. ఆ మార్పులను ఆబ్జెక్ట్ మీ కోసం గమనించదు. పాత కాపీయే వినియోగదారు సవరణను నిశ్శబ్దంగా తిరిగి ఇచ్చే ప్రొఫైల్‌ను యాప్ రాసే మార్గం. పక్కపక్కనే ఉన్న రెండు ఫీల్డ్‌లు అదే క్షణంలో నిశ్శబ్ద సమస్యను కలిగిస్తాయి: on-demand నియమాలు ఖాళీ ప్లేస్‌హోల్డర్ కాదు, నియమ ఆబ్జెక్ట్‌ల శ్రేణి అయి ఉండాలి, మరియు disconnectOnSleep కాపీ చేసిన డిఫాల్ట్ కాదు, మీరు ఎంచుకున్న ప్రవర్తనను ప్రతిబింబించాలి.

మూడవ పక్షం యాప్‌లకు రెండు ప్రోటోకాల్‌లు మాత్రమే అందుబాటులో ఉన్నాయి

Network Extension యాప్‌లకు IPsec మరియు IKEv2 ఇస్తుంది. L2TP మరియు PPTP సిస్టమ్ లోపలే ఉంటాయి, కాబట్టి అవి అవసరమైన యాప్‌కు అవి దొరకవు, మరియు వాస్తవిక సమాధానాలు IKEv2 మద్దతు ఉన్న గేట్‌వే లేదా నిర్వహిత కాన్ఫిగరేషన్ ప్రొఫైల్.

ఆధారాలు కూడా అదే నమూనాను అనుసరిస్తాయి. పాస్‌వర్డ్‌ను Keychainలో ఉంచి, స్ట్రింగ్‌కు బదులుగా శాశ్వత సూచనను పంపండి. సేవ్ చేసేటప్పుడు సున్నా సూచన సాధారణంగా ఐటమ్ రాయబడకముందే శోధన నడిచిందని అర్థం, మేనేజర్ పాడైందని కాదు.

రెండూ డిజైన్ నిర్ణయాలు, ప్రత్యామ్నాయ మార్గాలు కావు. పాస్‌వర్డ్‌ను తన ప్రాధాన్యతల్లో ఉంచే యాప్ ఫ్రేమ్‌వర్క్ ప్రోత్సహించని మార్గాన్ని ఎంచుకుంటుంది, మరియు అది కలిగించే వైఫల్యం సేవ్ లోపంగా చదవబడుతుంది.

కోడ్‌ను మళ్లీ రాసే ముందు entitlement ను మినహాయించండి

loadFromPreferences ఎప్పుడూ తిరిగి కాల్ చేయకపోతే, సంభావ్య కారణం లేని Network Extension సామర్థ్యం లేదా దాన్ని మోయని ప్రొవిజనింగ్ ప్రొఫైల్. ఆ వైఫల్యం లోపం ఇవ్వకుండా వేలాడుతుంది, అందుకే పని చేసే కోడ్ గంటల తరబడి మళ్లీ రాయబడుతుంది. మీరు పంపాలనుకునే సంతకం చేసిన బిల్డ్‌పై entitlement తనిఖీ చేయండి, ఎందుకంటే సిమ్యులేటర్ మరియు పరికరం పరుగులు భిన్నంగా ఉండవచ్చు మరియు ముఖ్యమైన లక్ష్యం పరికరం. లక్ష్యం సంతకం సెట్టింగ్‌లను తెరిచి ఆ ఖచ్చితమైన బిల్డ్ కోసం Network Extension సామర్థ్యం ఉందని నిర్ధారించండి.

entitlement లేని ప్రొవిజనింగ్ ప్రొఫైల్ హార్డ్‌వేర్‌పై అదే విధంగా విఫలమవుతుంది, అదే బిల్డ్ సిమ్యులేటర్‌లో సాధారణంగా లోడ్ కావచ్చు. కాల్ క్రమాన్ని మళ్లీ రాసే ముందు సంతకం చేసిన ఆర్కైవ్‌ను నిజమైన పరికరంలో పరీక్షించండి.

ఊహలు కాదు, స్థితి మార్పులను చూడండి

NEVPNStatusDidChangeNotification ను గమనించి ప్రతి దశ తర్వాత manager.connection.status ను లాగ్ చేయండి. invalid ను ఎప్పటికీ విడిచిపెట్టని స్థితి అంటే ప్రొఫైల్ సేవ్ కాలేదు లేదా entitlement లేదు. connecting చేరి ఎప్పటికీ కనెక్ట్ కాని కనెక్షన్ ప్రతిపాదన లేదా ఆధారాల వైపు చూపుతుంది, అది వేరే సాక్ష్యాలతో వేరే దర్యాప్తు.

ప్రొఫైల్ సెట్టింగ్‌లు, సాధారణ, VPN కింద కనిపిస్తుందని నిర్ధారించి ప్రతి క్లోజర్ లోపాన్ని నమోదు చేయండి. ఆ రెండు వాస్తవాలు ఊహ లేకుండా క్రమ బగ్‌ను అనుమతి బగ్ నుండి వేరు చేస్తాయి.

సంబంధిత వ్యాసాలు