macOS Says It Can't Verify the Developer? How to Install v2rayN and Allow Network Access

macOS may block v2rayN the first time you open it. Follow the steps to allow the app, grant network access, and verify that the proxy works, with fixes for common alerts.

At a glance

For macOS users who have downloaded v2rayN but are stuck at a “cannot verify the developer” alert or a network permission prompt. First allow the app in System Settings, then handle permissions for changing the proxy, accessing the local network, and using TUN. Finally, verify each layer through client logs, system proxy status, and local ports.

Identify where the block occurs and check the current state

“Cannot verify the developer” appears before the app actually starts, as part of macOS’s app launch check. The v2rayN main window usually has not appeared yet, so subscriptions, nodes, and proxy ports are not active. Repeatedly double-clicking or re-importing a subscription will not fix this stage. First allow the current app to open in System Settings.

If the main window is already open but macOS asks for an administrator password when you enable the system proxy, the app launch check has passed and the issue is now system network configuration permissions. If a node appears active but websites still do not load, check the proxy mode, ports, and routing rules instead of blaming Gatekeeper.

macOS 13+
System Settings uses the newer menu layout
127.0.0.1
Common local listen addresses
10808
Common local SOCKS ports
10809
Common local HTTP ports

Allow the first launch using the standard app path

Move the extracted v2rayN app to the “Applications” folder before opening it for the first time. If it stays in Downloads, later updates or cleanup may change its path, making the saved launch permission harder to verify. After moving it, open it once normally so macOS records the block.

After the first blocked launch, do not keep clicking the same icon. Open “System Settings” → “Privacy & Security,” scroll to the “Security” section, find the notice for v2rayN, and choose “Open Anyway.” macOS may ask for your account password or biometric authentication.

  1. Move to Applications

    After extracting the app, move v2rayN to the “Applications” folder. Do not run it directly from a compressed-file preview window or temporary folder.

  2. Trigger the block

    In “Applications,” double-click v2rayN. When macOS says it cannot verify the developer or has blocked the app, close the alert.

  3. Find the permission

    Open “System Settings” → “Privacy & Security,” scroll to “Security,” and confirm that the page lists the v2rayN launch that was just blocked.

  4. Confirm the launch

    Click “Open Anyway” and complete account verification. When the confirmation dialog appears again, choose “Open” and wait for the main window.

  5. Keep the launch location consistent

    After the app starts successfully, keep it in the same folder. When updating, quit the old process before replacing the app to avoid running two versions at once.

If “Open Anyway” does not appear, the block record may not have been created yet, or too much time may have passed since the last attempt. Return to “Applications,” open v2rayN again, and go straight to “Privacy & Security” after the block alert appears. You can also Control-click the app in Finder, choose “Open,” and continue through the system confirmation dialog.

Do not disable the entire app verification system to handle one application. Allow this app explicitly once; this leaves checks for other apps unchanged and makes it easier to determine whether the issue is launch permission, core startup, or proxy configuration.

Handle network, proxy, and TUN permissions

After v2rayN starts successfully, macOS may show several different permission requests. Each covers a different capability: changing the system proxy lets apps that follow system network settings use the local port; local network access is needed for addresses on the same network; firewall alerts concern inbound connections; and TUN mode may require additional system authorization.

For basic use, enable the system proxy first rather than starting with TUN. The system proxy has a shorter permission chain and is better for verifying that the subscription, node, and core work correctly. Once HTTP and HTTPS traffic passes through the proxy reliably, decide whether to switch modes based on which apps need coverage.

Basic system proxy

Menu path
Settings → Parameter Settings
Listen address
127.0.0.1
SOCKS example
10808
HTTP example
10809
System action
Enable system proxy

Complete this configuration first to test browsers and desktop apps that follow the system proxy.

Core and TUN checks

Menu path
Settings → Parameter Settings → Core Type
Common cores
Xray
TUN status
Keep disabled during initial troubleshooting
When to authorize
Confirm when enabling TUN
Troubleshooting entry point
Core logs

For VMess, VLESS, and other nodes, follow the configuration provided by the subscription. Do not rewrite transport parameters manually.

Import a subscription and choose a proxy mode

Allowing permissions only means the client can run; it does not mean a usable node is available. In v2rayN, add a subscription group, paste the complete subscription URL, and run an update. Once nodes appear, select one as the active server and check the core startup log for successful listening.

The key to importing a subscription is preserving its fields exactly. The address, port, transport, TLS, and Reality settings for VMess and VLESS are determined by the service configuration. If an update produces zero nodes, first check whether the subscription URL is complete or expired and whether the log reports an update error. Do not guess missing fields manually.

System proxy mode

Recommended

