v2rayN for macOS: Fix “Developer Cannot Be Verified” and Grant Network Access

macOS may block v2rayN the first time you open it. Learn how to allow it in Privacy & Security, configure the system proxy or network extensions, and restore permissions after an update.

At a glance

First distinguish an app launch block from a failure to route traffic: allow the app in macOS Privacy & Security for the former; check the local listening port, system proxy, or TUN permissions for the latter. This guide is for first-time installs and users who can’t connect after an update. Follow the steps in order to avoid conflating Gatekeeper, core startup, and subscription issues.

1. Check the installer and identify the block

v2rayN is a desktop client for configuring and managing proxy connections; the selected core handles the actual connection. If macOS says “Developer Cannot Be Verified,” the app may not have started yet. Changing nodes, editing VLESS settings, or updating subscriptions won’t bypass the block. Read the alert carefully before deciding what to do next.

Open Apple menu → About This Mac. Choose the arm64 package for a Mac with Apple silicon, or the x64 package for one with an Intel processor. Also check the minimum macOS version in the current release notes; an outdated OS and a failed developer verification are different problems. Choose a package for your platform on our client downloads page.

What you seeCheck firstWhat to do
“Developer Cannot Be Verified” or “Apple cannot check it for malicious software”Gatekeeper launch assessmentIf you trust the source, allow the app in Privacy & Security
“App is damaged and can’t be opened”Archive integrity, package contents, and system assessmentDownload a complete package for the correct architecture; don’t apply bypass commands
Explicit warning that the app contains malware or will damage your computerSystem security detectionStop and verify the source; don’t treat this as a routine developer warning
The app opens, but the browser can’t connectCore, local port, and traffic routing modeTest the local proxy first, then check the system proxy or TUN

If you downloaded an archive, extract it completely and keep its bundled resources and core directories intact. If it contains an app bundle, you can move the app to Applications before opening it. If the release requires companion folders, keep them together in a stable location. Don’t move just one executable out of the bundle, and don’t launch the app from the archive preview.

2. Allow the app in Privacy & Security

These steps apply to macOS 13 and later, which use System Settings; button labels may vary slightly by version. Try opening the app first so macOS logs the block. “Open Anyway” is usually available only for a limited time after the block. If you don’t see it, try launching the app again.

  1. Trigger the launch alert

    In Finder, double-click the extracted v2rayN app. Note the exact alert text, then dismiss it. Don’t move the app to the Trash while looking for the allow option.

  2. Open security settings

    Open Apple menu → System Settings → Privacy & Security. Scroll down to the Security section and find the entry for the app that was just blocked.

  3. Verify the app name

    Make sure the entry is for the v2rayN you just downloaded, then click “Open Anyway.” If prompted, authenticate with an administrator password or Touch ID.

  4. Confirm the next launch

    Select “Open” in the follow-up confirmation. Once the main window appears, check the logs for core startup errors before importing a subscription or configuration.

On some older systems, right-clicking the app in Finder and choosing “Open” may prompt for confirmation. Since macOS 15, don’t rely on this method to override this type of block. Use the explicit option in Privacy & Security instead. An updated app may be assessed again; verify the new package and repeat the steps rather than permanently weakening system security.

3. Configure the system proxy and TUN separately

Allowing an app to launch, changing the system proxy, and creating a virtual network interface are separate actions. For everyday browser access, start by testing the system proxy; you don’t need to enable TUN right away. Change one traffic-routing setting at a time so you can pinpoint the source of a problem.

Start with the system proxy

Recommended

In the v2rayN main window, find System Proxy and select “Set system proxy.” Then go to System Settings → Network → your active connection → Details → Proxies and check that the HTTP and HTTPS proxies point to the local listening address and port. The menu may be at the bottom of the window or in the status menu, depending on the version.

Best for: first-time testing, browser access, and checking whether the local proxy works.

Use TUN when needed

TUN routes traffic through a virtual network interface and may require a privileged helper, administrator authentication, or system approval. The exact setup depends on the v2rayN release package and core implementation; don’t copy the network extension steps for another client.

Best for: apps that ignore the system proxy, or setups requiring additional routing and DNS configuration.

