First, identify the issue: app launch, network permissions, or credential access

Clash clients on macOS don’t all use the same authorization flow. The app window, Clash Meta (mihomo) core, privileged helper, and network extension are separate components. Some clients use only the system proxy; others start TUN through a helper or use Apple’s Network Extension framework. Seeing a TUN toggle doesn’t necessarily mean you need to approve a network extension.

Before troubleshooting, note the exact alert, the name of the requesting app, and when it appears. If macOS blocks the app before a window opens, check launch restrictions. If the problem occurs only when you enable TUN, check the helper or network permissions. If the app opens but asks for a password to access subscription credentials, check Keychain. Don’t assume all three issues mean the installer is corrupt.

Alert or symptom Check first What not to do yet
“Apple cannot check it for malicious software” or “developer cannot be verified” App source, signature, and launch warnings under Privacy & Security Keep changing subscriptions or DNS settings
“App is damaged” or “will damage your computer” Exact alert, download source, and project release notes Remove quarantine attributes or disable system protections
System extension blocked or request to add a VPN configuration Extension developer, network configuration, and device management policies Delete the entire login keychain
An app wants to use confidential information stored in the login keychain Requesting app, specific keychain item, and access controls Enter your subscription password in a system authorization prompt

Before installing, check your macOS version, chip, and app location

Note your macOS version and processor architecture

Choose Apple menu → About This Mac and note your macOS version and chip. On download pages, Apple Silicon usually means arm64, while Intel means x86_64. A Universal build may include both architectures; check the project’s release notes. Some Intel apps on Apple Silicon may prompt you to install Rosetta. That isn’t a network extension authorization request.

If you need to send details to the maintainer, you can run these read-only commands in Terminal. The first shows your macOS version; the second shows the architecture of the current execution environment. If Terminal is running through Rosetta, the second command may return x86_64, so check About This Mac to confirm your hardware.

sw_vers
uname -m

Launch the same app from a consistent location

  1. Get an installer compatible with your macOS version from the project’s release page or another verified source, and check the minimum macOS requirement.
  2. For a DMG, drag the app into the Applications folder, then eject the disk image. Don’t keep launching the app from the DMG.
  3. Quit any other copy of the client running from Downloads, the desktop, or an old disk image. From then on, launch it only from Applications.
  4. Note the client version and core name. App updates and core updates aren’t always the same thing, so report them separately when describing an issue.

Keeping the app in a consistent location helps avoid launching the wrong copy or using a mismatched helper path, but it won’t stop Keychain prompts by itself. App signatures, item permissions, and system security policies can all affect authorization.

Handle “Developer Cannot Be Verified” and “App Is Damaged” separately

When macOS offers “Open Anyway”

For an app from a verified source that macOS simply hasn’t approved yet, try opening it normally once. Then go to Apple menu → System Settings → Privacy & Security and check the Security section for the app that was just blocked and an Open Anyway button. Continue only if the name matches the app you tried to open, and authenticate if prompted.

On macOS 15, don’t rely on older guides claiming that Control-clicking the app icon always bypasses the warning. For some apps that aren’t properly signed or notarized, macOS requires you to use Privacy & Security. The wording and availability of the button vary by system version and the reason the app was blocked.

  • “Apple cannot check it for malicious software”: This is a security warning that calls for checking the app’s source; it doesn’t confirm that the app is safe.
  • “Will damage your computer” or “moved to the Trash”: Stop and check whether the project has withdrawn this build. Download a trusted version instead.
  • “App is damaged”: This may indicate an incomplete download, an invalid signature, or a modified app. The message alone doesn’t identify the cause.
  • “This app is not supported on this Mac”: Check the chip architecture and minimum macOS requirement first. An authorization button won’t fix a compatibility issue.

If the same warning appears after downloading the installer again, keep a screenshot of the alert, your macOS version, and the installer source. On a school- or company-managed Mac, device policies may disable Open Anyway. Contact your administrator instead of trying to bypass device management.

Authorizing network extensions, VPN configurations, and TUN helpers

First, find out which mechanism the client actually uses

A system proxy usually changes HTTP, HTTPS, or SOCKS proxy settings, which only apps that respect those settings will use. TUN routes traffic through a virtual network interface. mihomo supports TUN, but how a macOS client gets permission depends on its implementation: it may use a privileged service or another network component. The absence of a network extension entry doesn’t prove that TUN setup failed.

If the client explicitly asks to install a service or helper, use the installation option provided by that client and verify the app name in the system authorization prompt. This often requires an administrator account; it has nothing to do with your subscription username or password. Don’t run long Terminal commands from unknown sources that request administrator privileges.

Where to find extensions and network settings in macOS 15

  1. If the alert explicitly says a system extension was blocked, go to System Settings → General → Login Items & Extensions. Under Extensions, open Network Extensions and check the developer and component names.
  2. If macOS asks to add a VPN configuration, read the app name in the request before deciding whether to allow it. You can then check the configuration under System Settings → Network → VPN & Filters.
  3. On macOS 13 and 14, some extension approval options appear near the bottom of System Settings → Privacy & Security. Follow the location shown in the alert; don’t assume an older system is broken just because it lacks a section shown in a newer screenshot.
  4. After authorizing, follow macOS prompts to quit and reopen the app or restart your Mac. Don’t install multiple copies of a helper while the core is still running.

