Understand profiles, subscriptions, and local configs
In an iPhone client, a profile is usually a complete configuration you can select. It defines available proxy nodes, how they’re grouped, which rules route traffic, and whether specific DNS settings are enabled. Switching profiles changes that entire configuration; choosing a different node within the same profile only changes an option in one proxy group.
A subscription is usually a remote URL used to fetch a config. Add the URL to your client, and it downloads the returned content as a selectable remote profile. The subscription URL itself isn’t the config currently in use: when the content changes on the server, the client must successfully update before the new rules and nodes are available in its local copy.
| Term | Role in the client | Common actions |
|---|---|---|
| Profile | A selectable config in the profile list | Name, select, or delete |
| Subscription | A URL used to fetch a remote config | Import or update manually |
| Local config | A config imported from a file or saved on the device | Import, edit, or back up |
One other detail can be confusing: a config may use proxy-providers to reference a provider URL. That URL updates the node data used by the config; it doesn’t automatically create another profile in the profile list. To tell what you’re changing, check whether the action is in the profile list or inside a YAML file.
Add a remote profile: check the URL before importing
These steps use an iPhone Clash client with a “Config” or “Profiles” list. Menu labels may vary—look for “Config,” “Profiles,” or “Configuration”—and buttons may be in different places. Follow the feature, not another client’s exact layout. Before importing, make sure you have a config URL the client can read, not a provider’s login page, billing page, or single-node share link.
- Copy the config subscription URL from a trusted source. Keep the full URL, including its query parameters; they may be needed to identify your subscription.
- Open the client’s “Config” or “Profiles” list, tap “Add” or the plus button, then choose an option such as “Import from URL” or “Remote Config.”
- Paste the URL and enter a recognizable name, such as “Daily Rules.” If the client asks for an update interval, start with its default.
- Save and wait for the download and parsing to finish. Return to the list, make sure the new entry appears, then open its details and check for nodes or proxy groups.
- Select the new profile to make it active. Check the routing mode and proxy group selections, then connect the system VPN.
Subscription URLs may contain account details. Don’t include the full URL in public screenshots, support posts, or shared notes. When troubleshooting, share only the error message and how you imported the config.
If import fails, first determine whether the download failed or the config couldn’t be parsed. For download failures, check your connection, make sure the URL is complete, and confirm the subscription is still active. For parsing failures, check that the response uses a Clash format supported by your client. A URL opening in a browser doesn’t mean it returns valid YAML. If your provider offers separate subscription formats for Clash and other clients, choose the one compatible with your client.
Add a config from a file: for fixed setups and manual edits
If you already have a .yaml or .yml file, save it to the iPhone Files app, then use the client’s “Import from File” or “Local Config” option to select it. Some clients also support importing from the iOS Share menu. After importing, return to the profile list and select the config. Saving a file in Files doesn’t mean the client has loaded it.
Local configs are useful for testing a rule, keeping a known-good version, or managing setups that don’t rely on a remote URL. When editing YAML, keep indentation consistent and save a working copy first. Clash and mihomo don’t support exactly the same fields. For example, a config may use fields recognized only by a particular core; another client might open the file but report an unsupported field when parsing it.
A rule issue that’s easy to troubleshoot
If a domain isn’t using the expected proxy group, check the active profile’s rules first—not just the node list. Rules are evaluated in the order they appear in the config, so an earlier match may already determine the route. Proxy group names must also match the names defined in that config. After editing a local file, save and reload it as prompted, then start a new connection test.
Name, update, and switch between profiles
When you have several configs, name them for their purpose instead of repeating the client name. “Daily Rules,” “Work Network,” and “Local Testing” are easier to tell apart than “Config 1” and “Config 2.” Long-press an entry in the profile list or open its more-options menu to find “Rename” or “Edit Name.” Some clients put the display name on the remote config’s edit screen. Renaming usually changes only the label in your local list; it doesn’t modify the remote subscription.
Update a remote config
- Find the remote profile you want to update and use its “Update” or “Refresh” action. Selecting the profile does not update it.
- Wait for the update to finish. If it succeeds, check that the nodes, proxy groups, and rules still look right, then confirm which profile is selected.
- If the update fails, keep the old config for now. Check your connection, subscription status, and the format provided by the service, then try again.
The next update may overwrite changes made directly to a remote config’s local copy. If you need to keep custom rules, check whether your client supports overrides or config merging. Otherwise, save a separate local config and clearly distinguish it from the subscription-managed version. Automatic updates—and how often they run—depend on the client and the system’s current state.
Switch the active profile
Open the “Config” or “Profiles” list and select the profile you want. Make sure the selected indicator or active profile name changes. Then open the proxy groups and check each group’s selection in rule mode. Two profiles can both have a group named “PROXY” but contain different nodes, so don’t assume the selection from one profile carries over to the other.
After switching, reload a page in your browser or make a new request in the app you’re testing. Existing connections may continue using sessions established before the switch; if results don’t change right away, close the relevant pages and try again. If the client asks you to restart the connection, disconnect and reconnect, then check the system status under iPhone Settings → VPN.
Three common pitfalls when managing multiple profiles
The update succeeded, but the old profile is still active
An update applies to one entry in the list, which may not be the profile currently selected. Check the name of the updated entry, then check the active profile name. Importing the same URL more than once may create similar entries. Don’t delete the old one based on its name alone until you’ve confirmed the new entry works.
You switched configs, but rule mode looks unchanged
First check whether the client is in rule, global, or direct mode. Global mode generally doesn’t route traffic according to individual rules in the config; direct mode won’t start using a proxy just because another profile has proxy rules. Switch to rule mode, then check the rule and proxy group for the domain you’re testing. Mode names vary by client.
A profile is selected, but the system connection isn’t active
The profile provides runtime settings; the iPhone’s system VPN connection is a separate step. The first time you connect, follow the system prompt to allow the VPN configuration. Then check the connection status in the client and under Settings → VPN. Don’t treat a local proxy port from a desktop guide, such as 7890, as a VPN port you need to enter manually on iPhone.
Keep a config you can roll back to
Before changing a subscription URL, rules, or DNS settings, note the name of your working profile, its routing mode, and key proxy group selections. Keep a copy of the original file before editing local YAML. For remote subscriptions, save the source URL and make sure you can still access the associated account. Remember that exports and backups may contain node credentials and subscription details.
Keep everyday use simple: use a stable remote profile for regular connections and a local config to test changes. When switching, select the profile, check the mode and proxy groups, then verify the result with a new request. If something goes wrong, this makes it easier to tell whether the cause was a subscription update, a profile switch, or the system connection state.