Skip to content

Latest commit

 

History

History

CharlesExample

Use Charles to Rewrite Responses Developing iOS Apps

Create Apps without a complete backend

Photo by Yang Deng

Difficulty: Beginner | Easy | Normal | Challenging
This article has been developed using Xcode 12, and Swift 5.3

Prerequisites:

Terminology

Charles: A HTTP proxy for development

A warning: Be careful because many guides instruct developers to turn off the mac proxy, but using this simulator this prevents the developer seeing the data from their target App!
turnoffmaxproxy

The original App: The original App makes a network call and prints the following to the console:

{
    error = "user not found";
}

We are going to change that response!

Step-by step instructions to change a response

  1. Download Charles. It has a free trial, and after that has run it's course you are able to still use it (with restrictions)
  2. Get the Root Certificate for iOS simulators (this downloads the certificate straight to the simulator, without any work from you). This is available from the menu Help>SSL Proxying
    installsimulator
    This is confirmed with the following notification:
    confirmrootcertificate
    Now open the iOS simulator an enable the proxy certificate through Settings>General>About>Certificate Trust Settings you can then click the toggle to enable the proxy
    enableproxy
    You will be asked to confirm that you wish to do this in the simulator. Of course you should agree to this
  3. Then run the App. You might like to run your own app that makes an API call, but I've created a usable App in the repo
  4. Run both Xcode and Charles
    You can now run the App from Xcode, and at the same time run Charles.

If you press the request button on the App, you should see a request for regres.in. screenshot

You can now see the request and the response! Right-click on the regres.in request and enable SSl proxying (This is also available from Proxy>SSL Proxying Settings). regenableproxy

  1. Enable rewriting
    To mock Tools > Rewrite. Check Enable Rewrite.

Edit the location (this is the correct protocol, host and path for regres.in) editlocation
We can then modify the query parameter rewrite
and then remember to click apply rewrite

  1. Run again - and we should have a result in the console of
{
    eafsda = "user not found";
}

Conclusion

Charles is a great way of mocking a response,

If you've any questions, comments or suggestions please hit me up on Twitter