ControlFloor Setup


Usage of ControlFloor requires a license. For trial purposes it can be setup and will function without a license controlling the "Notes" iOS application.


iOS version
- MacOS 12+ ( Monterey or newer )
< 17.0 XCode 12+
17.0 - 17.3 XCode 15+
17.4+ XCode 15.3+
- Per device: Pair / Trust
16+ Per device: Enable development mode
- Per device: Deploy any app to your device ( so that a provisioning profile is available for signing )
17+ Per device: Have internet access; wifi/4g/etc ( needed for app verification )
- Per device: Disable sleep ( Settings->Display & Brightness->Auto-Lock = Never )
- Per device: For on-screen keyboard automation, only 2 keyboards installed:
  • A "western" keyboard (English, French, German...)
  • The Emoji keyboard

1. Download, extract, and run setup

/bin/bash -c "$(curl -fsS"

If initial setup fails, you can rerun setup:

cd ~/cf

2. Re-sign apps

ControlFloor utilizes a few iOS apps to function. These need to be signed with your own Apple credentials. A mobile provisioning profile configured with your iOS devices is needed.

We provide a tool to assist in this signing:


That will output something like this:

Set 'CFA_SIGNING_IDENTITY' to a valid signing identity and run again
Available code signing identities:
1) 9CABA8B8B7B6B5B4B3B "Apple Development: [Your Name] (YOURIDENTIFIER)"
Set 'CFA_PROVISIONING_PROFILE' to a valid .mobileprovision file and run again.
You currently have these profiles available:
"/path/to/MobileDevice/Provisioning Profiles/xxyyzz.mobileprovision"

Decide which signing identity and profile and use them as follows:

security unlock
export CFA_SIGNING_IDENTITY=[Your signing identity, i.e. 9CABA8B8B7B6B5B4B3B]
export CFA_PROVISIONING_PROFILE="/path/to/MobileDevice/Provisioning Profiles/xxyyzz.mobileprovision"
./apps/Utils/ ./apps/*.app

Successful output should end with:

=== Signing ./apps/ ===
PlugIns/CF Vidstream Extension.appex: replacing existing signature
 ./apps/ replacing existing signature

After adding new devices, this signing process must be repeated with your updated mobileprovision file. You will also need to resign apps after updating to a new version of ControlFloor.

3. Configure server

Options for ControlFloor server are at ~/cf/server/config.json

Change HTTP setup within server/config.json as desired:

listen: ":8080"
https: true

HTTPS notes

By default, ControlFloor will generate a self-signed HTTPS certificate. If you have your own certificate, you can either replace the local files ~/cf/server/server.key and server.crt, or indicate where to find your cert in config.json.

As an example, if using letsencrypt for your certificates, you would set the following in config.json:

crt: "/etc/letsencrypt/live/[your-dns-name]/fullchain.pem"
key: "/etc/letsencrypt/live/[your-dns-name]/privkey.pem"

Login management

You will be prompted for a password for the 'admin' user during setup. Additional users can be managed on the commandline using cfserver's "create-user" and "modify-user" options. For example, to create a new user:

./cfserver create-user -username sample_user
To change the admin password after setup:
./cfserver modify-user -username admin -change-password

4. Start the server

./cfserver run

If you did not change the default HTTP setup, you can now open ControlFloor server in your browser at https://localhost:8080.

5. Configure Provider

Update ~/cf/provider/config.json as needed:

  licenseKeys: [
    "[place your license key here]"
  controlfloor: {
    host: "localhost:8080" // update to match the location of cfserver
    https: true // match to how you setup the server
    selfSigned: true // allow self signed server certificate

6. Register Provider with Server

The provider running on your local machine will automatically be paired with ControlFloor server using the username "provider1" and a randomly-generated password. If you are configuring additional providers, you will need to register them with ControlFloor server using the command:

./cfprovider register
You will be prompted for the login credentials of an admin user, and details for the provider. The new provider will be assigned a login and a random password for connecting to the server.

7. Run Provider

Provider can run either for a single device, or for all devices on your system. The single-device command is:

./cfprovider run --udid [udid]

To get a list of UDIDs of your devices:

./bin/go-ios list --details --pretty

In "runner" mode, cfprovider will automatically handle all connected devices.

./cfprovider runner

8. Additional device setup (license required)

For full functionality, the following must be done for each iOS device:

To have the system do this setup for you (except for screen lock):

9. Troubleshooting

For additional information, see the troubleshooting section of the ~/cf/README