One point to keep in mind is that any network settings related changes should be done before running Charles. Also, make sure to run the iOS simulator only after running the Charles.

Run Charles and install the root certs for iOS simulators.

Upon success, you should be seeing this:

Now, you can see all the traffic originating from your mac machine. There are two ways to segregate the data in the UI. They are Structure and Sequence. In the sequence mode, you can apply filter and see only traffic data you are interested in.

Structure View

Sequence View with filter applied

On a side note, it is a good idea to keep the request and response separate in UI.

Run your Xcode project and identify the traffic to the domain you are interested in. At first, you would see the encrypted content like below. I just opened apple.com in iOS simulator’s Safari app.

In the above example, we are interested in http://www.apple.com. In order to see the content in plain text we need to enable ‘SSL Proxying’ for this domain. There are multiple ways to do this. The easiest is to right click the domain in the Structure View and select the option ‘SSL Proxying’ from menu

You should see a blue globe like icon next to all domains, whose content is decrypted or readable by Charles.

13. Once, done you can see all the traffic in plain text

You can also set breakpoints against a specific domain and edit the requests/responses based on your needs.There are no extra steps to be done if you are developing behind VPN, based on my experience.