TouchControl for iOS Release Notes

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.