Check the relevant setting only if macOS explicitly says a network extension was blocked and the current release actually uses one. On macOS 15, go to System Settings → General → Login Items & Extensions → Network Extensions. On other versions, follow the path shown in the system alert. If nothing is listed, that doesn’t mean you need to install an extension; never approve an unidentified component on that assumption.

4. Identify the failure with ports and commands

A working main window doesn’t prove the proxy core is running. Find the current local listening port in the client settings, then compare it with the examples below. This guide uses 10808 as an example; your version may use a different default. Replace the port in the commands with the actual SOCKS or mixed listening port.

127.0.0.1
Local loopback address, not a remote node
10808
Example port; use the value in your client settings
15 seconds
Example request timeout limit, not a speed test

Open Applications → Utilities → Terminal and run the commands below. The first two show system and architecture details, the third checks whether the example port is listening for TCP connections, and the fourth reads the system proxy status. These commands don’t change system settings.

sw_vers -productVersion
uname -m
lsof -nP -iTCP:10808 -sTCP:LISTEN
scutil --proxy

uname -m usually returns arm64 on native Apple silicon and x86_64 on Intel. If Terminal is running under translation, check the hardware in About This Mac. If the port check returns nothing, check the core logs instead of repeatedly approving system prompts. If another process is using the port, quit it or change the port in the client, then update the system proxy to match.

curl --proxy socks5h://127.0.0.1:10808 \
  --connect-timeout 5 --max-time 15 \
  -I https://www.example.com/

5. After an update: restore the app and network settings separately

An update may change the app path, core files, or helper components, and may trigger a new security assessment. Before updating, export any configuration you need to keep and note the local port, routing mode, DNS settings, and selected core. Subscription links often contain access credentials, so store backups and screenshots securely.

Recovery order: launch the app first, then restore traffic routing

The new version won’t open
  • Quit the old process completely and make sure you’re launching the new copy from its permanent location.
  • Check the architecture and minimum OS requirements, then extract the package again in full.
  • If macOS shows a developer verification alert, repeat the steps to allow the app.
  • Once the window opens, check the core logs before restoring advanced settings.
The app opens, but there’s no internet access
  • Turn off TUN first, then test the local port with an explicit proxy request.
  • In the client’s System Proxy menu, clear the current setting, then set the system proxy again.
  • Once the port works, restore the permissions and settings required for TUN.
  • Restore routing and DNS settings one at a time, using your pre-update notes.

Don’t layer multiple traffic-routing methods to fix an unknown problem. Restore one setting at a time, checking browser access and client logs after each change.

If the whole Mac loses internet access after the client quits unexpectedly, go to Details → Proxies for your current network and check whether a proxy still points to a local port that’s no longer listening. Disable that proxy and apply the change, then test your direct connection. Don’t remove proxy settings required by your organization; on a managed device, note the original values and contact your administrator.

6. FAQs and safety guidelines

What if “Open Anyway” never appears?

Launch the app from Finder again, then immediately check the bottom of System Settings → Privacy & Security. If the alert is actually about an incompatible macOS version, a damaged file, or malware detection, don’t force it through the developer verification steps. Managed devices may also prevent users from overriding security policies.

Will I need to enter my password every time I open the app?

Read the password prompt carefully. Allowing an app through Gatekeeper and approving a privileged TUN operation are separate actions. If the prompt appears only when you enable TUN, check whether the helper included with your release is installed. If the app is repeatedly blocked during a normal launch, make sure you’re not launching a fresh copy from a different extraction each time.

Why is my subscription still failing to update after I approve the network extension?

Approving an extension won’t fix an expired subscription link. First test the connection with an explicit proxy request, then check the subscription URL and service status. Try the client’s option to update through the proxy only if you already have a working connection. Handle timeouts and authentication errors in the logs separately.

Do I need to reinstall the client to restore permissions?

Usually, check the current app copy, leftover system proxy settings, and core logs first. Reinstalling won’t fix node settings or a remote service, and may overwrite custom settings. If you do need to reinstall, back up your configuration and replace the files as described in the release notes. Before sharing logs, redact subscription tokens, node credentials, and personal file paths.

View client downloads