iOS support updates

Learn which iOS versions Perfecto supports, along with any restrictions or limitations that apply.

When working with any beta version of major OS versions, especially but not only developer betas that are not available as public betas, any testing done on the device may be affected by instabilities and bugs on the OS level. If you are interested in testing a beta version, contact Perfecto Support or your Customer Success Manager. Consider limiting beta testing to 1-2 devices.

General limitations

  • In an interactive session, changing the language on an iOS device disconnects the SpringBoard, causing a device error. For automation with Appium, you can work around this limitation by using specific capabilities to set the language for a single application.

  • Certain system alerts on iOS devices, such as those displaying location permissions or two-factor authentication codes, are classified by the operating system as "secure." On mobile devices running iOS 15 or later with Perfecto's advanced video solution, these alerts are not rendered in the device video stream due to iOS security restrictions.

    Impact:

    • Secure alerts will not appear in the live or recorded video stream.

    • The device screen may appear slightly dimmed when such an alert is present.

    • In the Perfecto UI, these alerts are detected and visually overlaid on the device screen after a user interaction (for example, tapping the screen once).

    Workaround:

    To view the secure alert overlay in the UI, interact with the device (for example, tap once) after the alert is expected to appear. This triggers the UI mechanism to display the alert manually.

Supported versions and their terms and limitations

iOS/iPadOS version Support terms and limitations

iOS 27.2 Beta 1, iOS 27.0 GA

Supported in clouds with HSS 2.0 and macOS Sequoia.

Requirements:

  • To use driver.get() on iOS 26.4 and later, you must use Appium 2.19.0 or later. Earlier Appium versions are not supported.

  • To run tests on Safari or on web contexts within native applications (hybrid apps) against devices running iOS 26 or later, you must use Appium 2.19.0 or later. Earlier versions of Appium are not supported for this configuration.

Limitations:

  • When using Accessibility testing, hearing VoiceOver audio requires the device volume to not be muted.

  • When using Accessibility testing, touch no longer works while accessibility testing is activated. Touch is now registered as a VoiceOver touch input and might cause touch errors.

26.7 GA, 26.6.1 GA, 26.5.2 GA, 26.5 GA, 26.4.1 GA, 26.3.1 GA, 26.2.1 GA, 26.1 GA, 26.0.1 GA

Supported in clouds with HSS 2.0 and macOS Sequoia.

Requirements:

  • To use driver.get() on iOS 26.4 and later, you must use Appium 2.19.0 or later. Earlier Appium versions are not supported.

  • To run tests on Safari or on web contexts within native applications (hybrid apps) against devices running iOS 26 or later, you must use Appium 2.19.0 or later. Earlier versions of Appium are not supported for this configuration.

18.7.10, 18.7.8, 18.7.7 (22H340), 18.7.6 (22H320), 18.7.4 GA, 18.7.3 GA, 18.7.2 GA, 18.7 GA, 18.6 GA, 18.5 GA, 18.4.1 GA, 18.3.2 GA, 18.2.1 GA, 18.1.1 GA, 18.0.1 GA

Important: To avoid test disruption in hybrid clouds after upgrading devices to iOS 18, on the device, under Settings > General > Airdrop, make sure that the Bringing Devices Together toggle is turned off.

Limitations:

  • Due to an Apple bug, Wi-Fi-only iPad devices running iOS 18.1 or later cannot resolve the location.

  • Selecting to trust an application that is not trusted causes the device to restart. To work with enterprise-signed applications without having to re-sign them, make sure an app with a trusted signature (with the same certificate) is already installed on the device.

    If you need to re-sign an app, it may not be able to use shared keychains or use features that require special entitlements.

    To install a new certificate on a device, contact Perfecto Support.

  • Support for devices running iOS 15 or later that are configured with a passcode is still dependent on a solution that needs to be enabled for your cloud to overcome an Apple limitation. For assistance, contact your Perfecto representative or Perfecto Support .

17.7.6 RC, 17.7.4 GA, 17.7.2 GA, 17.7 GA, 17.6.1 GA, 17.6 GA, 17.5.1 GA, 17.4.1 GA, 17.3.1 GA, 17.3 GA, 17.2.1 GA, 17.2 GA, 17.1.1 GA, 17.0.3 GA

iOS 17.7.6 RC is only intended for these iPads:

  • 10.5-in. iPad Pro (1st generation), 12.9-in. iPad Pro (2nd generation)

  • iPad (6th generation)

Limitations for iOS 16.x versions still apply, except for the following issue that is resolved in iOS 17.0 and later: 

  • An Apple bug prevented Perfecto Object Spy from supporting SafariViewController-based applications on a device and Appium scripts from detecting an application's web context if the web content was displayed using SFSafariViewController.

Support for devices running iOS 15 or later that are configured with a passcode is still dependent on a solution that needs to be enabled for your cloud to overcome an Apple limitation. For assistance, contact your Perfecto representative or Perfecto Support .

Important: To avoid test disruption in hybrid clouds after upgrading devices to iOS 17, on the device, under Settings > General > Airdrop, make sure that the Bringing Devices Together toggle is turned off.

Requirements:

  • Connecting iOS devices requires HSS version 23.11 and an IDS with macOS Ventura and Xcode 15.

  • For automation testing, iOS 17 devices require Appium 1.22.3 or later.

Known issues:

(Fixed by Apple in iOS 17.6 GA) On devices running iOS 17.4 or later, after you clear browsing data or close all tabs in Safari, attempting to automate Safari may fail due to web contexts being unavailable. Apple has been notified of this issue.

Workaround:

After clearing browsing data or closing all tabs in Safari, run the following:

Copy
Map<String, Object> params = new HashMap<>();
params.put("bundleId", "com.apple.mobilesafari");
driver.executeScript("mobile: launchApp", params);
driver.executeScript("mobile: terminateApp", params);