Android | iOS | Web Developer & Designer

Home | Toggle Darkmode


This Tutorial focuses on demonstrating/ showing how you can work on iOS projects (including full debugging over USB) WITHOUT the need of owning an actual Mac or resorting to Hackintoshing, you'll just need a VM with macOS installed.
We will achieve this through the usage of FlexiHub or USB Over Network, which I will elaborate in the next sections.
Before proceeding, please familiarize yourself with these requirements:

- PC capable of Running VMWare / VirtualBox without an issue (Minimum of 8GB RAM recommended)
- A macOS VM installed
- Patience and Time.

If you meet the criteria, please proceed down to Section 0x01 | Otherwise read Section 0x00.

Section 0x00: Pre-Setup
In case you do NOT have a macOS VM installed, this section will guide you through setting that up.
Contrary to popular belief, virtualizing macOS is just as easy as virtualizing Linux; If you have setup/ installed a VM before, this will feel very familiar.
Many thanks to various authors on the web for providing pre-made VirtualDisks!

Step 1: Hypervisor & macOS virtual disk image
You will need about ~25GB for a comfortable installation!
Before we start you obviously need a hypervisor. For this guide we will use VMWare Player (click here to get it) and Windows 10 as Host OS.
You will also need an extraction tool (like 7zip) to unrar the compressed virtual disk image (moving forward referred to as VDI).
Now click here to download the macOS VDI
After you have installed VMWare, an extraction tool of choice, downloaded & extracted the provided macOS VDI, you may proceed.

Step 2.1: Setting up the Virtual Machine (VM)
Vital parts are guided with images so you don't lose track!

Open up VMWare and select "Create new Virtual Machine"

In the next window where it asks you how you will install the guest OS, select "I will install the OS later"

Following up you can select the guest OS. Select "Apple Mac OS X" and from the dropdown menu select "macOS 14.14" (which corresponds to macOS Mojave)

Now you can name your VM and select its location. For the purpose of this tutorial I have named mine "macOS" and the location is on my secondary SSD

You can leave the "Specify Disk Capacity" fields as they are since we will be deleting the disk anyway
Once done, finish the setup and you should now have a VM (in my case named macOS). It's now time to add life to the VM and tune it

Step 2.2: Getting macOS onto the VM
Now that we have created a VM, the pre-downloaded and extracted macOS VDI comes into play;
Essentially what we have created is the foundation of the VM. However, the disk (the VDI created during the setup) is empty and has no OS loaded.
Our VDI has macOS Mojave pre-installed. Imagine it like plugging a SSD/ HDD into your computer and asking the BIOS to boot into the recently added drive.

Select your VM and select "Edit Virtual Machine Settings"
You will have to tune the amount of RAM & Processor cores allocated to the VM. Recommended is allocating 50-70% of your resources
Now select the Hard Disk and remove it

To add our VDI, select "Add", select "Hard Disk", select as Type "SATA" and when prompted to select a disk, select "Use an existing virtual disk"

Now browse to our VDI. After selecting it, finish the setup. You should now have a Hard Disk added to your VM which utilizes our VDI.
At this point, click "OK" and launch the VM.

Congratulations, you have now created a fully functional macOS VM! ...almost

You might have noticed the VM is not utilizing the entire Screen. You will additionally need to install "VMWare Tools" in order to fix the screen size.
Grab VM Tools from here
Edit your VM again, but this time select "CD/ DVD" and under "Connection" select "Use ISO image file" and browse to the VMWare Tools.iso file.
After you have selected it, save and relaunch your VM.
It'll now have VMWare Tools loaded into macOS, once booted into it launch the Installer from within and follow the on-screen instructions on how to install it.

Once successfully installed, reboot the VM and it should scale perfectly now.
For further reference, feel free to visit this link and also this link.

Section 0x01: The Software
Now that our VM is up and running, you will come to the following conclusion:
You cannot passthrough your iPhone / iPad / iPod to the VM, macOS simply does not comply. For that reason we'll need to resort to 3rd party software to enable that.
For this tutorial we'll have a look at FlexiHub & USB Over Network.

Benefits of FlexiHub:
Access to your attached peripherals from everywhere
Allows for remote debugging
One Connection License is all you need
Relatively high price (~ $160/year)

Benefits of USB Over Network:
Share access to any type of peripheral from within the network
Useful for enabling passthrough on Virtual Machines
Is NOT based on a subscription model
Relatively expensive purchase (~$160)

Essentially FlexiHub without the external/ global access capabilities

For the sake of having a comparison, I will be showing both.

Both of them offer a pretty similar feature-set, for this tutorial we will focus on FlexiHub.
USB Over Network works similar and will be shown alongside.
For your own reference, you can read here about FlexiHub and here about USB Over Network.

Step 1: Setting up FlexiHub on the Host
Get FlexiHub from here and install it onto the Host. Do not worry about any actual purchase, FlexiHub has a 7-Day trial period before they actually bill you. After signing up I still highly advise you to cancel the subscription right away in case you don't like FlexiHub.
After you have signed up, go to your Account and from there select your username. It'll present a dropdown menu, select subscription

Select "Cancel Subscription" up next and fill out the form; You should receive a confirmation E-Mail shortly after. Please do double-check that it has been cancelled!

After you have cancelled the subscription & installed FlexiHub onto the Host, open it up and log in to your account.
You will be presented with a list of your currently attached devices and machines which have FlexiHub installed and are signed-in with your account.

As you see I have my iPhone already plugged in. Now go ahead and fire up the macOS VM and install FlexiHub onto it.
Once you have successfully installed and logged in inside the VM, it will automatically pick up your connections and display them

Inside the VM, go ahead and press "Connect"

And now you should see iTunes pop up and ask for permission to access your iPhone

At this point, you have successfully connected your macOS VM and may proceed with any work you desire.
I personally use this exact setup to work on iOS Tweaks and to develop iOS Applications through Xcode without needing to use the inbuilt emulator.
That way you won't tax your VM and simply test straight on your phone.

Analogously, you just install USB Over Network instead of FlexiHub onto both machines (Host and inside the VM)
Select your device you want to share (in our case the iPhone) and select "Share"

Inside the VM, go to the "Remote" tab and you will now see the shared device. Press on connect to pass it through

Once connected, inside the Host you'll see it turn green and that's the confirmation it has successfully enabled passthrough.

Section 0x02: Conclusion
All in all it is safe to assume developing for the iOS platform is a hassle to setup when not utilizing any Apple hardware, thanks to virtualization and the correct software you can still in fact make it work.
In regards to FlexiHub / USB Over Network:
Yes they may be expensive, however if your goal is to develop locally without any remote access capabilities, then USB Over Network suffices.
If you plan to extend your developing experiencce with access to your device anywhere you go, just keep yorur iPhone plugged in with FlexiHub running.

As a Computer Science student myself I do NOT encourage the usage of cracked variants of any of the aforementioned Software.
Instead, feel free to contact the folks over at Flexihub/USB Over Network and ask for a student-discount / discount in general.

I hope this was a understandable and easy to follow along tutorial.
Please feel free to E-Mail me in case of corrections & questions using this link.