Platform Notes 12 min read

Complete macOS FlClash Permissions Guide: Network Extension Approval and Keychain Prompts

A complete guide to macOS installation prompts: allowing an unidentified developer, approving network extensions, stopping repeated Keychain password requests, and removing leftover profiles after uninstalling.

Start by separating three types of macOS permissions

On macOS, FlClash may trigger Gatekeeper, administrator approval, VPN, or network extension prompts. Each involves a different system component, so they should not be reduced to one generic password dialog. When using system proxy mode, you generally only need to launch the app and configure the proxy. TUN mode additionally involves a virtual network interface, routing, and DNS handling.

Prompt type When it appears Where to handle it
Developer cannot be verified or app cannot be opened First app launch “System Settings” → “Privacy & Security”
Administrator name and password Installing helper components or enabling TUN macOS system authorization dialog
Adding a VPN configuration or network extension First time enabling TUN “System Settings” → “Network” → “VPN” or the extensions management page
Accessing an item in Keychain Reading saved credentials or detecting a component identity change The “Keychain Access” app

Before installation: chip, install location, and existing version

Identify whether your Mac uses Apple silicon or Intel

Open “Apple menu” → “About This Mac”. If the Chip field shows Apple M1, M2, M3, M4, or a later Apple chip, choose the arm64 installer. If the Processor field shows Intel, choose the x64 or amd64 installer. Choosing the wrong architecture typically results in the app failing to launch, quitting immediately, or requiring Rosetta translation.

Move the app to “Applications”

  1. Open the downloaded DMG or the extracted folder.
  2. Drag FlClash into “Applications” in the Finder sidebar.
  3. Launch it from the “Applications” folder rather than running it long-term from a DMG, Downloads, or an external drive.
  4. If the previous version is still running, quit it from the menu bar before replacing the app.

A fixed install path matters. macOS uses Keychain access controls together with code-signing identity and the app path when evaluating authorization. Launching the app from a different folder each time can make the system repeatedly ask whether it may access the same Keychain item.

Disable the proxy before upgrading

If the system proxy still points to the old process, overwriting the app directly may leave an unusable local proxy address behind. In FlClash, turn off the system proxy and TUN first, then quit the app. A common system proxy address is 127.0.0.1:7890, but the actual port is determined by mixed-port in the current configuration.

How to handle “developer cannot be verified” and “app is damaged”

When the first launch is blocked, find FlClash in Finder’s “Applications” folder, hold Control, click the app icon, and choose “Open”. If Gatekeeper still blocks it, go to “System Settings” → “Privacy & Security”, scroll down to the record for the recently blocked app, click “Open Anyway”, and confirm with your login password or Touch ID.

  1. Only handle this blocked-app record immediately after you have intentionally launched FlClash.
  2. Make sure the app name in the prompt matches the file in Finder.
  3. After allowing it once, reopen the app from “Applications”.
  4. Do not repeatedly extract the app into new folders, or macOS may treat each copy as a new app.

If “Open Anyway” does not appear in “Privacy & Security”, launch the app once more from Finder so macOS can create the corresponding record. Macs managed by an organization may also be restricted by MDM policy. In that case, the button may be hidden or disabled, and a device administrator must approve the app instead of changing settings for a standard local account.

Network extension approval: from system proxy to TUN

What system proxy mode does and does not cover

System proxy mode points macOS HTTP, HTTPS, or SOCKS traffic to a local listening port. A common setup is 127.0.0.1:7890, while the control interface is commonly 127.0.0.1:9090. The control interface is used for communication between the client and the mihomo core; it should not be entered as the web proxy port.

mixed-port: 7890
mode: rule
allow-lan: false
external-controller: 127.0.0.1:9090

With this setup, Safari, Chrome, and apps that read the system proxy use rule-based routing. Terminal curl, package managers, and some games may not read the system proxy, so “the browser works but the terminal connects directly” is not necessarily a fault.

Approval order when enabling TUN for the first time