Connect browsers and desktop apps that follow macOS system proxy settings to v2rayN’s local HTTP or SOCKS port. This requires fewer permissions and gives you a clearer troubleshooting boundary.

Best for: first-time setup, subscription testing, browser access

TUN mode

Use a virtual network interface to capture a broader range of traffic, including traffic from apps that ignore system proxy settings. This adds more steps for system authorization, routing, and DNS troubleshooting.

Best for: after system proxy verification, when broader traffic coverage is needed

  1. Open subscription group management from the main screen, add a group, and paste the complete subscription URL.
  2. Run Update All Subscriptions and wait for the node list to refresh. Do not quit the app during the update.
  3. Select a node as the active server, start the core, and wait for the logs to show a local listening address.
  4. Enable the system proxy first, open a site in your browser, and confirm that basic connectivity works.
  5. Then test the routing rules to confirm that direct and proxied domains use the expected exits.

Routing takes place after traffic enters the core. If the system proxy was never written to macOS network settings, changing domain rules will have no effect; if the core is not running, no local port will be listening. Follow this order: “core running → port listening → system proxy → route match” to locate the break quickly.

After switching nodes, wait a few seconds before testing. Rapid switching can mix old connections, DNS cache entries, and logs from the new core. If only one node fails while others connect normally, focus on that node’s subscription status and protocol parameters instead of repeatedly changing macOS permissions.

Verify that the system proxy is actually working

First check the v2rayN status bar and core logs. Normally, after the core starts, they should show a local listen address and port without errors such as “address already in use.” If the log shows repeated restarts, quit other processes that may be using the same port or choose an unused port in Parameter Settings.

Next check the current macOS proxy status. Open “System Settings” → “Network” → current network connection → “Details” → “Proxies,” and see whether the web proxy and secure web proxy are enabled. The server should usually be 127.0.0.1, with a port matching v2rayN’s Parameter Settings. Button labels may vary slightly across macOS versions, but these options are in the current connection’s detailed settings.

scutil --proxy

Run the command above in Terminal to view the system proxy configuration. Check HTTPEnable, HTTPProxy, HTTPPort, HTTPSEnable, HTTPSProxy, and HTTPSPort. Enable values should be 1, and the proxy address should match the client’s listen address. If the status bar says the proxy is enabled but the command still returns 0, disable the system proxy, enable it again, and complete the system authorization.

curl --proxy http://127.0.0.1:10809 https://v2raylink.com/

The second command avoids uncertainty about whether Terminal reads the system proxy by sending the request directly through the example HTTP port. If the actual HTTP port is not 10809, replace it with the value shown in v2rayN. If the command returns page content, the local HTTP entry point, active node, and remote connection are at least working end to end.

Common alerts and fixes

The same Mac may show app launch, network settings, local network, and TUN authorization prompts in sequence. Handle only the current step and verify the result immediately afterward. Changing multiple permissions, ports, and routing rules at once makes the logs difficult to correlate with a specific action.

Can’t find the “Open Anyway” button?

Double-click v2rayN in “Applications,” wait for the block alert, close it, then immediately open “System Settings” → “Privacy & Security” and scroll to “Security.” If the app is still inside a compressed file or temporary folder, extract and move it first.

Does enabling the system proxy require verification every time?

Confirm that the app path has not changed repeatedly and that two v2rayN instances are not running. Fully quit the old process, keep only the version in “Applications,” and then toggle the system proxy once.

Does the main window open but the core fail to start?

Go to “Settings” → “Parameter Settings” → “Core Type” and confirm the selected core, then open the core logs. For a port conflict, check 10808, 10809, or the actual port shown in the interface. For a configuration parsing error, update the subscription again instead of adding protocol fields manually.

Is the node connected but the browser cannot open websites?

Go to “System Settings” → “Network” → current connection → “Details” → “Proxies” and check 127.0.0.1 and the HTTP port, then run scutil --proxy. If the browser uses its own proxy settings, restore it to follow the system configuration and try again.

Does the network stop working after enabling TUN?

Turn off TUN and restore system proxy mode first, then confirm that the node and subscription work. Next check the TUN startup log, system authorization, and routing conflicts before restarting TUN separately. Do not change the core, node, and DNS settings at the same time.

After troubleshooting, keep a clear baseline configuration: the app stays in “Applications,” the core starts reliably, the local listen address is 127.0.0.1, the port matches the system proxy, and at least one subscription node has been tested in practice. When upgrading or switching networks, compare each item against this baseline.

If the issue began after a system update, first check whether the network service changed. For example, switching from Ethernet to Wi-Fi may require the system proxy to be written again for the current service. If it began after replacing v2rayN, confirm that the old process has exited and the app path is not duplicated, then check the launch permission and core logs.

Download client Windows, macOS, Android, Linux