macOS v2rayN: “Unable to Verify Developer”? How to Allow It Safely and Fix Network Permissions

This guide covers two ways to allow an unverified app on macOS—using System Settings and removing its quarantine attribute—and explains how to handle the network permission prompt shown on first launch.

When v2rayN is first opened on macOS, messages such as “Unable to Verify Developer,” “Apple cannot check it for malicious software,” or “The application is damaged and can’t be opened” usually come from Gatekeeper, the quarantine attribute attached to the downloaded file, or the app’s location—not from VMess, VLESS, subscription URLs, or node settings. First verify the package source and app location, then use macOS’s one-time allow option. Only use a Terminal command for the specific app if that option is unavailable or the quarantine state was not cleared.

Quick overview

This guide is for users who have downloaded the macOS version of v2rayN but are stuck at first launch or a permission prompt. It covers how to identify Gatekeeper messages, allow the app in System Settings, remove quarantine attributes, choose network and TUN permissions, and verify the complete path from launch to a working proxy.

Identify the block first: launch checks, file quarantine, and runtime permissions

macOS blocks the launch before the app actually runs. At this point, v2rayN has not loaded the Xray core, read a subscription, or connected to a node, so changing servers, local ports, or subscription data will not help. Note the exact wording of the alert and confirm whether the app has been moved to the Applications folder.

This guide uses macOS 15.5 and v2rayN 7.13.2 as examples. Button names may vary slightly between macOS versions, but the relevant controls are still under “System Settings” → “Privacy & Security.” v2rayN commonly uses port 10809 for HTTP and 10808 for SOCKS. These ports matter only after the app starts successfully.

macOS 15.5
Test environment
v2rayN 7.13.2
Reference macOS version
10808
Common SOCKS port
10809
Common HTTP port
  • “Unable to Verify Developer”: macOS did not allow the app to launch through the normal double-click flow. Use “Privacy & Security” to approve it once.
  • “The application is damaged”: The download may be incomplete, an extraction tool may have altered the app bundle, or a quarantine attribute may have triggered a stricter check. Redownload and extract the app first, then consider removing the attribute.
  • The app opens but cannot connect: Gatekeeper is no longer the issue. Check node logs, system proxy settings, DNS, the local network, or TUN permissions.
  • The app opens and quits immediately: Check startup errors in the v2rayN log and macOS “Console”; do not automatically classify this as a developer-verification problem.

Use System Settings for a one-time approval first

Allowing the app through System Settings preserves macOS’s security confirmation flow and applies only to this app. Before starting, move the extracted v2rayN.app into the Applications folder. Do not routinely launch it from Downloads or from a preview window inside an archive. A stable app path also makes future core updates and configuration permissions easier to diagnose.

  1. Move the app

    Open Downloads in Finder and drag v2rayN.app into Applications. Confirm the location is Applications → v2rayN.app; do not launch it from inside the archive.

  2. Trigger the block

    Double-click v2rayN.app to display the “Unable to Verify Developer” alert, then click “Done” or “Cancel.” This makes the corresponding approval record appear in System Settings.

  3. Open Security settings

    Go to “System Settings” → “Privacy & Security,” scroll to the Security section, and confirm that it says v2rayN was blocked.

  4. Open Anyway

    Click “Open Anyway” and authenticate with your device password or Touch ID. When macOS asks again, choose “Open.” This option is usually visible only for a limited time after the block occurs.

  5. Confirm the main window

    Once the v2rayN main window appears, leave TUN disabled for now. Open “Settings” → “Parameters Settings” to review the basics, then import a subscription and test the standard system proxy.

Another graphical route is to Control-click v2rayN.app in Finder and choose “Open.” Some macOS versions show an “Open” button in the second confirmation dialog. If you still see only a close option, return to “System Settings” → “Privacy & Security.” Both routes achieve the same result; do not perform both.

If System Settings does not work, check and remove the app’s quarantine attribute

Apps downloaded through a browser often carry the com.apple.quarantine extended attribute. It tells macOS that the file came from an external source. Normally, “Open Anyway” completes the approval. If the app was recompressed, moved, or extracted by a third-party tool and its attribute state is inconsistent, macOS may keep blocking it. In that case, target only v2rayN.app.

Two ways to proceed: use the graphical approval first, then target the app with a Terminal command if needed

Allow through System Settings
  • Keep the system confirmation flow
  • Best for a normal first-launch block
  • No Terminal command required
  • Use first for a freshly downloaded, complete app bundle
