Before You Install: Check the Client and Config Format
To use a Clash config on an iPhone, don’t just search for an app with “Clash” in its name. Check which config formats the client accepts, which core it uses, and whether it’s available in your App Store region. The original Clash project has not released a single official iOS client. Compatible iOS apps come from different developers, so their interfaces and features vary.
“Supports proxy subscriptions” doesn’t necessarily mean “supports full Clash YAML.” Some clients import nodes only; others support proxy groups and rules, while some accept only their own format. Mihomo, often referred to as Clash Meta, is a proxy core. Configs made for Mihomo may use protocols or fields unsupported by older Clash cores. Check the app’s documentation for supported config formats and core details before importing.
- Have a complete YAML file? Make sure the client supports
proxies,proxy-groups, andrules, and check that it supports the protocols used in the config. - Have a subscription URL only? Check whether your provider offers a Clash or Mihomo config, or a subscription containing node URIs only.
- Have a single proxy node? A node URI such as
ss://is not a complete YAML config. Use the client’s “Add Node” option or the equivalent URI import feature. - Planning to use it across devices? Check App Store availability, minimum OS requirements, and purchase history separately for iPad and iPhone.
Get the App from the App Store: Check Region, OS, and Developer
Open the App Store listing from the download page
- Open this site’s client download page, choose the iOS option, then open the app’s App Store listing.
- Check the app name and developer, then review “Compatibility” and the release notes. Apps with similar names may support entirely different config formats.
- Tap “Get” or the price button, then authenticate with your Apple Account as prompted. Check the current App Store listing for pricing and supported devices.
- When you first open the app, check its version and core details under “About” or “Settings” before choosing a config to import.
If you see “This app is not available in your country or region,” the issue is usually the app’s distribution region, not an expired subscription. App Store availability is primarily determined by the country or region of the Apple Account used for purchases. Changing “Settings” → “General” → “Language & Region” does not change your App Store region.
Can’t Find or Install the App?
- Check your OS version: Go to “Settings” → “General” → “About” and compare your iOS or iPadOS version with the App Store’s minimum requirements.
- Check your purchase account: Go to “Settings” → “Apple Account” → “Media & Purchases” to see which account is signed in. Older versions of iOS may show “Apple ID.”
- Don’t confuse the core with the app: Desktop installers can’t run directly on an iPhone, and the option to import a local file is not an app installer.
Changing your account’s country or region may affect your balance, subscriptions, and payment methods. Read Apple’s account-change guidance first. Don’t install device management profiles from untrusted sources just to download an app.
Import a Subscription URL: Save the Remote Address and Fetch the Config
Remote configs are useful when you need to update nodes and rules regularly. A subscription URL often contains credentials, so treat it like a password. “Update subscription” means fetching the config again; it does not update the app from the App Store.
- Copy the full URL from your config provider. Check that it starts with
https://and doesn’t end with an accidental space or line break. Don’t remove query parameters from the URL. - In the client, look for “Config” or “Subscription,” then choose an option such as adding a remote config or importing from a URL.
- Give it a recognizable name, such as “Daily routing,” paste the URL, and fetch the config. For the first test, update it manually. Once it works, you can set up automatic updates.
- Check the fetch results and any parsing messages. Once saved, set the config as active; appearing in the list doesn’t mean it’s enabled.
- Open the proxy groups and check the number of nodes and the selected option, then connect. In rule mode, make sure the proxy group isn’t unexpectedly set to
DIRECT.
If the client asks you to choose a subscription type, follow your provider’s instructions. A node-only subscription won’t automatically include proxy groups or rules, and a full config may not belong in a “Node Subscription” option. If the import contains nodes but not your rules, check the import type before repeatedly switching nodes.
Import from a File or Clipboard: Tell Config Text from a URL
Import YAML with the Files App
Save the config in the Files app under “On My iPhone” or iCloud Drive. In the client’s config screen, choose the file import option and use the system file picker to open the .yaml or .yml file. Some apps also support importing from the Share menu; whether the app appears depends on the file type it accepts.
A local import usually copies the config into the client, so it won’t automatically reflect changes to the original file. After editing the file in cloud storage, import it again or use the client’s editing feature. Configs created from remote URLs may overwrite local changes on the next update. To keep custom rules, use the client’s supported override or merge feature.
What to Put on the Clipboard
- Complete YAML text: Choose “Import Config from Clipboard.” Preserve indentation when copying, and don’t include Markdown’s triple backticks.
- HTTPS URL: Use the remote config option so the client doesn’t try to parse the URL as YAML text.
- Node URI: Use the node import option. You’ll still need rules and proxy groups to build the routing setup you want.
iOS may ask whether to allow pasting from another app. This permission is separate from VPN authorization. If you previously denied it, try long-pressing the field and pasting manually. On versions that offer the setting, check the app’s permission for “Paste from Other Apps.” In iOS 18, for example, go to “Settings” → “Apps” → the client app.
Validate YAML Parsing with a Minimal Config
This config is only for testing import and rule parsing; all connections go direct, and it contains no proxy nodes. If the client requires additional fields, follow its documentation. This example is not a subscription for connecting to a remote proxy.
mode: rule
log-level: info
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,DIRECT
Use spaces, not tabs, for YAML indentation. rules is a list, and the hyphen before each rule is part of the syntax. Proxy group names in the config must exactly match the names referenced by the rules. For example, if a rule points to “Proxy Select,” the config must include a proxy group with that exact name. The final MATCH rule catches connections not matched earlier and usually goes last.
First VPN Connection: System Prompt and Connection Checks
Once your config is ready, turn on the connection in the client. The first time a Network Extension client creates a tunnel, iOS usually displays a system prompt asking to add a VPN configuration. Confirm that the request is from the client you just installed, tap “Allow,” and authenticate with your device passcode or another required method.
This allows the app to create a VPN configuration. It does not install a root certificate or enroll your device in organization management. A normal proxy tunnel doesn’t require HTTPS decryption. If you’re asked to install a certificate or enroll your device in management, check what it’s for and who is requesting it before proceeding.
- Go to “Settings” → “General” → “VPN & Device Management” → “VPN” to check the client’s VPN configuration and connection status. The exact menu path may vary slightly by OS version.
- Return to the client and check the active config and rule mode. Pause other proxy or VPN apps to avoid interference from multiple tunnels.
- Open Safari and make a new request. In the client’s connection log, check the destination domain, matching rule, proxy group, and final node.
- Test destinations that should go direct and those that should use a proxy. A connected VPN status confirms only that the tunnel is up; it doesn’t prove the node, DNS, or rules are working correctly.
Compatible clients typically route traffic through the system tunnel interface, but coverage depends on the app’s implementation and OS policies. Don’t copy desktop settings such as tun, auto-route, or route permissions directly; an iOS client may ignore those fields or provide equivalent settings in its own interface. Rule mode determines how captured connections are routed; it doesn’t mean every connection must use a proxy node.
Import Errors and Connection Problems: Find the Cause
| Symptom or message | Check first | What to do next |
|---|---|---|
| HTTP 401 or 403 | Subscription token, account permissions, request limits | Copy the URL again from your provider and check for client restrictions. Don’t share the full URL publicly. |
| HTTP 404 | Check whether the URL is truncated or the path has expired | Re-import from the latest subscription URL, keeping all query parameters. |
| YAML parsing error | Downloaded content, indentation, field types | Make sure the response isn’t a login page or error page, then check the reported line and the one above it. |
| Unsupported protocol or field | Core capabilities and config requirements | Update the client or ask your provider for a config that works with your current core. |
| VPN connected, but web pages won’t load | Node connectivity, DNS, rule selection | Check the connection log, switch to a known working node, and test on both Wi-Fi and cellular data. |
| Old rules are active after reopening the app | Active config and last remote update | Update the config manually, select it again, and check whether local overrides are still active. |
Change one type of setting at a time: first fix the config fetch, then parsing, then the tunnel and node, and finally the rules and DNS. If a download times out, test with the tunnel disconnected first. If the config URL is only accessible through a proxy, you’ll need an existing working connection to update it; a config that hasn’t imported successfully can’t provide that connection.
When reporting an issue, include the client and OS versions, when the error occurred, and logs with sensitive information removed. Don’t share subscription tokens, node passwords, or your full config. Screenshots should show the error and config type, with account details and credentials hidden.
Updates and Device Transfers: Keep What You’ll Need to Restore
- Track the source: Distinguish remote subscriptions from local files and save a note about where each config came from, so you don’t mistake an old file for a current subscription.
- Back up before updating: Keep custom rules, proxy group selections, and any necessary overrides. A remote update may replace the entire config.
- Recheck after moving to a new device: Even if app data was transferred, confirm the config can still be fetched and grant VPN permission again if prompted.
- Disconnect before deleting: Turn off the connection before removing the client. If a VPN config remains, find and remove the corresponding entry in your device’s VPN settings.
After installation, the most useful check is to verify the full chain: a trusted app, a compatible config, successful system authorization, and connection logs that show where traffic went. That makes it easier to pinpoint update failures or app-specific connectivity issues without repeatedly reinstalling the client.