Virtual Hosts workflow for Adobe Shadow
We’ve heard many requests to enable Shadow to work in workflows that are using local Virtual Hosts. For many technical reasons, this is difficult accomplish in Shadow without additional machine specific configurations. We recommend a workflow that uses Charles Proxy. Charles is a popular tool mostly known for its ability to simulate bandwidth throttling, but it can also serve to resolve virtual hosts.
This blog post is for people who are already using virtual hosts in their workflows, and describes how you extend those workflows to include Shadow devices.
Setting up a Virtual Hosts Directory
You may skip this section if you have already have local virtual hosts set-up in your environment.
- Enable virtual hosting in httpd.conf by uncommenting the below line. See detailed instructions for Mac OSX or MAMP/XAMP and step-by-step guides to defining virtual hosts for your respective environment. You will also need to add the virtual hosts to your /private/etc/hosts file (also covered in these guides).
Include /private/etc/apache2/extra/httpd-vhosts.conf - Define your Virtual Host directories. In /private/etc/apache2/extra/httpd-vhosts.conf, our example snippet declares two virtual hosts “citrus.demo.com” and “meridien.demo.com” mapped to two different directories:
DocumentRoot “/Users/akishnan/Sites/Citrus”
ServerName citrus.demo.com
DocumentRoot “/Users/akishnan/Sites/meridien”
ServerName meridien.demo.com
Configure Charles Proxy
- If you don’t already have it, download Charles Proxy and launch it
- Make a note of your computer’s IP address (the current IP address is displayed at the bottom of the window in the Shadow Chrome Extension). The default port number of Charles Proxy is 8888
Configure the HTTP Proxy on Android devices
- On your Android device, go to Settings > Wifi (the exact path varies by device and OS version)
- Press and hold on the wireless network to which your Shadow clients are connected
- Tap “Modify Network”
- Check “Show Advanced Options”, Choose Proxy Settings “Manual”
- Enter the IP address* of the machine where Charles Proxy is running (you made a note of this above)
- Save your changes
*NOTE: if your machine’s IP address changes, you will need to repeat step 5 for each device.
Configure the HTTP Proxy on iOS devices
- On your iOS device, go to Settings > Wifi
- Tap on the blue arrow next to the name of your current wireless network
- Turn on HTTP Proxy and choose Manual
- Enter the IP address* of your computer where Charles Proxy is running
- Enter 8888 as the “Port”

*NOTE: if your machine’s IP address changes, you will need to repeat step 4 for each device.
Shadow & Virtual Hosts
- Start Shadow on your devices (Android and iOS)
- In Chrome, browse to one of your virtual host URLs, e.g., http://citrus.demo.com/ or http://meridien.demo.com/
- You will see a permission prompt from Charles to allow the mobile device’s IP to connect using the Charles proxy: Choose “Allow”. You will see this permission prompt once for each connected Shadow device.
- Paired Shadow devices are now able to see your virtual host URLs!
Note: If your IP address changes, you will be prompted once again.
In a future blog post, we’ll cover how to use the Charles Proxy Bandwidth Throttling features with Shadow so you can simulate slower connection speeds on Shadow devices.
Amit Kishnani
Sr. Software Engineer
Adobe Shadow




By Chris Brauckmuller May 18, 2012 - 6:41 am
Thanks a lot, this is exactly what I needed! Being more of a designer than a developer, figuring out the local proxy thing on my own was a little out of reach, but this just straight up works, and now I can use Shadow with my existing workflow.
By David June 7, 2012 - 6:16 am
Hi,
I’ve tried this using windows7 running wamp with vhosts and everything works fine until I get to the step which says:
“You will see a permission prompt from Charles to allow the mobile device’s IP to connect using the Charles proxy: Choose “Allow”. You will see this permission prompt once for each connected Shadow device.”
I never see this prompt. Any ideas?
By David June 7, 2012 - 6:21 am
Ok. I have resolved this.
For iOS devices makes sure that when you’re setting up the Proxy in Wifi settings you enter 8888 as the “Port”.
Then start up Charles and everything will work as expected (assuming you follow the other steps to the letter.
I hope that helps someone…
By Shane June 11, 2012 - 2:37 pm
The only problem that I’m seeing here is testing on old versions of android because there are no options to set up a proxy. I have a couple of Android 2.3.5 devices and neither have these options. I really need a way to do this without having to jailbreak the devices.
By Bruce Bowman June 13, 2012 - 12:33 pm
Hello Shane,
We recently discovered a new free service from 37 Signals called xip.io, that may help you. We’re doing some internal tests with it and planning an article for our workflow series. Please give xip.io a try, and let us know if it helps you in your workflows.
Thanks,
Bruce
By Michael FIelds August 11, 2012 - 11:40 pm
I just wanted to say thanks for the write up! It took me a little while to grok everything, but in about 15 minutes I had my vhost rich local WordPress test sites working perfectly with Adobe Shadow. Now to get to debugging projects
Thanks again! Adobe Shadow rocks!
By Billy December 5, 2012 - 9:11 am
This is great stuff!