Remove the quarantine attribute
  • Target only the v2rayN.app path
  • Useful when the allow button is missing or the app keeps getting blocked
  • Check the path and filename before running the command
  • Afterward, relaunch the app from Applications

Conclusion: approve the app once in System Settings first. Remove the target app’s quarantine attribute only after confirming the source and trying a fresh download still does not work.

Open Applications → Utilities → Terminal and first inspect the attribute with the command below. If the output contains com.apple.quarantine, the app still has a quarantine marker. If macOS reports that the attribute is missing, do not run the removal command; investigate the app bundle and runtime logs instead.

xattr -p com.apple.quarantine "/Applications/v2rayN.app"

After confirming the path, remove the attribute from that specific app. The -d option deletes the named attribute, while -r applies the operation recursively inside the app bundle. The command should point only to v2rayN.app—not the entire Applications folder or your home directory.

xattr -dr com.apple.quarantine "/Applications/v2rayN.app"

If the app name or location differs, do not guess the path. Type xattr -dr com.apple.quarantine first, keeping the trailing space, then drag v2rayN.app from Finder into the Terminal window so macOS inserts the actual path. Press Return, then reopen it from Applications.

  • If you see “Permission denied,” confirm that your account can modify the app and check whether it is on a read-only disk image.
  • If you see “No such file,” the path or filename does not match. Use drag and drop to insert the path.
  • If the app still says “The application is damaged” after the command runs, delete the current app bundle, download it again, and extract it using macOS’s built-in archive utility.
  • Once the app opens, do not keep rerunning the command. Quarantine handling has no direct connection to node speed, protocol type, or routing rules.

First-launch network permissions: assess system proxy, local network, and TUN separately

After v2rayN starts, macOS may request access to the local network, incoming connections, or VPN configuration. These permissions affect different traffic paths, and you may not need all of them. A standard system proxy lets apps that follow macOS proxy settings connect to local 127.0.0.1 ports; TUN creates a virtual network interface to capture traffic from apps that ignore the system proxy.

Standard system proxy

Local address
127.0.0.1
SOCKS port
10808
HTTP port
10809
System path
Network → Details → Proxies

Use this mode first to test everyday browsers and desktop apps that follow the system proxy.

Local network permission

Settings path
Privacy & Security → Local Network
Local-only use
Usually not required
LAN sharing
Must be enabled explicitly
Listening address
Set according to the sharing configuration

Allow LAN access only when other devices need to connect to the proxy port on this Mac.

TUN virtual interface

Purpose
Capture traffic from more processes
System confirmation
VPN configuration or administrator authorization
Startup order
Enable after the node is confirmed usable
How to stop
Disable TUN before quitting

A system-level confirmation the first time a virtual interface is created is expected.

Incoming firewall connections

Settings path
Network → Firewall → Options
Remote node connections
Are outgoing connections
Provide a proxy to the LAN
May require approval
Decision point
Whether other devices will connect

Allow incoming connections only when LAN sharing is genuinely needed, and restrict the listening scope at the same time.

If you use v2rayN only on this Mac, keep the listening address at 127.0.0.1 and leave “Allow connections from the local network” disabled. Ports 10808 and 10809 will then accept local connections only. Enable LAN sharing and allow the corresponding incoming connection in the firewall only when other devices on the same network need access.

TUN requires a higher level of network control. If macOS asks to add a VPN configuration, modify a network extension, or enter administrator credentials, first confirm that the request was triggered by the v2rayN instance currently open. After authorization, the corresponding interface or configuration should appear in Network settings. If authorization is denied, the standard system proxy can still work, but TUN cannot create its virtual interface.

v2rayN basics: verify the standard proxy before enabling TUN

Once the app starts, go to “Settings” → “Parameters Settings” → “Core Type” and confirm which core the current node uses. Protocol parameters such as VLESS and VMess are normally imported from the subscription; the protocol name itself does not determine macOS permissions. If the subscription specifies transport and security parameters supported by Xray, select the Xray core. Do not manually rewrite the UUID, address, port, transport, or TLS settings unless you understand what each field means.

  1. Select the core

    Open “Settings” → “Parameters Settings” → “Core Type” and select Xray if required by the subscription node. Save, return to the main window, and confirm that the core startup log contains no errors.

  2. Import a subscription

    Add the complete subscription URL under “Subscription Groups.” After updating it, check that the node count, address, port, and protocol are displayed correctly.

  3. Select a node

    Select a node, set it as the active server, and run a latency test first. Latency only indicates reachability from the probe; verify the connection by loading an actual webpage.

  4. Start the system proxy

    First use “Set system proxy automatically,” or the system-proxy control provided by your version, so browser traffic goes to 127.0.0.1:10809.

  5. Enable TUN afterward

    After the standard proxy works, go to “Settings” → “Parameters Settings” → “TunMode Settings,” review the options, enable TUN, and complete the authorization prompts.

