First, distinguish a Gatekeeper block from a system proxy that isn’t working or a TUN startup failure. Confirm the installer’s source and your Mac’s processor architecture, then use macOS’s built-in approval process for the specific app. Test a working node with the standard system proxy before troubleshooting TUN, helper tools, or network extension permissions. This guide covers first-time installs and blocks that reappear after an update. You don’t need to disable macOS security features.
1. Identify the alert: developer verification and network permissions are different
“Cannot verify developer” appears when an app launches and is part of macOS Gatekeeper’s checks. v2rayN may not even be running yet, so changing subscriptions, switching to Xray, or editing DNS won’t resolve the launch block. Note the exact alert, then follow the relevant steps instead of treating unrelated issues as one problem.
- “Cannot verify developer” or “Apple could not check it for malicious software”: If you trust the download source, check Privacy & Security for an option to approve this app.
- “Will damage your computer” or a clear malware detection: Don’t open the app or treat this as a routine developer verification alert. Do not bypass the warning.
- “The application is damaged and can’t be opened”: Download and extract it again, then check the architecture and system requirements. This alert alone doesn’t prove that it’s only a permissions issue.
- The app opens, but websites won’t load: The launch check has passed. Now check the core, node, local port, and system proxy.
Also distinguish “Allow incoming network connections” from “Set system proxy.” The former is usually related to the macOS firewall and isn’t a general permission required to access websites. The latter changes proxy settings for the current network service. When an alert appears, check which app is requesting access and why; don’t assume every “Allow” prompt is part of installation.
2. Check your Mac’s architecture, then approve the app in Privacy & Security
Open About This Mac from the Apple menu. Macs with Apple silicon generally use the arm64 package; Intel Macs use the x64 package. Check the download page for the available builds. Architecture mismatch and developer verification are separate issues—repeatedly approving an app won’t fix an incompatible installer.
-
Check the installer
Go to the installer page on this site and choose macOS and the matching processor architecture. Open the disk image or extract the archive as appropriate; don’t run files from the compressed archive preview.
-
Move the app to Applications
Move v2rayN to the Applications folder, then open it once from Finder. Avoid switching between copies in Downloads, which can make it unclear which app is being updated or approved.
-
Check the block record
After seeing the developer verification alert, open Apple menu → System Settings → Privacy & Security. Scroll down to the Security section and check the name of the blocked app.
-
Approve this app
If the system offers “Open Anyway,” click it and authenticate with your account password or Touch ID as prompted. Confirm opening in the next dialog. Button labels and confirmation steps may differ by macOS version.
-
Check whether it opens
Return to Applications and launch the same copy of v2rayN again. If its window appears, move on to network setup. If it’s still blocked, note the exact alert and avoid changing other security settings at the same time.
These menu paths apply to macOS 13 and later, which use System Settings. Earlier versions use System Preferences → Security & Privacy → General. This describes where to find the settings; it doesn’t mean the current installer supports older macOS versions. Check the installer’s system requirements.
3. If “Open Anyway” isn’t available, troubleshoot the cause
The approval option generally appears after you try to open the app and macOS blocks it, and it may not remain visible. Try opening it once more from Finder, then check Privacy & Security right away. If there’s no record of the app, confirm the alert is actually about developer verification—not file damage, incompatibility, or a malware warning.
Approve in System Settings
RecommendedApprove only the app whose source you’ve verified, leaving checks for other apps intact. Trigger the block once, then check the app’s name in Privacy & Security.
Best for: First launch on a personal Mac or approval after an update
Download the installer again
Remove unused or problematic copies, then download and fully extract the installer again. If you see a “damaged” alert, an extraction error, or an architecture mismatch, address the file or compatibility issue first.
Best for: Incomplete downloads, outdated copies, or the wrong processor architecture
Check with your administrator
Ask your administrator to check device management restrictions and app permissions. Having an administrator account doesn’t necessarily let you override security policies set by your organization.
Best for: Work-managed Macs, locked settings, or approval blocked by policy
Don’t start by disabling Gatekeeper or recursively removing quarantine attributes from your entire Downloads folder. That broadens the changes and can hide problems with the installer’s source or integrity. For further troubleshooting, provide the full alert text, macOS version, processor architecture, and install location. Hide your account name and personal paths in screenshots.
4. Test the system proxy before enabling TUN
If v2rayN opens, that only confirms that its desktop interface launched. To connect, the core process must be running, the node settings must be correct, and apps must send requests through the local proxy. The standard system proxy mainly affects apps that follow system proxy settings. It won’t automatically route traffic from every app, and command-line tools may not use it.
Test in this order: standard proxy first, TUN second
Standard system proxy
- Import a subscription, select a working node, and confirm the core starts.
- Choose “Set system proxy automatically” from the client’s System Proxy menu.
- Check the proxy address and port for the active Wi-Fi or Ethernet service.
- Test the connection in a browser and with a request that explicitly uses the proxy.
TUN mode
- Enable it only if you need to route traffic from apps that don’t follow system proxy settings.
- Check the permissions required by your client version and core implementation.
- This may involve elevated privileges, a virtual network interface, routing, or DNS changes.
- If startup fails, turn off TUN and use the standard proxy as your troubleshooting baseline.
If the standard proxy works but TUN doesn’t, focus on TUN permissions and routing. Don’t start by reinstalling the app or rebuilding all subscriptions.
To check the system proxy, open System Settings → Network → the active network service → Details → Proxies. Each network service has its own settings. After switching from Wi-Fi to Ethernet, check the new service instead of relying on the previous Wi-Fi settings. Menu locations may vary between v2rayN versions; use the system proxy option in your current interface.
Client listening settings
- Listen address
127.0.0.1- Example port
10808- Proxy type
- Use SOCKS or HTTP, depending on what the current listener supports
- Where to check
- Client settings and startup logs
10808 is an example port for this guide, not a guaranteed default for your installed version.
System proxy settings
- Applies to
- The active network service
- Server
- Match the local listen address
- Port
- Match the port for the corresponding protocol
- When exiting
- Confirm the client has cleared the proxy settings it added
Don’t enter a SOCKS-only port in an HTTP proxy field. If the listener supports both protocols, configure it according to its actual capabilities.
5. Network extensions and helper permissions: approve only what’s actually requested
A standard system proxy isn’t a network extension, and enabling TUN doesn’t mean every version installs the same extension. The implementation depends on the client version and selected core. Some methods create a virtual network interface with administrator privileges; others use a helper tool. The corresponding permission prompt appears only if the implementation actually uses a system extension or VPN configuration.
- If an administrator password prompt appears: First confirm it was triggered by an action you just took, such as enabling TUN or installing a helper, and check who is requesting access. Never enter your administrator password in a subscription URL, node remark, or web form.
- If prompted to add a VPN configuration: Confirm the prompt was triggered by your current action, then follow the system instructions. Don’t add an unfamiliar configuration just to troubleshoot the standard system proxy.
- If macOS says a system extension was blocked: Follow the prompt to review the developer and extension in System Settings. On newer versions, related controls may be under General → Login Items & Extensions. Follow the location shown by macOS.
- If no network extension prompt appears: That doesn’t mean you’re missing a permission. If the standard proxy works, don’t go looking for an extension that isn’t there just to complete a checklist.
If enabling TUN cuts off all network access, turn TUN off first, then check whether the system proxy still points to a local port that’s no longer listening. Once your regular connection is back, review the logs to distinguish insufficient permissions, virtual interface creation failures, port conflicts, and unreachable DNS. Change one thing at a time so you can identify what affected the result.
6. Use ports and request results to diagnose “the app opens, but nothing connects”
The values below help define what to check; they aren’t speed test results or default settings for every version. Before you begin, find the actual listen address, port, and protocol in the client settings and logs, then replace the example values in the commands.
Open Applications → Utilities → Terminal. The first command below checks whether the example port has a TCP listener. The second explicitly uses a SOCKS proxy and resolves the destination hostname through the proxy. Run the second command only if that port actually supports SOCKS. You can replace the test destination with an HTTPS site you know is reachable.
lsof -nP -iTCP:10808 -sTCP:LISTEN
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 15 -I https://example.com/
- No listener found: First check whether the actual port is different, then review the core startup logs. The interface may be visible even if the core has exited, while the system proxy remains enabled.
- Connection refused immediately: Check that the proxy process is running, the listen address is correct, and you haven’t mixed up the HTTP and SOCKS ports.
- Local connection succeeds, but the remote request times out: Check node availability, the server address, system time, and routing rules. There’s no need to repeat developer approval.
- Explicit proxy request works, but the browser doesn’t: Check whether the browser follows system proxy settings, has its own proxy configuration, and is using the correct network service.
An HTTP status code only means the request received a response; it doesn’t guarantee the page is what you expected. Some websites reject HEAD requests with a 403 or 405, so don’t assume the node is broken based on the status code alone. If a regular terminal request fails but an explicitly proxied one succeeds, that doesn’t mean system proxy authorization failed: command-line tools don’t necessarily read macOS system proxy settings.
7. Final checks for repeated prompts after updates and lost connectivity after quitting
An app update may change its contents, prompting macOS to ask for approval again. But if the same copy is blocked every time it launches, check where you’re opening it from. An old Dock shortcut, another copy in Downloads, or an earlier process that’s still running can leave you working with a different copy than intended.
- Quit v2rayN completely, then open the intended copy from Applications in Finder. Make sure it isn’t a temporary copy inside an archive or disk image.
- Before updating, note your subscription groups, current node, and local ports. Make a backup first; don’t delete app data until you know where the configuration is stored.
- Approve only the new copy when macOS prompts you. Check for old launch items or Dock shortcuts before removing them.
- Before quitting, turn off TUN and use the client’s “Clear system proxy” option. If the app quits unexpectedly, check for leftover settings under Proxies for the active network service.
- When reporting an issue, include your macOS version, processor architecture, exact alert text, and redacted logs. Hide subscription links, UUIDs, passwords, and server credentials.
You’re done when the app launches from a consistent location, the core is listening correctly, explicit proxy requests receive a response, apps that need the proxy can connect, and regular network access returns after quitting. Add TUN permissions only if you actually need TUN to route traffic. This keeps launch blocks, proxy settings, and traffic routing as separate issues.