In FlClash, go to “Settings” → “Network Settings” and enable TUN mode. Depending on the macOS version, you may see administrator approval, VPN configuration, and network extension prompts in different orders. Keep FlClash running when prompts appear, and do not click the toggle repeatedly, which can create multiple authorization requests at once.

  1. Enter the password for the current administrator account on the Mac in the administrator approval dialog.
  2. When macOS asks whether it may add a VPN configuration, choose Allow.
  3. On macOS 15 and later, check the status under “System Settings” → “General” → “Login Items & Extensions” → “Network Extensions”.
  4. On macOS 13 and 14, if an approval notification appears, go to “System Settings” → “Privacy & Security” and allow it there.
  5. Return to “System Settings” → “Network” → “VPN” and make sure no same-named entry is stuck in a connect/disconnect loop.
  6. Return to FlClash and test the connection only after the core has started.

After approval, macOS usually creates a virtual utun interface. Its number is not fixed: it may be utun3, utun7, or another value. A changing number does not indicate an installation problem. Check instead whether the default route, DNS requests, and the FlClash core are all running in sync.

Key fields in a mihomo TUN configuration

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

dns:
  enable: true
  listen: 127.0.0.1:1053
  enhanced-mode: fake-ip

auto-route writes routes automatically, auto-detect-interface identifies the current outbound interface, and dns-hijack hands specified DNS traffic to the core. FlClash may generate the runtime configuration from its UI, so do not maintain two conflicting sets of TUN fields in both the subscription file and the app interface.

Repeated Keychain password prompts: identify the source

First check which process is requesting which item. A genuine system dialog shows the item name and the app requesting access. If the prompt appears before FlClash has launched, check Login Items, old helper components, and other network tools first; do not automatically attribute it to the current app.

Try “Allow” once first

The first time it appears, choose “Allow” and enter your current macOS login password, then see whether the same action triggers another prompt. Consider “Always Allow” only after confirming that the app is in the fixed /Applications path, the requested item is clearly identified, and ongoing access is necessary. If the app was just replaced, moved, or given a different signing identity, Keychain may ask for confirmation again.

Check whether the “login” Keychain is locked

  1. Open “Applications” → “Utilities” → “Keychain Access”.
  2. Select the “login” Keychain on the left.
  3. If it is locked, right-click it, choose Unlock, and enter your current login password.
  4. Search for the item name shown in the prompt; do not bulk-delete certificates or passwords based on guesswork.
  5. Double-click the target item and check “Access Control” for an outdated app path.

After changing the Mac login password, the login Keychain may still use the old password. A typical sign is that the new password works for signing in while multiple apps keep requesting the old Keychain password. First try changing the “login” Keychain password so it matches the current account password. Resetting the default Keychain can affect browser passwords, Wi-Fi credentials, and items saved by other apps, so use it only as a last resort and confirm that a usable backup exists first.

Avoid three common repeat triggers

  • Do not keep multiple FlClash.app copies in different folders and launch them interchangeably.
  • When upgrading, quit the old process before replacing the existing version in “Applications”.
  • After deleting a Keychain item, restart the app as well; do not leave an old process holding a stale reference.

Four checks after authorization

Verify the local listening port

In FlClash, confirm that the core is running, then open Terminal and run the commands below. If the configuration does not use 7890, replace it with the actual mixed-port.

lsof -nP -iTCP:7890 -sTCP:LISTEN
curl -I -x http://127.0.0.1:7890 https://example.com

The first command should show the corresponding core process listening, and the second should return HTTP response headers. If the port is not listening, focus on the core startup log. If it is listening but requests time out, check subscription nodes, the selected policy group, and rule matches.

Check for a leftover system proxy

Open “System Settings” → “Network” → the Wi-Fi or Ethernet connection in use → “Details” → “Proxies”. When FlClash enables the system proxy, this panel may show a local address and port. If 127.0.0.1:7890 remains after quitting the app, every program that reads the system proxy will try to connect to a stopped port.

Check network extension and VPN status

systemextensionsctl list
scutil --nc list
ifconfig | grep utun

systemextensionsctl list shows registered system extensions, while scutil --nc list lists network connection services. The final command only checks whether a utun interface currently exists. macOS itself and other VPNs also create utun interfaces, so their presence alone cannot prove that they belong to FlClash.

