Understand how Clash works on iPhone first
On iPhone, you typically do not install the desktop version of Clash. Instead, you get an App Store network utility that can read Clash configurations or compatible subscription formats. These clients use iOS Network Extension APIs to create a local VPN tunnel, then process traffic according to proxy groups, domain rules, and DNS settings in the configuration.
This works differently from enabling a “system proxy” on Windows. iOS does not require you to enter 127.0.0.1:7890 manually, nor do you need to configure an HTTP proxy in your Wi-Fi details. After launch, the client asks the system to add a VPN configuration and takes over eligible connections only after authorization succeeds.
Check these four capabilities before choosing a client
- Subscription format: Confirm that it supports the URL format provided by your service, or can directly read
.yamland.ymlconfiguration files. - Rule modes: It should at least handle ordered rules such as DOMAIN, DOMAIN-SUFFIX, IP-CIDR, GEOIP, and MATCH.
- Proxy protocols: Check whether the protocols actually used by the subscription are listed in the app’s documentation. Being able to import a URL does not mean every node in it will connect.
- System requirements: Check “Compatibility” on the app’s product page. For older devices, pay particular attention to the minimum iOS version and processor requirements.
Support for Clash Meta, including mihomo extension fields, varies between clients. Basic nodes, proxy groups, and standard routing rules are usually easier to support; for rule-providers, scripts, specialized DNS policies, or extended protocols, consult the client documentation. Importing a complete Clash YAML file into an app that accepts only generic node subscriptions often leaves the nodes visible while the original proxy groups, DNS settings, or rule sets do not work as intended.
Get a compatible client from the App Store
Step 1: Check your App Store account and iOS version
- Open iPhone “Settings” → “General” → “Software Update” and note the current iOS version.
- Open the App Store, tap your account picture in the top-right corner, and confirm that the account can download apps normally.
- On the app’s product page, scroll down to “Information” → “Compatibility,” then check the developer name, latest update date, and version history.
- Once the download finishes, open the app from the Home Screen. Do not manually enter a proxy server under “Settings” → “Wi-Fi” first.
This guide uses the Chinese menus in iOS 18.6 as a reference. On iOS 17.7 and in different regions, the “VPN & Device Management” wording may vary, or the VPN entry may appear separately, but the process is the same. App availability also varies by account region. If you cannot find an app, first check the developer’s website for supported regions and minimum system requirements.
Step 2: Identify the configuration type you can import
| Source | Common form | Checks before importing |
|---|---|---|
| Subscription URL | An address beginning with https:// |
Is the URL complete and still valid? Does the client support the returned content? |
| Clash configuration file | .yaml or .yml |
Does it include proxy groups, rules, and DNS fields? Is the file encoding valid? |
| Generic node subscription | A subscription URL copied from a web panel | Does the client require a dedicated subscription type or format conversion? |
| Single node | QR code, URL, or manual parameters | Are the protocol, server, port, and authentication fields complete? |
A complete Clash configuration and a node list are not the same thing. A full configuration usually contains proxies, proxy-groups, rules, and dns; a node list may provide only server details, leaving the iOS client to generate proxy groups and routing rules. If you see nodes after importing but not the original “Auto” or “Fallback” groups, first confirm which type of subscription you received.
Import a subscription URL or Clash configuration file
Method 1: Paste a subscription URL
- Copy the complete subscription URL from your provider’s panel, making sure there are no spaces or line breaks before or after it.
- Open the client and go to “Configuration” or “Profiles.”
- Tap “+” in the top-right corner and choose “Download from URL” or a similarly named option.
- Enter an easy-to-recognize name, such as “Daily subscription,” then paste the URL into the URL field.
- If the page offers an automatic update interval, start with 24 hours. Setting it to 5 minutes will not make nodes faster and may instead trigger request limits on the subscription server.
- Save it, wait for the download to finish, then select the configuration to make it active.
Subscription URLs usually contain access credentials and should be treated like account passwords. Do not include a real URL in public screenshots, shared notes, or support reports. The address below only illustrates URL structure and cannot be used to connect:
https://subscription.example.com/api/client?token=demo-token-2026
If you immediately see “Invalid URL” after pasting, check that the protocol prefix is still https://. If it times out after 10 seconds, the more likely causes are that the current network cannot reach the subscription server, DNS resolution failed, or the server is temporarily unresponsive. These errors require different troubleshooting paths.
Method 2: Import YAML from the Files app
- Save the configuration file to iCloud Drive or “On My iPhone” first.
- Open the system Files app and long-press the
.yamlor.ymlfile. - Choose “Share,” then select the installed proxy client from the app list.
- If the target app is not shown in the share sheet, tap “More” and check whether it provides a file-import extension.
- Return to the client’s “Configuration” page and check the file name, update time, and parsing status.
You can also choose “Import from File” inside the client to open the system file picker. When receiving a configuration through AirDrop, save it to Files first and then import it; this is generally more reliable than opening it directly from the preview.
Quickly check whether the YAML has the basic structure
When you see “Parsing failed,” first use a text editor to check indentation and top-level fields. YAML uses spaces to express hierarchy, and tab characters can cause parsing errors. The simplified snippet below is only for identifying the structure, not a complete node configuration:
mode: rule
dns:
enable: true
enhanced-mode: fake-ip
proxy-groups:
- name: Proxy
type: select
proxies:
- DIRECT
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,Proxy
MATCH is usually placed at the end of the rules as a fallback. Rules are matched from top to bottom, and processing stops at the first match. If a broad MATCH or DOMAIN-SUFFIX rule appears too early, later specific rules will never take effect.
Allow the VPN configuration and start the connection
System authorization is required on first launch
- On the client home screen, select the configuration you just imported.
- Open the proxy groups page and choose a node for the main policy groups, or use an automatic selection group.
- Return to the home screen and turn on the “Connect,” “Start,” or “VPN” switch.
- When the system asks whether you want to add a VPN configuration, tap “Allow.”
- Complete the confirmation with Face ID, Touch ID, or your device passcode.
- Wait until the client status changes to “Connected,” then verify the network.
What users often call “installing a VPN profile” usually means adding a VPN configuration managed by Network Extension; a separate configuration profile may not appear. After authorization, go to “Settings” → “General” → “VPN & Device Management” → “VPN” to check it. On some devices, you may see a “VPN” entry directly in “Settings.”
Normally, the iOS status bar or Control Center shows the VPN status. The icon only confirms that the system tunnel has been established; it does not prove that the node is reachable, DNS is working, or rules are routing traffic as expected. Complete the checks in the next section as well.
Are Local Network and notification permissions required?
- VPN permission: Required to establish the system tunnel. If denied, the client cannot take over traffic.
- Local Network permission: May be required to access a home NAS, printer, or LAN control interface; it is not always needed when using only a remote proxy.
- Notification permission: Used for disconnection, subscription update, or traffic alerts. It does not determine whether the VPN can be established.
- Cellular data permission: If you need a mobile connection, go to “Settings” → “Cellular” and make sure the switch for the target app is enabled.
Verify that the subscription, nodes, and rules are working
Start with four layers of checks
- Configuration layer: The configuration page shows no parsing errors, and the subscription update time matches this operation.
- Node layer: Nodes appear in the proxy groups, and latency tests do not consistently time out.
- Tunnel layer: The client shows Connected, and the VPN status in system settings also shows Connected.
- Rule layer: Connection records show the domain, matched rule, and policy group ultimately used.
A single latency test reflects the connection time to one specific test address. For example, node A showing 83 ms and node B showing 126 ms does not prove that A will download faster. Packet loss on mobile networks, server load, route detours, and the destination’s location all affect the real-world experience. A more reliable approach is to run three consecutive tests, then open a webpage, play a video, and download a small file separately.
Use logs to confirm rule matches
Most iOS clients record traffic under “Logs,” “Requests,” or “Connections.” Open a test webpage, then check whether the record includes the target domain, policy group, and node name. Common results can be interpreted as follows:
- Shows
DIRECT: The request followed a direct-connection rule and did not pass through a proxy node. - Shows a proxy group: The request matched that group and was forwarded through the node selected within it.
- Shows
MATCH: No earlier domain, IP, or rule-set condition matched, so the request reached the fallback rule. - Only an IP address appears, with no domain: This may be related to the DNS mode, the app’s own resolver, or a QUIC connection.
- No requests appear at all: The app may be bypassing the current tunnel, or the VPN may already be disconnected.
Fix authorization failures, import errors, and disconnections
The VPN does not connect after tapping “Allow”
First go to “Settings” → “General” → “VPN & Device Management” → “VPN” and check whether a configuration created by the same client already exists. If it exists but cannot be enabled, work through these steps in order:
- Fully quit the client, reopen it, and try starting it once more.
- Turn off other active VPNs, corporate security tools, or DNS-related Network Extensions.
- Restart the iPhone to ensure that an old network extension process is not still occupying the tunnel.
- After confirming the configuration source, delete the invalid old VPN configuration and authorize the client again.
- Check whether “Settings” → “Screen Time” → “Content & Privacy Restrictions” restricts account or configuration changes.
iOS generally enables only one personal VPN tunnel at a time. If another proxy app, corporate VPN, or content filter is active, the new client may remain stuck on “Connecting.” Company-managed devices may also use mobile device management policies to block new VPN configurations; contact the device administrator in that case.
The subscription downloads successfully, but there are zero nodes
- The provider may be returning a web login page instead of subscription content. Sign in to the panel again and generate a URL for the appropriate client type.
- The subscription may use an encoding or protocol that the client does not support. Check the import log for fields such as “unsupported” or “invalid type.”
- The URL may have been truncated during copying. If an address containing
&was copied only halfway, the server may return an empty configuration. - The subscription may have expired or run out of traffic. The server can still return a successful HTTP response while providing no usable nodes.
Node tests pass, but webpages will not open
Prioritize checking DNS and rules rather than repeatedly switching nodes. Temporarily change the mode to “Global” and test the same webpage. If Global mode works, the node path is probably sound and the issue is more likely the rule order or policy group selection. If Global mode also fails, check DNS, protocol compatibility, and the current network.
In Fake-IP mode, the client first returns a reserved address for the domain, then restores the original domain during connection setup and applies the rules. Some LAN devices, banking apps, and services that depend on local discovery may not work well with Fake-IP; use the client documentation to add the relevant domains to the filter list. Do not disable all DNS features, as this can create inconsistencies between the system DNS path and the proxy connection path.
Wi-Fi works, but cellular data does not
- Open “Settings” → “Cellular” and confirm that the client is allowed to use cellular data.
- Check whether Low Data Mode is affecting background subscription updates.
- Disconnect the VPN, turn Airplane Mode on once, wait 5 seconds, and turn it off again.
- Reconnect and inspect the logs to distinguish a DNS timeout from a node connection timeout.
- If only one UDP protocol fails, switch to a subscription node that supports TCP transport for comparison.
Subscription updates and everyday settings
How to set the automatic update interval
When nodes do not change often, updating every 12 or 24 hours is usually sufficient. If a provider makes a temporary route adjustment, update manually. A failed automatic update does not necessarily interrupt the current connection: most clients continue using the locally stored configuration, but newly added nodes, removed nodes, and rule changes will not sync.
If proxy groups look wrong after an update, check whether the currently selected node was removed from the subscription. Re-test an automatic selection group; with a manual selection group, choose a node again. After switching configurations, confirm that the rule mode has not changed to Global or Direct.
On-demand connections and background limits
Some clients support “On-Demand” connections that start the VPN automatically on Wi-Fi, cellular networks, or visits to specified domains. For an initial setup, disable complex on-demand conditions and add them one at a time after manual connections are stable. Too many conditions can trigger repeated reconnects when switching from Wi-Fi to cellular data, making webpages fail to load for several seconds.
iOS manages background runtime, but an established Network Extension can continue processing traffic. Whether the VPN keeps running after you swipe the client away from the app switcher depends on the app implementation and system state. If the status bar still shows VPN but the client cannot open connection logs, disconnect it from the system VPN switch and restart it in the app.
What to keep before moving to a new iPhone
- Record how you sign in to the subscription management page; do not rely only on the configuration saved inside the client.
- Export custom rules as a separate configuration file, or keep them in a controlled personal storage location.
- Note the selection logic for frequently used policy groups—for example, automatic selection for everyday use and DIRECT for local network services.
- After downloading the client again on the new device, add the VPN configuration and complete system authorization again.
Once complete, the iPhone workflow is: get a compatible client from the App Store, import a subscription or YAML file, select the active configuration and node, authorize the system VPN, then verify the rules in the connection log. When something goes wrong, checking the configuration, node, tunnel, and rule layers in order is more effective than repeatedly reinstalling the app.