NEVPNManager ਸੰਭਾਲਦਾ ਨਹੀਂ? ਕ੍ਰਮ ਹੈ ਲੋਡ, ਸਮਰੱਥ, ਸੰਭਾਲ, ਜੁੜੋ
ਕੋਡ 4 ਅਤੇ ਕੋਡ 5 ਆਮ ਤੌਰ ’ਤੇ ਦੱਸਦੇ ਹਨ ਕਿ ਪਰੋਫਾਈਲ ਲੋਡ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਸੰਪਾਦਿਤ ਹੋਈ ਸੀ ਜਾਂ ਅਸਮਰੱਥ ਹਾਲਤ ਵਿੱਚ ਸੰਭਾਲੀ ਗਈ ਸੀ। ਕਾਲਾਂ ਦਾ ਕ੍ਰਮ ਠੀਕ ਕਰੋ, ਫਿਰ entitlement ਜਾਂਚੋ।
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 ਹੇਠ ਦਿਸਦੀ ਹੈ, ਅਤੇ ਹਰ ਕਲੋਜ਼ਰ ਦੀ ਗਲਤੀ ਦਰਜ ਕਰੋ। ਉਹ ਦੋ ਤੱਥ ਅਨੁਮਾਨ ਤੋਂ ਬਿਨਾਂ ਕ੍ਰਮ ਦੀ ਬੱਗ ਅਤੇ ਇਜਾਜ਼ਤ ਦੀ ਬੱਗ ਨੂੰ ਵੱਖ ਕਰਦੇ ਹਨ।