This guide is for users who have downloaded v2rayN but cannot open it on macOS, see no window after launch, find that the system proxy does not work, or repeatedly receive TUN permission prompts. Check the package and CPU architecture first, then approve the initial launch, verify network permissions, the Xray core, and local ports. Each step includes an observable result to help locate the blockage.
Identify where v2rayN stalls during startup
On macOS, “not opening” can mean several different failures. An immediate “developer cannot be verified” alert means the app has not entered its own startup flow; macOS security policy blocked it. If the icon appears briefly in the Dock and then exits, check the app architecture, file integrity, and runtime logs. If the main window opens but web traffic does not use the proxy, the problem is usually the system proxy, Xray core, or local listening port.
Do not change security settings, proxy mode, subscriptions, and routing rules at the same time. Handle one layer at a time and record the result after each step. This prevents an approved app from being mistaken for a startup failure caused by a bad node or an occupied port.
- Blocked immediately after double-clicking: first handle the “unverified developer” or “cannot check for malicious software” alert.
- Icon flashes and disappears: make sure the build matches your Apple silicon or Intel processor, then check the exit record in Console.
- Window opens but no servers appear: open the subscription group, update the subscription, and confirm that its URL is still valid.
- Server connects but the browser cannot: check whether the system proxy is enabled and whether another program is using local ports such as 10808.
- Regular proxy works but TUN does not: focus on administrator authorization, network extensions, routing tables, and DNS takeover status.
Handle “unverified developer” and first-launch blocks
When you first open an app downloaded from the web, macOS checks its quarantine attributes and signing status. After a block alert appears, repeatedly double-clicking usually changes nothing. Close the alert, then open the system security page and explicitly approve the v2rayN launch you just attempted.
The approval button appears only after macOS records a recent launch block. If no matching message appears at the bottom of Privacy & Security, return to the Applications folder, double-click v2rayN once, and immediately check the security settings again.
-
Move the app
After extracting the download, move v2rayN.app to the Applications folder. Do not keep running it from Downloads or from an archive preview window.
-
Trigger the check
In Applications, double-click v2rayN. When “developer cannot be verified” or a similar alert appears, close the dialog.
-
Open the security page
On macOS 13 through 15, open “System Settings” → “Privacy & Security”; on macOS 12, open “System Preferences” → “Security & Privacy” → “General.”
-
Confirm that you still want to open it
Find the recently blocked v2rayN and click “Open Anyway.” Confirm with local administrator credentials, then return to Applications and launch it again.
-
Choose the core
In v2rayN, open “Settings” → “Preferences” → “Core Type,” select the Xray core for VMess, VLESS, and other configurations, then save.
| System version | Settings path | Expected result |
|---|---|---|
| macOS 12 | System Preferences → Security & Privacy → General | After unlocking the pane, the blocked app and approval button are visible |
| macOS 13 | System Settings → Privacy & Security | A security message matching the recent block appears at the bottom of the page |
| macOS 14 | System Settings → Privacy & Security → Security | After confirming “Open Anyway,” a launch confirmation dialog appears again |
| macOS 15 | System Settings → Privacy & Security | After administrator verification, the app enters its normal startup flow |
Choosing network extensions, the system proxy, and TUN permissions
An app opening successfully only means its graphical interface passed the startup checks. To send traffic through the Xray core, choose how traffic will be captured. The system proxy mainly affects apps that follow macOS proxy settings. TUN creates a virtual network interface and changes routes, so it covers more traffic, requires higher privileges, and is more susceptible to conflicts with other network tools, filters, and corporate policies.
For initial troubleshooting, start with a regular local proxy, then enable the system proxy, and test TUN last. Enabling everything at once makes it difficult to tell whether a page fails because of DNS, routing, a network extension, or the node itself—even when the log shows a successful node handshake.
Local proxy only
Let Xray listen on a port at 127.0.0.1 without changing system network settings. Use a browser’s manual proxy configuration to verify that the core works.
Best for: first launch, port checks, and node connectivity tests
System proxy
Recommendedv2rayN writes the HTTP, HTTPS, or SOCKS proxy settings in macOS. The permissions and scope of impact are relatively clear.
Best for: everyday browsing and confirming stable operation
TUN mode
A virtual interface captures more traffic and requires administrator authorization. It may also change the default route, DNS, and bypass rules.
Best for: apps that ignore system proxy settings and full-traffic routing
- On macOS 13 and 14, check “System Settings” → “Network” → “VPN & Filters” and make sure no inactive filter is still occupying the network path.
- On macOS 15, check the network extension status under “System Settings” → “General” → “Login Items & Extensions.” The relevant entry appears only if the current build has actually registered an extension.
- If an administrator verification dialog appears after enabling TUN, confirm that the requesting process matches the action you just took, then authorize it with a local administrator account.
- Company-managed devices may restrict network extensions through configuration profiles. The controls may be unavailable; in that case, ask the device administrator to change the policy.
- After disabling TUN, wait a few seconds for the virtual interface and routes to be removed before switching back to the system proxy. Do not toggle it rapidly.
Bottom line: establish a working baseline with the system proxy first
If 127.0.0.1:10808 forwards traffic normally and the system proxy can reach the target site, but the connection drops only after TUN is enabled, stop changing subscription or protocol settings. Check the network extension, DNS, and routing conflicts instead.
Troubleshoot sudo prompts, the Xray core, and local ports
When TUN creates a virtual interface, writes routes, or changes DNS, macOS may show an administrator authorization request. sudo is not a connection protocol and will not make a node faster; it only permits the current action to modify protected network settings. A regular system proxy usually does not need persistent administrator access. If authorization is requested on every launch, check whether TUN starts automatically or whether the previous exit left network state unrecovered.
Do not copy an entire administrator command from an unfamiliar prompt. Cancel the request, disable TUN, and confirm that v2rayN starts in regular mode. Then enable TUN again and watch whether the authorization dialog appears immediately after the action you selected. If the timing, app name, or operation does not match, stop authorizing and review the app source and runtime log.
In-app check path
1. “Settings” → “Preferences” → “Core Type” → Select Xray
2. Check whether the local listening address is 127.0.0.1
3. Check the SOCKS or mixed proxy port; 10808 is a common value
4. Save the settings and restart the core instead of repeatedly restarting the entire device
Read-only terminal checks
lsof -nP -iTCP:10808 -sTCP:LISTEN
scutil --proxy
netstat -rn | head -n 20
When lsof produces output, check whether the listening process belongs to the current v2rayN or Xray. If another program owns the port, quit it or switch to an unused port such as 10818 in Preferences, then update the system proxy as well. Use scutil --proxy to see whether the current system proxy points to the expected local address; do not rely on a menu-bar icon alone to confirm that the setting was written.
- Select a clearly configured, recently working node from the server list and set it as the active server.
- Open the runtime log, restart the Xray core once, and confirm that there is no port-conflict message such as “address already in use.”
- Check that the configuration protocol matches the Core Type. Prefer the current Xray core for VLESS, VMess, and similar configurations.
- Disable routing rules first and verify the connection through the simplest proxy path. Restore geosite, geoip, and custom rules only after it works.
- If stale system proxy settings remain, turn off the system proxy in v2rayN first, quit the app, and then verify the proxy entries in macOS network settings.
Bottom line: successful authorization does not mean the core is listening
Administrator verification only grants permission for system-level network changes. The final check must cover the Xray log, local port listener, and system proxy target. If any one is missing, the browser may show a connection timeout.
Icon crashes, missing windows, and “app is damaged” alerts
If the v2rayN icon appears in the Dock for a few seconds and then disappears, open macOS Console and filter the crash reports by v2rayN or the relevant core process. An architecture mismatch, failed dynamic-library load, or configuration parsing error can occur before the main window appears; changing the system proxy will not help.
Do not automatically treat “app is damaged” as a security-approval issue. An incomplete download, an archive tool that altered the package structure, an app still located on a read-only volume, or a mismatched processor build can produce similar alerts. Delete the current copy, download the version for your device architecture again, extract it with the system archive utility, and move it to Applications.
Clicked “Open Anyway” but still returned to the original alert?
First confirm that you approved the v2rayN in Applications, not another copy in Downloads. Delete duplicates, double-click the target app again, and approve it once more under “System Settings” → “Privacy & Security.”
The Dock shows an icon, but the main window is nowhere to be found?
Check whether a v2rayN status icon is already in the menu bar, then switch apps with Command+Tab. If the window still does not appear, quit the process, temporarily move the old configuration directory aside, and test whether the cause is saved window state or a configuration parsing error.
Asked for the administrator password every time it starts?
Open v2rayN and check whether TUN is set to start automatically. Disable TUN and restart once. If the regular system proxy no longer requests authorization, the prompt comes from the virtual-interface or route-adjustment flow.
System proxy is enabled, but pages still time out?
Run lsof -nP -iTCP:10808 -sTCP:LISTEN to check the port, then verify in the Xray log that startup completed. If the actual port is not 10808, use Preferences to make the local port and system proxy value match.
All network access drops after enabling TUN?
Disable TUN immediately and wait for the virtual interface to be removed, then restore the system proxy. Disable other network filters, check DNS and routing rules, and test TUN separately only after the regular proxy works.
Use this checklist to verify the connection after recovery
After resolving the issue, verify each layer in order: app startup, core listening, system proxy, node connection, and routing. A changed menu-bar icon does not prove that the entire path works. Likewise, opening one webpage does not confirm that TUN, DNS, and bypass rules behave as expected.
Start with one server, disable complex routing, and run a basic access test. Restore subscription groups and routing rules afterward. If the connection fails again after restoring a rule, the problem is likely its order, domain set, or outbound tag—not macOS security permissions.
- Application layer: The v2rayN main window opens twice in succession, and quitting leaves no abnormal alert.
- Core layer: The Xray log shows that the configuration loaded successfully, and 127.0.0.1:10808 or the custom port is listening locally.
- Proxy layer:
scutil --proxyshows the same address and port configured in v2rayN Preferences. - Subscription layer: After updating the subscription, the server list contains entries and the active server’s protocol, address, port, and transport settings are complete.
- Routing layer: Restore direct, proxy, and block rules step by step, confirming that top-to-bottom matching does not hit the wrong outbound too early.
- TUN layer: Enabling TUN creates the virtual interface normally, and disabling it restores the default route and DNS without leaving the network offline.