Standard system proxy

Recommended

The path is short and uses fewer permissions, making it easier to check the node, listening ports, and system proxy separately. Use this mode for the initial installation and basic verification.

Best for: browsers, desktop apps that follow the system proxy, and first-time troubleshooting

TUN mode

A virtual interface captures a broader range of traffic. It requires system-level network authorization, and DNS and split-routing settings should be checked as well.

Best for: apps that ignore the system proxy and traffic that must be captured uniformly

LAN sharing

Letting other devices connect to a listening port on the Mac requires changes to the listening address, firewall incoming connections, and LAN permissions.

Best for: cases where this Mac explicitly needs to provide a LAN proxy entry point

If v2rayN shows that it is running but macOS proxy settings have not changed, open “System Settings” → “Network” → the current network interface → “Details” → “Proxies.” Check that Web Proxy and Secure Web Proxy point to 127.0.0.1 and port 10809. Do not leave proxy addresses written by another network tool enabled at the same time, or conflicting settings may remain after that tool exits.

If another process is using 10808 or 10809, the core log will usually report an address-binding failure. In v2rayN’s parameter settings, change the local ports—for example, HTTP to 10819 and SOCKS to 10818. Then update the macOS proxy settings to match; a port mismatch makes the browser connection fail immediately.

Verification checklist: from launch to connectivity

After permissions are handled, verify in this order: app process → core process → local listener → system proxy → remote node → DNS. Checking each layer separately prevents Gatekeeper, port conflicts, and node failures from being mixed together. Change one variable at a time and retest after every adjustment.

  • App layer: The v2rayN main window opens reliably, and after quitting, the app can be launched again from Applications.
  • Core layer: The log shows that Xray has started, with no missing files, configuration parsing failures, or permission-denied messages.
  • Listener layer: At least one of 127.0.0.1:10808 and 127.0.0.1:10809—the port enabled by the current configuration—is listening.
  • Proxy layer: The proxy address and v2rayN local port configured on the current macOS network interface match, and the related settings are restored after system proxy mode is disabled.
  • Node layer: The active node’s server address, port, and protocol come from a valid subscription, and the connection log shows no repeated timeouts or handshake errors.
  • TUN layer: Check the virtual interface, routing rules, and DNS only after the standard proxy works, so two different entry paths are not diagnosed at the same time.
lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN

The commands above confirm whether a port is listening. If the process is not a v2rayN-related core, quit the program using the port or change v2rayN’s local listening port. If there is no output, the core may not have started. Return to the logs and check the configuration load result instead of changing the macOS firewall again.

If subscription updates fail but existing nodes still connect, check the subscription request log, system time, and current network. A subscription is only a configuration-delivery channel; it does not mean the proxy core has failed. Conversely, a successful update does not guarantee that a node works—use connection logs and an actual request to verify it.

After clicking “Open Anyway,” will the prompt appear again next time?

The same app bundle can usually continue launching after approval. macOS may ask again if you download a new full version, quarantine is reapplied during a move, or the app bundle changes.

Why won’t the app open after removing the quarantine attribute?

The quarantine attribute addresses only a specific launch check. An incomplete app bundle, incompatible CPU architecture, missing core files, or unusual permissions on the configuration directory can still prevent startup. Download the correct macOS build again and inspect Console and the v2rayN logs.

Will denying local network permission affect use on this Mac?

When using only a 127.0.0.1 local proxy, you usually do not need to expose the proxy ports to the LAN. If other devices must access this Mac’s listening ports, recheck “Privacy & Security” → “Local Network,” the listening address, and the firewall rules.

What if there is still no traffic after TUN authorization?

Disable TUN first and confirm that the standard system proxy and current node work. Then enable TUN again and check the virtual interface, default route, DNS, and split-routing rules. If the standard proxy also fails, troubleshoot the node or local port first.

Download v2rayN