Install v2rayN on macOS: Fix “Apple Could Not Verify” and Set Up Network Permissions

Learn how to install v2rayN on macOS, allow an app blocked by Gatekeeper in Privacy & Security, and approve network extensions and system proxy changes.

At a glance

For anyone installing v2rayN on a Mac for the first time, or who has opened the app but is stuck on proxy permissions or connectivity checks. First confirm your Mac’s processor and where the app is installed, then handle the Gatekeeper alert. Finally, check the core, system proxy, and TUN separately. Permission to launch an app, permission to change network settings, and approval for a network extension are separate steps—allowing one does not replace the others.

1. macOS installers and processor architecture

The macOS version of v2rayN uses a cross-platform desktop interface. The WPF version is for Windows and does not run on Mac. Before downloading, open the Apple menu and select About This Mac to see whether your Mac lists a “Chip” or “Processor.” Choose the macOS arm64 package for Apple silicon or the macOS x64 package for an Intel Mac. Don’t assume a file will run just because its name includes v2rayN.

  1. Check your Mac

    Open Apple menu → About This Mac and note the chip type and macOS version. Then compare them with the system requirements shown on the download page. A matching architecture does not guarantee that an older macOS version is supported.

  2. Choose an installer

    Go to the macOS download options on our client page and choose the arm64 or x64 file that matches your Mac. Prefer the build for your processor to avoid introducing translation-related issues into your initial troubleshooting.

  3. Extract the download

    Extract the entire archive, or mount the disk image if one is provided. Move the app bundle to Applications. Don’t extract only an executable from inside the bundle.

  4. Launch for the first time

    Open v2rayN from Finder → Applications. If a security alert appears, read it carefully and follow the next section. Re-downloading the same file won’t replace the required permission approval.

Before updating, quit the old version, then replace the app. Keep a backup of your existing configuration, and avoid changing subscriptions, routing, and core settings during your first upgrade. If something goes wrong, you’ll be able to tell whether the cause was the app update or a configuration change.

2. Allow an app blocked by Gatekeeper

Before an app launches, Gatekeeper checks its source and signature status. “Apple could not verify the developer” and “Apple cannot check it for malicious software” are launch security alerts—not connection failures or missing system proxy permissions. Once you’ve confirmed the file is trustworthy and matches your platform, you can allow this app specifically.

  1. Try opening v2rayN once from Applications so macOS records the blocked launch.
  2. Go to Apple menu → System Settings → Privacy & Security, then scroll down to the Security section.
  3. If v2rayN appears as recently blocked, confirm the app name and click Open Anyway. This button may only appear for a limited time after the app is blocked.
  4. Authenticate with your account password or Touch ID if prompted. If a second alert appears, choose Open.
  5. Return to the app and check that its main window appears. Once it opens, continue with importing your configuration. The security settings page is not where you configure connectivity.

Alert wording varies across macOS versions. On some older versions, you can Control-click the app in Finder and choose Open to bring up the approval flow. Newer versions may still require approval in Privacy & Security. Follow the instructions shown by your current macOS version.

3. Import a subscription, then check the local listener

Opening the main window only confirms that the app passed its launch check. Traffic forwarding depends on the core, while subscriptions provide server configurations. Go to Subscription Groups → Subscription Group Settings to add a group and subscription URL. Save, return to Subscription Groups, and update it. Use the option that updates all subscriptions to fetch configurations for every group. Menu wording varies by version; some versions let you choose whether to update through a proxy. If you’re not connected yet, start with the option that doesn’t use a proxy.

Once configurations appear, select one and set it as the active server. Then check the logs for a successful core startup. VMess and VLESS are protocol types, not system permission names. Leave existing transport, TLS, and server name parameters unchanged. You don’t need to change VLESS to VMess or disable TLS just to get macOS permissions approved.

2
Common architecture options: arm64 and x64
10808
Example local proxy port used in this guide; your port may differ

The commands below use 127.0.0.1 and port 10808 as examples. Check the local listening port under Settings → Parameter Settings, then compare it with the startup log. If your version offers a mixed port, the same listener accepts both HTTP and SOCKS. If the interface lists separate ports, use each for its intended protocol instead of reusing one number.

4. Approve system proxy changes and check network settings

For everyday browsing, start with system proxy mode. In the v2rayN main window, open System Proxy and select Set System Proxy. If macOS asks to change network settings or install a helper tool, check which app initiated the request, what it will do, and where it came from before approving it. You don’t need to run the entire client as an administrator just to launch it.

Client checks

System proxy
Set system proxy
Active configuration
Entry selected as the active server
Local address
127.0.0.1
Example port
10808; check the actual listening port

Make sure the core is running before setting the system proxy; check each status separately.

macOS checks

Settings path
System Settings → Network
Current service
The Wi-Fi or Ethernet connection you’re using
Details page
Details → Proxies
What to check
Enabled proxy address and port

Recheck after switching network services. Don’t rely on the proxy settings for an interface you aren’t using.

