Last week a colleague handed me his iPhone with two VPN entries in Settings: one left by a provider app, one from an IKEv2 profile pasted out of a support page. They are not competing versions of the same thing. A provider app is a container that can carry its own tunnel code, while Apple's built-in client is an IKEv2 client, configured by hand or by a profile. Protocol, credential handling, device control and recovery decide the choice.

The app and the native client sit at different layers

Apple's built-in VPN client is an IKEv2 client in practice. The manual form still lists the deprecated L2TP over IPsec and Cisco IPSec options, but there is no vendor transport field and nowhere to paste an OpenVPN or WireGuard configuration. You either fill in a form under Settings > General > VPN & Device Management or import a profile carrying a VPN payload; the surface is a server address, two identities, an authentication method and optional on-demand rules.

A provider app works one layer up. It ships a Network Extension packet tunnel provider, so the protocol code and routing logic live in the app and iOS only passes packets across. Some apps implement WireGuard or OpenVPN, some implement an obfuscated transport of their own, and a few only install an IKEv2 profile and drive the native client from behind a nicer screen. That last group is why app versus profile is sometimes a false choice.

The consequence is practical: an .ovpn or WireGuard file is not a replacement for those fields, because the handshake is a different protocol.

Read the payload before you compare features

When the profile is IKEv2, the payload keys explain more failures than any feature comparison. Apple's IKEv2 settings reference documents each key; a trimmed payload looks like this:

<key>VPNType</key><string>IKEv2</string>
<key>RemoteAddress</key><string>vpn.example.net</string>
<key>RemoteIdentifier</key><string>vpn.example.net</string>
<key>LocalIdentifier</key><string>[email protected]</string>
<key>AuthenticationMethod</key><string>Certificate</string>
<key>ServerCertificateIssuerCommonName</key><string>Example Issuing CA</string>

Three fields carry most of the diagnostic weight. RemoteIdentifier is the name the client expects the server to present, so a gateway behind NAT or a load balancer whose certificate names the pool instead of the address fails although the address is right. LocalIdentifier is who the server thinks you are, and with certificate authentication it must match the identity mapped to your account. ServerCertificateIssuerCommonName pins the issuing CA, so a profile can fail the day the certificate is reissued, with no error message mentioning certificates.

If AuthenticationMethod is SharedSecret, the server is doing EAP user authentication and the secret you were given is really an account credential. That matters when a provider sends two documents, one for username and password and one for a certificate, and only one matches what you imported.

What the app can do that the native client cannot

Protocol choice is the obvious advantage. If your server speaks WireGuard or OpenVPN, an app is the only iOS client that can use it, and editing the native form will not negotiate it. An app can also implement split tunnelling by destination or app, its own DNS handling, a kill-switch-style block, server selection and reconnection tuned to its own network.

The cost is software you did not audit, running with a network extension's privileges. Quality varies more than the store listings suggest: one app reconnects cleanly while another leaks for a few seconds after a network change, and a kill switch inside the app is a feature of that app, not of iOS. On a managed device, check the approved list first.

What the native IKEv2 profile gets right

Fewer moving parts is the whole argument. The IKEv2 client and its IPsec stack ship with the OS, so there is no extension to crash, no per-app process to keep alive, and no third-party update cycle between you and a working tunnel. A profile can also be locked: on a supervised device the user cannot remove what management installed, and Always On VPN, which reconnects on any network with no user toggle, exists only in that supervised, profile-managed form.

What the native path does not give you is flexibility. There is no per-app VPN without managed apps, no user-facing kill switch, and no transport that looks like HTTPS on a network blocking IPsec. On hotel networks that drop UDP 500 and 4500, native IKEv2 has no fallback.

A decision table that settles most cases

In practice the protocol question decides most cases before features matter.

What you were givenDevice situationWhat to use
An .ovpn or WireGuard configPersonal phoneProvider app; the native form cannot load it
IKEv2 host plus CA namePersonal or managedProfile, or the app's own IKEv2 mode
IKEv2 with username and secretPersonal phoneEither; the profile is simpler if you never switch servers
A management-installed profileSupervised, MDMNative client; do not add a second app entry
A per-app tunnelling requirementPersonal phoneApp, or accept a full tunnel; iOS cannot split by app without management
IPsec blocked on your main networkAnyApp with a transport that survives the block

Two rows deserve a second look. A per-app requirement on a personal phone is the case people misread: the setting exists in iOS but is driven by management, so an unmanaged device will not offer it. A blocked network is not a reason to distrust IKEv2; it is the reason the provider's app exists.

Verify the choice with one test run

Test the failure modes, not the connect button. Connect once, confirm the VPN indicator appears, then open a page that echoes your public address and compare it with the previous one. Switch from Wi-Fi to cellular without touching the VPN and watch for a reconnect, then take the phone through airplane mode. Reboot and see whether the tunnel returns by itself: a profile with OnDemandEnabled should, while many apps need to be opened first.

When it does not come back, split the failure by whether a tunnel exists at all. No VPN indicator means the tunnel never came up: either the handshake failed on RemoteIdentifier, the pinned CA or a credential, or the connection was never attempted because the on-demand rule did not match and no app started it. An indicator with failing traffic means routing, DNS or server-side policy, and reinstalling the client touches none of it.

A short list to leave the device explainable to the next person:

  • one VPN entry, not two;
  • the profile or app named after the server it connects to;
  • the identity values written down where you can find them.

Start with the protocol row in the table, and stop there if it answers the question.

ХӀокхунах тера йаззамаш