top of page

TouchControl for iOS Release Notes

Version 12.7

LocationManager script object.

Use the new LocationManager script object (_locationManager) to retrieve your device's current location via script. LocationManager will retrieve the current location latitude and longitude values via the getCurrentLocation() function, and return the values via a script callback function as follows:


    function(lat, long) {

        _global.locationLat = lat;

        _global.locationLong = long;



The callback function is required because retrieving the lat/long values is an asynchronous process which can take up to a few seconds to return.  The getCurrentLocation() function will return immediately, and the supplied function(lat, long){...} will be called in the background by TouchControl when the values are available.  This example stores the values to _global variables for later use.  You may also return feedback from this callback function, such as return '[#]MyButton'; for additional control and functionality.


Bug fixes.

Version 12.5 - 12.6

​Bug fixes.

Version 12.4

Supports more watch complications, and fixes other watch complication issues.

Version 12.3 - 12.3.1

Gesture Pad updates:

  • Separate single/double tap actions.

Double-Tap has been added as an additional, distinct gesture available for Gesture Pads, so you can now add separate actions for single- and double-tap gestures, and both single- and double-tap gestures may be set as two-stage actions as well.

  • New swipe "Hold To Repeat" feature

Up/down/left/right swipe gestures on a Gesture Pad can now optionally be configured for "Hold to repeat".  This feature allows you to swipe in a given direction, and when you pause the swipe but leave your finger on the screen, the Gesture Pad will continue to send the commands for the current swipe direction without further swipe movement required.  Lifting your finger off the screen, or continuing the swipe motion will cancel the repeating commands.  Each distinct swipe direction may be independently configured as hold to repeat.  Repeated commands are sent at the rate defined by the Gesture Pad's "Repeat interval" setting.

These features require TouchControl Server for Windows v12.3, or for macOS v4.3.

Bug fixes.

Version 12.2

Support activity-level shadows and haptics.

Turning on Button Shadows option and/or the Sound & Vibration vibration/haptics option (for devices that support haptics) in Settings in TouchControl on your iOS device will enable those features for all activities in your configuration.  If, however, you would like to enable shadows or haptics for specific activities, but not for all of them, you can now turn on shadows and haptics at the activity level in the Activity Configuration settings in TouchControl Server when designing your activities.  Simply select the Shadows and/or Haptics settings on the server when designing your activities, and turn OFF the Button Shadows and Sound & Vibration Haptics options in TouchControl on your device.  Leave those options ON in settings on your device if you wish to use them for all activities regardless of the setting in the server designer.

Restart your TC Server from your device.

To force a restart of your TC Server app from TouchControl on your device, open Settings in TouchControl, tap on the "Server" entry under "Network Settings", then tap on the pencil (edit) icon in the upper right to open the "Edit Servers" screen.  Tap the "Restart" button for any server listed that you would like to restart.  This will ONLY restart the TouchControl Server APP on the PC/Mac - it will not restart the PC/Mac itself.  Be aware that any unsaved data or changes on your TC Server will be lost if you proceed with the restart (you will receive a warning before the restart is actually triggered).  This feature requires TC Server for Windows version 12.2, or TC Server for macOS version 4.2.

New _isInBackground script variable.

A new _isInBackground script variable is now available that indicates wether the app is currently in the foreground, or has just been sent to the background.

Bug fixes.

Version 12.1.2

Improved performance and stability.

Bug fixes.

This is the final release of TouchControl that will be available for devices running iOS versions prior to iOS 11.

Devices running versions prior to iOS 11 will continue to be able to install version 12.1.2 from the App Store, but no future TouchControl updates will be available for those devices. This decision was based on recent updates to Apple's developer tooling which limits the ability to support recent and future iOS features while still supporting older iOS versions.

Version 12.1 - 12.1.1

Enable split screen support for iPad.

Allows TouchControl to be used in split-screen mode on an iPad.  Note that this allows using TouchControl in split-screen mode with another app.  This does not enable running multiple windows of TouchControl in split-screen mode.

Added device battery monitor script object.

Adds a new _batteryMonitor script object to get the current device battery charging state and level, and optionally turn on battery monitoring and be notified when the charging state and/or level changes.  You can either access the state and level info directly, or supply a callback function to run whenever the state and/or level change.  


The _batteryMonitor.state property returns an integer as follows:

0 = unknown

1 = unplugged

2 = charging

3 = full

The _batteryMonitor.level property returns a float value.

See the following script examples using Emoji symbols to display battery state on the screen:

var batteryStateIndicators = ['❓', '❌', '⚡️', '🔋'];  //unknown, unplugged, charging, full

To access the battery info directly:

_setText('BatteryStateLabel', batteryStateIndicators[_batteryMonitor.state]);

_setText('BatteryLevelLabel', (_batteryMonitor.level * 100).toFixed(0) + '%');

To execute a callback function when the battery state and/or level change, start the monitor and pass it a function:


    function(state, level) {

        _setText('BatteryStateLabel', batteryStateIndicators[state]); 

        _setText('BatteryLevelLabel', (level * 100).toFixed(0) + '%');



To stop the battery monitor:


Added several other new scripting features.

The following script functions were added:

_setFullScreen(true/false); *

_screenFullBright(); *

_screenFullDim(); *

_screenRestoreBright(); *

_screenSetBright(absoluteValue); *

_screenIncreaseBright(relativeValue); *

_screenDecreaseBright(relativeValue); *

_getBright(); *

_scroll(x, y); *

_scroll('right'/'left'/'bottom'/'top'/'page right'/'page left'/'page up'/'page down'/'page left+up'/

    'page left+down'/'page right+up'/'page right+down'); *

_enableSleep(); *

_disableSleep(); *

_toggleSleep(); *

_getSleep(); *





 * Feature previously available only via command button.

Bug fixes.

Version 12 - 12.0.2

New "Colors" home screen theme, and other new Home Screen options.

Using the "Theme" option in TouchControl settings, you can now change the home screen theme to "Colors".  Colors are set via TouchControl Server, and all activity buttons for that location will be presented using the selected color for that location.  You can also optionally apply a translucent overlay to the colored buttons, and optionally allow that overlay to adjust to the dark/light mode appearance setting of your device.

In addition, you can also set shadows on all home screen location and activity buttons, as well as use haptic feedback for those buttons on supported devices.  Shadows and haptics are available for all themes.


Additional options for running timer buttons via script.

Building on the last release, you can now use several additional script flags to control the execution of timer buttons via script. See the "Additional Timer Button Flags" topic under the Scripting section of the online documentation for more information.


Dynamically change the (Windows) PC controlled by the built-in mousepad/keyboard.

When using the built-in mouse/keyboard activity option in the Windows TouchControl Server, you can now change the (Windows) PC that is controlled by the mousepad/keyboard.  Simply set the following global variable at some point before opening the built-in mousepad:

_global.mouseKeyboardServer = '';

This should be set to the IP address of the alternate PC running TouchControl Server that you wish to control, and the port should be the TC Server port as displayed on the Settings panel on that alternate server.  Since it is a _global variable, you only need to set it once and it will be set for all activities.  To turn off the alternate server, just set that same global variable to null or to an empty string.  Or to override the setting for a single activity, simply set the _local.mouseKeyboardServer variable to a different value in the activity where you wish to override it.

Performance improvements and bug fixes.

Version 11.8

Immediately execute a timer button via script.

Use the timer script flag "{<!}" when executing a timer button via script to immediately execute the button, and leave the timer running at its current interval if it's already running, or leave the timer stopped if it's not already running.


return '[#]{>!}MyTimerButton';

Bug fixes.

Version 11.7

Discover and configure Global Caché devices in TouchControl Settings.

Tap on the "GlobalCaché Devices" option in TouchControl Settings on your device to detect any GC adapters found on your network, view details about each device, and access the device's configuration web page.  Provides some features similar to the "iHelp" Windows application provided by Global Caché.

New sample activities.

See the Download page for three new downloadable sample activities:

• Nightstand - displays a digital clock with time and date, and swipe the screen to change the text color and screen brightness.  Note if you want to use this as an actual nightstand clock, you should use the Enable/Disable Sleep buttons in the activity (or enable the "Always On" option in TC Settings), and connect your device to a charger.  See the *READ ME* button in the activity for more information.

• Xcode Debugger - uses Command buttons to execute AppleScript that controls various features of the Xcode debugger.  This activity also demonstrates how to execute scripts or other apps to control your Mac for any number of purposes.  If you devise something useful - or just cool - that you'd like to share with others, please consider posting it on the Sharing section of this web site!  See the *READ ME* button in the activity for more information.

• Color Picker - demonstrates picking colors from an RGB color canvas, providing both HEX and RGB values for the selected color.  Use this, for example, to control the color of smart light bulbs.  See the *READ ME* button in the activity for more information.

The Nightstand activity is also included in the default configuration available during new app installs (iPhone only).

Bug fixes.

Version 11.6

Added background slideshow feature.

If you use TouchControl in an always-on setting, for example if you use a client or listener button to receive and process network requests/messages, use TouchControl’s built-in web server, use TouchControl as an always-on keypad/controller, etc., you can configure an activity to display a rotating slideshow of background images as a method of adding some visual interest, and helping to protect your device screen from burn-in.  Slideshow images are accessed via the photo library on the device TouchControl is running on, and must be stored within a photo album in the Photos app.  See the "Background Slideshow" topic in the online instructions for more information.

Added _hideActivityButtons() and _showActivityButtons() script helper functions.

Hide and show all buttons on a layout with one simple script function call.  Use the functions as follows:



Hiding buttons will simply display the activity background image, or the background slideshow if configured.  When the activity buttons are hidden, simply tapping anywhere on the activity background will re-show all activity buttons.  Or when the buttons are hidden, you can start a timer button to re-show the buttons at a later time, or re-show the buttons based on data received from a client or listener button, etc.

Added the "Sizes" settings option to show UI element sizes for the current device.

In TouchControl on your iOS device, open Settings (the gear icon in the upper left on the navigation bar), then scroll down and select the “Sizes” option under the “Tools” section.  This will provide an alert message that shows various sizes for UI elements on the current device, such as screen size, top bar height, @1x/@2x/@3x background image sizes (for both standard and full-screen activities), and safe areas (for full screen devices – i.e. the iPhone X and later, etc.).  Use these sizes to create your activity background images and position your buttons, if desired.  When executed on an iPad, this will report the sizes based on the current orientation of the device (portrait or landscape). 

Bug fixes.

Version 11.4 - 11.5.3

Send HTTP Request button commands direct from watch to destination device.

You can now configure HTTP Request buttons to send their commands directly from the TouchControl Apple Watch app to the destination/controlled device, rather than sending through TouchControl on the iOS device.  To enable this feature, right-click on any HTTP Request button on an activity configured for Apple Watch in the TouchControl Server layout designer, and select/enable the "Watch HTTP Direct" option.  Then refresh the config to your device.

Enable iTunes File Sharing for config recovery.

In addition to the current option of sending config recovery data from the TouchControl app via email (see the "Configuration Recovery" option in TouchControl settings on your iOS device), you can now also access the config recovery data using file sharing from your Mac or PC when your device is connected via USB.


  • On Windows, start ITunes, select your device, and then select File Sharing from the menu on the left.  Select the "recovery" folder on the right and then click the "Save" button at the bottom to save the folder to your PC.  Open the folder and any subfolders it contains until you find the recovery .zip file.  Note that you may also need to enable Home Sharing within iTunes preferences to see this option.

  • On Mac, you should see your device listed in Finder.  Select the device, then select the "Files" tab, find TouchControl in the list of apps, expand it to see the "recovery" folder, and drag and drop that folder to your desktop.  Once copied to your desktop, navigate through the folder structure until you find the recovery .zip file.

New nodeExists() XML parser function.

The new nodeExists() XML parser function simplifies checking for the presence a specifically-named node in an XML document or within another XML node/element.  Use the function as follows:




var exists = xmlDoc.nodeExists('mynodename');

if (myElement.nodeExists('mynodename')) {

  // node exists

  // your code here


Bug fixes.

Version 11.3

Use custom transitions when launching activities from the home screen.

Access Home Screen Navigation in TouchControl settings to select a custom transition animation (and duration) when launching activities from the app home screen (activities list).  The selected animation will be reversed when returning from the activity to the home screen.

Bug fixes.

Version 11.2


New _speak() script function.

Use the _speak() script function to generate text to speech from within your own activities, and optionally specify a specific voice for the speech synthesis.  Use the function as follows:

_speak(text to speak, voice ID/code)


_speak('Hello world'); // use the TouchControl default voice

_speak('Hello world', '');  // use a specific voice ID

_speak('Hello world', 'en-US');  // use the default voice for language/country code

An additional function was added to provide a list of all available iOS speech synthesis voices.  You can use this function to provide a selection list of voices, or more likely, simply use it once to determine which voice you wish to use, and then provide the desired voice's ID or code in your use of the _speak() function.  Note that using a different voice will not translate the given text to the given language.  This simply provides a different persona related to the given language/country.  To get the list of voices use:

var voices = _voices();

This function provides an array of Voice objects containing the information needed to provide to the _speak() function (along with some other helpful info).  The properties of each Voice object are as follows:

id: a unique voice identifier

codea country-specific language code

language: the native language for the voice

country: the name of the country for the voice

name: the name of the persona used for the voice

You will find there are multiple ID's/personas for many of the available countries.  Passing a voice ID in the _speak() function will use the specific voice/persona assigned to the ID.  Passing a voice code will use the default voice/persona for the given country code.  Not passing an ID or code in the _speak() function will use the default US English voice as follows: = '';

voice.code = 'en-US';

voice.language = 'English'; = 'United States'; = 'Samantha';

A sample activity is provided on the Download page that demonstrates using _voices() to get the list of available voices, and using _speak() to synthesize entered text using a selected voice.  You may wish to use this activity to determine which voice you wish to use, and then just pass the desired ID or code in your use of the _speak() function.

Enables custom transitions for link buttons executed from macros or gesture pads.

When executing link buttons using custom transitions from macros or gesture pads, those custom transitions will execute properly (previously link button custom transitions were ignored when executed from those button types).  Requires TouchControl Server for Windows version 11.2, or TouchControl Server for macOS version 3.5.

Bug fixes.

Version 11 - 11.1


Add widgets that launch TouchControl to a specified activity and optionally execute a button on launch.

You can now add TouchControl widgets to your iOS home screen.  See the Widgets page for more information.  iOS 14+ required.

New _connectable() script function.

Use the _connectable() script function to test the availability of a specific port on a device on your network.  This can be useful, for example, if a device will respond to a PING even though it is technically "off", but a specific port will be unavailable until the device is turned "on".  Use the function as follows:

var result = _connectable('', 5000);

if (result) {

    // port is available

    // your code here...

} else {

    // port is unavailable

    // your code here...


_connectable() will return true if connection was successful, or false if it was not.  No timeout is applied by default.  To set a timeout, use:


_connectable('', 5000, 1);

_connectable('', 5000, 3);



The timeout value is always in full seconds.  With a timeout set, if the device responds immediately, the function will return immediately and not wait for the timeout.  There is no server update required for this feature.

Improved Apple Watch Siri shortcut support.

Executing TouchControl Siri shortcuts on Apple Watch will now open TouchControl on the watch (if installed) to execute the shortcut, rather than opening TouchControl on the phone.  The shortcut buttons still ultimately get executed in TouchControl on the phone (just like any button executed from the TouchControl watch app), but they can now be executed when the phone is locked.

Bug fixes.

Version 10.7 - 10.7.2


New network "ping" feature. Test if devices or services are available on your network using ping (ICMP request/response) via button script.

You can now "ping" IP addresses or hostnames directly from TouchControl button script, allowing you to determine if a network-attached device or service is available (powered on, etc.) before you send a command.  This can be very useful, as an example, for devices that use a toggle power command, so you can determine ahead of time whether to send an on/off command, and avoid possibly getting your device out of sync with other devices in your environment.  Use the following command in your script to execute a ping:

result = _ping('address'timeout)

  • address (string - required): The destination IP address or hostname (a specific port should not be included).  

  • timeout (integer - optional): The number of whole seconds the ping process will wait for a response from the device/service. If timeout is omitted, the default timeout will be 2 seconds.  Partial seconds are not supported.

  • result (boolean): True or false indicating whether or not the device/service returned a valid response to the ping within the timeout period.

Example 1:  

var pingResult = _ping('', 1)

if (pingResult) {

    // device is on

    // your code here...

} else {

    // device is off

    // your code here...


Example 2:

if (!_ping('')) {

    // device is off

    // your code here...


Bug fixes.

Version 10.6 - 10.6.1

Supports custom button background colors.

TouchControl Server (macOS and Windows) can now set custom button background colors when using a hot-spot button (no image), in addition to the built-in set of color choices already available.

Bug fixes.

Version 10.5.3

Support for HTTP Request buttons with password-only basic authentication

If you have a device or service that you control with HTTP Request buttons that requires only a password for authentication (no user ID), you can set only a password in the Authentication section of the HTTP Request interface host in TouchControl Server's Interface Manager, leaving the user ID blank.  Or, if using the HTTPAuth button property, you can set only a password by setting the property value to ":mypassword" (that's a colon followed by the desired password - basically leaving the user ID blank which would normally precede the colon).

Automatically restart timer buttons after app resumes from sleep/background

Timer buttons will now automatically restart when TouchControl is resumed from the background or the device is awakened with TouchControl in the foreground.  If you currently use an auto-exec on resume button to restart your timers, you should now be able to remove that.

Version 10.5 - 10.5.2

Maintain device connections when moving between activities

Previously when linking from one activity to another, existing socket connections were closed and re-opened in the new activity after executing a button that used them.  Now socket connections used for EventTrigger, Global Caché, iRTrans, and Command buttons will remain open which should result in faster response when using the connections in the subsequent activities.  Feedback Client connections are also re-opened faster if used in linked-to activities, or when returning to a previous activity where they were used.

Improved performance and stability


Updated app icon


Minimum required iOS version is now 9.3

Update XML parsing to support namespaces

Previous recent versions of TouchControl were unable to parse XML that contained namespaces using the built-in _xmlParser object.  That should now work.


Bug fixes

Version 10.4.2 - 10.4.5

Bug fixes

Version 10.4 - 10.4.1

Updated Internal HTTP Request functionality

Replaced older HTTP functionality with more modern, fully supported, native Apple technologies.

Bug fixes

Version 10.3

New Internal Web View component and Javascript engine

Due to Apple discontinuing support for the web view and Javascript technologies used in prior versions of TouchControl, those have now been replaced with Apple's updated technologies.

Bug fixes

Version 10 - 10.2

Support for Siri Shortcuts

TouchControl now integrates with Siri.  See this page for more information.

Bug fixes

Version 9.10

New Gesture Pad Double-Tap feature

You can now set a gesture pad's tap gesture to require a double-tap instead.  This can be useful if you have a gesture pad that had multiple gestures defined, and you find that it registers a tap when attempting to swipe, or it registers random taps when just resting your finger on the screen.


New Force LAN setting

A new option is now available in TouchControl Network Settings that allows you to "Force LAN", which always uses the LAN server and interface host addresses, regardless of the type of network you are connected to.  This is useful when you are connected to a cellular network, but are using a VPN to access your local network.

Bug fixes

Versions 9.9.3

New Auto-Exec on Appear Buttons

You can now set a button to auto-execute whenever an activity appears.  This includes immediately after the initial load (and after any auto-exec on load button executes), as well as any time you navigate away from an activity via a link button, and then return to the activity via normal back navigation or a [back] link button.  This is useful if there is a command or script that you want to execute any time an activity appears.  Prior to this feature, you would need to turn off the "retain history" setting on your link buttons and always use link buttons (vs. back navigation) whenever navigating from one activity to another to force the auto-exec on load to fire each time an activity appeared.  You can now retain history (the default) on your link buttons and use normal forward and back navigation and always be ensured that your on-appear buttons will execute when the activity appears.  If using this feature, make sure that you include in an auto-exec on load button only a command or code that you want to execute once in the lifetime of an activity, and put any command or code that is okay to run multiple times in your on-appear button.  As previously, the same button can be set as on-load, on-resume, on-exit, and on-appear (or any combination of those) if you wish.

Note that an on-appear button will not execute when the app is resumed from the background and the activity is already the visible activity.  Use the existing auto-exec on resume button for this purpose.  

Bug fixes & stability improvements

Versions 9.9.1 - 9.9.2

Bug fixes and stability improvements

Versions 9.9

New "Zoom to Width" feature

In addition to the "Scale to fit" feature, you can now configure activities to "Zoom to Width" in the server designer, which causes activities to scale to the width of the device they are running on, and proportionately scales the height as well, which effectively "zooms" the activity to the size of the device (based on device width).  Your activity background image will always fill the entire screen, and the activity may scroll vertically if the zoom process results in an activity that is taller than the device's screen.  This is useful when using the same activities on multiple devices with different screen dimensions.

Bug fixes

Versions 9.8.7 - 9.8.10

Bug fixes and stability improvements

Version 9.8.6

New TextFont and TextAlign properties for button types that display text

Use the new TextFont and TextAlign built-in properties for all button types that display text to set custom fonts, sizes, and control alignment of text displayed within the button.  Any iOS font can be used (here's one site that lists them).  See "Built-In Button Properties" in the instructions for more information.

Web view streams (e.g. mjpeg) no longer continue to load when the app is in the background or the device is locked

Saves network bandwidth and battery life.

Support for setting text size and text color for spinner buttons

Uses normal right-click text menu option in layout designer.

Manage iCloud script variables in Script Settings

View variables currently stored in iCloud and optionally remove them from iCloud.

Bug fixes and stability improvements

Version 9.8

New "Global Watcher" feature

“Global Watchers” allow buttons, labels, sliders and spinners to automatically update their displayed text, images or values based on the current value of _global variables set by any of your scripts. See TouchControl instructions for more information. 

New "Feedback Slicing" scripting feature

A new feedback script flag allows you to control what feedback data generated by your devices is presented to your feedback script. Similar to the [term] and [len] script tags which determine how much feedback is expected from your device, the new [slice] tag allows you to parse the feedback and only return a desired “slice” of the feedback to your script.  See TouchControl instructions for more information.

Bug fixes

Version 9.7

Updates for iOS 11

Version 9.6.1

New CornerRadius button property

You can now set a custom corner radius for rounded hot-spot buttons in the server designer.  See the release notes for the macOS and Windows servers for more information.

This feature is useful for hot-spot buttons that you have set a background color or translucency for.  Rounding the corners of transparent hot-spot buttons is possible, but provides no added visual effect.  Corner radius is not available for buttons that use a background image.

Version 9.6

Offline Config feature sunset

The "Offline Config" feature has been sunset and is no longer available.  Please make sure your TouchControl network settings are updated to use an online TouchControl server.

Haptic Feedback

Button vibrations now use haptic feedback on the iPhone 7 & iPhone 7+.  Give it a try - go to TouchControl Settings - Sound & Vibration, select "Vibrate", and then select "Use haptics."

Other minor updates and fixes

Version 9.5

New visual themes

You can now change the look of TouchControl by selecting a theme in app settings.  Select from Translucent Dark, Translucent Light, or Classic (original).

Add translucency to your own buttons.

When adding a hotspot button, you can now select Translucent Dark, Light, or ExtraLight as the button background color in TouchControl Server.  Requires Windows server version 9.3.6 or higher, or macOS server version 1.3.3 or higher.

The stretch to full app setting has been sunset and is no longer available.

The "scale to fit" activity setting in TouchControl Server should now be used for any activity that should fill the screen on any size device.  

The TouchFlow interface app setting has been sunset and is no longer available.

Use the "Location Overview" or "Classic" layout instead.  

Note that the "Offline Config" feature will be sunset in an upcoming release in 2017.

Other bug fixes and improvements.

Version 9.4

TouchControl Apple Watch complication.

Now you can launch TouchControl right from your watch face.  Just follow these directions to modify your favorite watch face and add the TouchControl complication.


Ability to set a default activity for Apple Watch.

The TouchControl watch app can now automatically open a specified activity whenever you launch it from the app screen, from the dock, or from the new complication.  Access settings in TouchControl on your iOS device, select "Apple Watch" under the "Tools" section, tap on the "Default Activity" setting, and select an activity to launch automatically.  All of your other watch activities will still be available by navigating back to the main activity list on the watch.  Remember to refresh your config after updating this option to send the new setting to your watch.


Fix for watch activity labels.

Some labels may have displayed "(null)" on the watch.  This should now be fixed to display the correct label text.

bottom of page