Allow in the Background controls whether background items can run; it doesn’t mean a network extension has been approved. Likewise, Full Disk Access doesn’t replace network authorization. Evaluate each permission separately, and grant it only when the client’s documentation says the feature needs it.

systemextensionsctl list

The read-only commands above can list system extensions and their status for comparison with the developer information in the alert. They don’t list every regular helper and can’t confirm that every type of VPN component is working. Don’t reinstall macOS just because the list is empty.

Repeated Keychain password prompts: identify what’s being requested

A Keychain alert may ask you to unlock the login keychain, or an app may ask to read a specific password item. These require different steps. Check whether the alert names a particular item, identifies the requesting app, and offers options such as Deny, Allow, or Always Allow. The requester may be the client or one of its helper components; don’t approve it just because its icon looks familiar.

Which password should you enter?

  • When macOS asks an administrator to approve a helper installation, use the credentials for a local administrator account or Touch ID if offered.
  • If the alert explicitly asks for the login keychain password, it’s usually the Mac login password in use when the keychain was created or last synced.
  • If you recently reset your account password through recovery or another method, the keychain may still use the old password. Your current login password might not unlock it.
  • Never enter your Apple Account password, proxy node password, or subscription URL in a local Keychain authorization prompt.

Find the specific item in Keychain Access

Use Spotlight to find and open Keychain Access, select the login keychain, and search for the item named in the alert. On newer systems, the Passwords app and Keychain Access are separate tools; some app credentials still need to be checked in Keychain Access. Open the item’s info window and verify its name, account, and related service. If it has an Access Control tab, check which apps are allowed to access it.

  1. Deny requests you don’t recognize, quit the client, and see whether the prompts stop.
  2. Launch only the intended copy from Applications, repeat the action once, and check whether the alert refers to the expected item.
  3. Once you’ve confirmed the source, choose Allow for this request to test whether access is restored. Then decide whether ongoing access is appropriate.
  4. If the prompt returns after every update, note the old and new app versions and the requesting app’s name. Check whether the signature or helper component changed.

Always Allow applies only to the relevant item and access conditions; it doesn’t disable alerts globally. Don’t allow every app to access the item, and don’t remove the login keychain password. Repeated prompts may result from an incorrect password, a locked keychain, changed access conditions, or duplicate running components. Check each possibility separately.

Verify proxy and connectivity after authorization

Opening the app and getting the proxy to work are two separate checks. Leave TUN off at first and enable only the client’s system proxy. Confirm that the core starts, then check whether browser requests appear in the connections or logs panel. This separates app launch, proxy listening, and virtual network interface issues—and avoids changing several settings at once.

Check the proxy port and listening process

Run these read-only commands in Terminal. The example uses mixed-port: 7890 as the client’s configured value. If the settings page shows a different port, use that value instead. Port 7890 isn’t a universal default for all clients.

scutil --proxy
lsof -nP -iTCP:7890 -sTCP:LISTEN

scutil --proxy shows the current proxy configuration. Check whether the relevant proxy is enabled and verify the host and port. With a regular HTTP/HTTPS system proxy, you should typically see the corresponding enabled entries; with PAC, check the automatic proxy configuration instead. Use lsof to see whether a process is listening on a specific port. As a regular user, you may only see processes you have permission to inspect.

  • System proxy points to a local port, but nothing is listening: Check core startup logs, configuration errors, and port conflicts before approving a network extension again.
  • System proxy is off, but TUN is on: Proxy fields alone can’t confirm a failure. Check TUN status, routes, and the client’s connection records as well.
  • Requests appear in the log but time out: Check the subscription, outbound node, and matching rules. Launch authorization is probably no longer the blocker.
  • Only one app bypasses the proxy: Check whether it follows system proxy settings. System proxies and TUN cover different types of traffic.

Once the system proxy works, enable TUN. If the problem starts then, save the logs from that moment and check service permissions, virtual interface creation, and routing. During testing, run only one traffic-routing client. Disconnect other VPNs, network filters, or TUN services through their own interfaces, then restore them after testing.

Still not working? Gather reproducible details

Before reporting the issue, reproduce it once in this order: launch the app, enable the system proxy, then turn on TUN. Note the first step that fails. Instead of repeatedly importing the subscription, collect evidence that helps distinguish a permissions, configuration, or network issue.

  1. Environment: Full macOS version, Apple Silicon or Intel, and whether the Mac is managed.
  2. App: Client name and version, core name, app location, and whether older copies are still present.
  3. Alert: Exact wording, requesting app name, when it appears, and the status shown on the relevant settings page.
  4. Test results: Whether the system proxy works, whether the error appears only after enabling TUN, and whether a process is listening on the proxy port.
  5. Relevant logs: Include only entries from around the time of failure. Redact subscription URLs, tokens, passwords, and personal network information before sharing.

If you no longer use the client, turn off the system proxy and TUN in the app first, then remove helper components using the uninstall method provided by the project. Deleting the app icon may not remove system proxy settings, background services, or VPN configurations. If you lose internet access after uninstalling, check for leftover proxy settings under Network first. Don’t bulk-delete system files you don’t recognize.