Verify rules, not just the IP address

After selecting rule mode, visit one site that should connect directly and another that should use the proxy, then review the rule name, policy group, and outbound node in FlClash connection logs. Checking only the exit IP will not reveal an incorrect rule match. For example, if a DIRECT rule has too high a priority, TUN and the network extension may work normally while the target domain still connects directly.

Matching fixes for common problems

Network extension allowed, but TUN still will not start

  • Quit other VPNs, older Clash clients, and corporate proxies, then try again.
  • Turn off TUN, quit FlClash, wait 10 seconds, and start it again.
  • Confirm that the app is still in “Applications”, not on a mounted DMG volume.
  • Check whether the configuration contains duplicate DNS listening ports.
  • If 127.0.0.1:1053 is already in use by another process, change the DNS listening setting or stop the conflicting process.

LAN devices become unreachable after enabling TUN

TUN automatic routing may change how LAN traffic is matched. Keep direct rules for private address ranges, such as IP-CIDR,192.168.0.0/16,DIRECT,no-resolve, IP-CIDR,10.0.0.0/8,DIRECT,no-resolve, and IP-CIDR,172.16.0.0/12,DIRECT,no-resolve. If printers or NAS devices use local hostnames, also check that DNS can resolve those names.

Shows connected but cannot access anything after sleep or wake

After switching Wi-Fi, changing hotspots, or waking from sleep, the previous default interface may no longer be valid. Turn TUN off and on again so auto-detect-interface can identify the outbound interface again. If the problem occurs only after switching from Ethernet to Wi-Fi, quit and restart the app to rebuild routing and DNS state.

Traffic still uses the proxy after system proxy is disabled

Check whether TUN is still enabled or the browser has its own proxy extension configured. System proxy, in-app proxy, and TUN are three separate paths; disabling one does not stop the other two. In Terminal, also check whether the HTTP_PROXY, HTTPS_PROXY, and ALL_PROXY environment variables still point to a local port.

Uninstall and reinstall: remove VPN, extension, and proxy leftovers

Dragging FlClash.app to the Trash removes only the app itself. If TUN or the system proxy was enabled, restore network settings before deleting the app. This prevents a stale local port, VPN entry, or old helper authorization from surviving into the next installation.

  1. Turn off the system proxy in FlClash.
  2. Disable TUN mode and wait for the state change to complete.
  3. Quit FlClash and confirm that the menu bar icon and related processes have ended.
  4. Go to “System Settings” → “Network” → “VPN” and remove entries confirmed to belong to the old installation.
  5. On macOS 15 and later, go to “General” → “Login Items & Extensions” → “Network Extensions” and check for old entries.
  6. Open the current network’s “Details” → “Proxies” and remove settings that still point to an old 127.0.0.1 port.
  7. Finally, delete FlClash.app from “Applications” and restart the Mac.

Managed devices may also have configuration profiles installed. Check under “System Settings” → “General” → “Device Management”, and delete a profile only when its source and purpose are clear. Network settings delivered by a company or school should be handled by an administrator to avoid affecting certificates, Wi-Fi, and other security policies.

profiles list
scutil --proxy
ps aux | grep -i clash

profiles list checks configuration profiles, scutil --proxy shows the current system proxy state, and the final command checks for processes whose names contain Clash. Results may include other clients or legacy components, so verify each path before deleting anything.

Recommended stable installation order

  1. Download the installer for your chip architecture.
  2. Move FlClash into “Applications”, then launch it from that fixed location.
  3. Allow it through Gatekeeper and import your subscription.
  4. Start with system proxy mode to verify nodes, DNS, and rules.
  5. Confirm that actual listening ports such as 127.0.0.1:7890 work correctly.
  6. Enable TUN and approve the network extension only when full-device routing is actually needed.
  7. Use connection logs to verify rule matches instead of relying only on the toggle state.

This sequence separates app launch, subscription availability, system proxy, and TUN into four stages. When a step fails, you can identify the relevant layer directly instead of repeatedly deleting the app or resetting all network settings.

FlClash download View clients for every platform