Check what was actually configured on the Proxies page in macOS. Web Proxy (HTTP) is for HTTP traffic; Secure Web Proxy (HTTPS) is the proxy endpoint used for HTTPS requests. “Secure” in the name doesn’t mean the local proxy itself necessarily uses TLS. Check only the settings managed by the client. Don’t enable automatic proxy discovery, automatic proxy configuration, and multiple manually configured proxies just to fill every checkbox.

A system proxy is a setting that apps can read; it does not route all traffic automatically. Some command-line tools, browsers with their own proxy settings, and apps that create their own connections may ignore it. If a browser works but a terminal command fails, first check how that program handles proxies instead of assuming permission has been revoked.

5. TUN, network extensions, and standard proxies

TUN routes traffic through a virtual network interface and involves interfaces, routes, and DNS, so it generally needs more permissions than a standard local proxy. It isn’t required for the initial setup. First confirm that your configuration works with the system proxy. Then decide whether to enable TUN based on which apps need coverage. This makes it easier to troubleshoot without changing several variables at once.

Choose an approach: test the standard proxy before considering TUN

System proxy mode
  • For browsers and desktop apps that use the system proxy.
  • Check the local listener, active server, and proxy settings for the current network service.
  • Enabling a standard proxy does not necessarily require network extension approval.
TUN mode
  • For scenarios that need a virtual interface and are supported by your current build.
  • Install or approve the required helper components as prompted by the client.
  • After enabling it, check for conflicts with interfaces, routes, DNS, and other tunneling software.

How TUN works depends on the client version and its components. A virtual interface, helper service, and network extension are not interchangeable.

Look for an approval prompt only if a component actually requests network extension permission. On macOS 15, for example, check System Settings → General → Login Items & Extensions → Network Extensions. Other versions may show an approval prompt in Privacy & Security. If no relevant item appears in the list, that doesn’t mean the standard system proxy setup failed—and it’s not a reason to install an extension that isn’t there.

6. Diagnose issues using system status and explicit proxies

When troubleshooting, check “the proxy settings were applied” separately from “the request was forwarded successfully.” Start with system status, check the port, then explicitly route a request through the local proxy. Run these commands in Terminal. They only read status or make a standard web request; they do not change macOS security settings.

# Check the current system proxy settings
scutil --proxy

# Check whether the example port is listening for TCP connections
lsof -nP -iTCP:10808 -sTCP:LISTEN

# Use an HTTP proxy explicitly; only if this port supports HTTP
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 -I https://example.com

# Use SOCKS explicitly and resolve the target domain through the proxy
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 -I https://example.com

In scutil --proxy, fields such as HTTPEnable, HTTPProxy, and HTTPPort show the system’s actual proxy settings. If you’re using SOCKS, check the corresponding SOCKS fields. If lsof returns nothing, first check that the port is correct and the core is still running instead of repeating the permission steps.

What you seeCheck firstNext step
Local connection refusedListening port and core processCheck the port and startup logs, then restore the listener.
Explicit proxy works; browser failsSystem proxy and browser-specific settingsCheck the proxy for the current network service and whether the browser overrides it.
Local listener works; request times outServer, DNS, routing, and upstream connectionCheck the client logs and test another configuration known to work.
Only TUN mode failsHelper service, interfaces, DNS, and route conflictsTurn off TUN and switch back to the system proxy to confirm the basic connection still works.

An HTTP response from the destination only confirms that this request received a response; it doesn’t prove that all domains are routed through the proxy. Routing rules may still send some requests directly. Check the core logs to see which outbound was selected for each test. Don’t confuse “system proxy enabled globally” with “all destinations use a proxy outbound.”

7. Installation and permissions FAQ

Can’t find “Open Anyway”?

Try opening the app again from Applications, then go to System Settings → Privacy & Security and check the latest blocked-app entry. If the alert is actually about an incompatible macOS version, a damaged app, or malware, address that specific issue. On a managed device, contact your administrator rather than trying to bypass policy.

Why am I being asked for my password after allowing the app to launch?

Allowing an app to launch and changing network settings are separate actions. Check whether the prompt appeared after you changed the system proxy or installed a helper service. Confirm its name and purpose before approving. If the prompt keeps appearing, check the app’s location, old processes, and helper component status. Don’t repeatedly click through without checking.

Why can’t my browser connect after I quit v2rayN?

Open the client again, choose System Proxy → Clear System Proxy, then quit. If the app won’t open, go to System Settings → Network → your current network service → Details → Proxies and remove any leftover local proxy settings. Keep a record of your existing work proxy or automatic configuration URL so you don’t delete it by mistake.

What should I check after each update?

First confirm that you replaced the app with one built for the same architecture. After launch, check the active configuration, listening port, and system proxy status. Respond to a permission prompt only if macOS blocks the launch again or requests access. Updating the main app doesn’t mean you need to recreate your subscription or re-enable every network permission.

After configuration, follow the same checks in order: the app opens, the subscription loads, the core is listening, the system proxy points to the right port, and the destination responds. Enable TUN only if needed, then verify its additional permissions and network changes separately. This sequence gives installation, permission, and server issues a clear place to investigate.

Download v2rayN