iOS Virtual Devices on Apple Silicon
Sauce Labs now supports iOS 17.5 and iOS 18 on Apple Silicon-based Simulators. These environments offer improved performance, modern architecture alignment, and compatibility with Xcode's latest features. This enables you to test apps in the most current Apple environments across iPhone and iPad Simulators.
iOS 17.5 and iOS 18 Simulators on Apple Silicon are only available to Enterprise customers with the appropriate subscription plan. Contact your account manager to discuss upgrading.
Key Benefits
- High-fidelity iOS testing environments on M-series macOS VMs
- Improved performance and stability with faster start-up times and test execution
- More efficient for development teams that adopt
arm64
throughout their development and testing pipelines.
Getting Started with Apple Silicon on Sauce Labs
Building Your iOS/iPadOS App
By default, Xcode builds apps for Simulators that support both arm64
and x86_64
architectures.
To build specifically for Apple Silicon (arm64) Simulators:
xcodebuild -arch arm64 -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' -configuration Debug
Locate the .app File
-
Xcode UI:
$HOME/Library/Developer/Xcode/DerivedData/<project-name>/Build/Products/Debug-iphonesimulator
-
Terminal:
$PROJECT_PATH/<project-name>/build/Debug-iphonesimulator
Archive the Build
- Create a folder named
Payload
- Copy your
.app
file into thePayload
directory - Compress the folder into a
.zip
- Rename the file to match your app, for example
MyApp.zip
Uploading the App to Sauce Labs
You can upload the .zip
archive:
- Via the App Management section in the Sauce Labs web UI
- Or via the Sauce Labs File Storage API
➡️ Uploading Apps to Sauce Labs
Appium Capabilities for iOS
To test your app on Apple Silicon Simulators, use the following capabilities:
Required Capabilities
OS Version | Appium Version | Device Name | armRequired |
---|---|---|---|
iOS 17.5 | 2.1.3 | iPhone 15 Simulator | true |
iOS 18.0 | 2.11.3 | iPhone 16 Simulator | true |
{
"platformName": "iOS",
"appium:deviceName": "iPhone 15 Simulator",
"appium:platformVersion": "17.5",
"appium:automationName": "XCUITest",
"sauce:options": {
"appiumVersion": "2.1.3",
"armRequired": true
}
}
Java Example for iOS
MutableCapabilities caps = new MutableCapabilities();
caps.setCapability("platformName", "iOS");
caps.setCapability("appium:app", "storage:filename=<your app>.zip");
caps.setCapability("appium:deviceName", "iPhone 15 Simulator");
caps.setCapability("appium:deviceOrientation", "portrait");
caps.setCapability("appium:platformVersion", "17.5");
caps.setCapability("appium:automationName", "XCUITest");
MutableCapabilities sauceOptions = new MutableCapabilities();
sauceOptions.setCapability("appiumVersion", "2.1.3");
sauceOptions.setCapability("username", System.getenv("SAUCE_USERNAME"));
sauceOptions.setCapability("accessKey", System.getenv("SAUCE_ACCESS_KEY"));
sauceOptions.setCapability("name", "<your test name>");
sauceOptions.setCapability("armRequired", true);
caps.setCapability("sauce:options", sauceOptions);
Appium Capabilities for iPadOS
For iPad Simulators with iOS 18.0:
{
"platformName": "iOS",
"appium:deviceName": "iPad Simulator",
"appium:platformVersion": "18.0",
"appium:automationName": "XCUITest",
"sauce:options": {
"appiumVersion": "2.11.3",
"armRequired": true
}
}
Java Example for iPadOS
MutableCapabilities caps = new MutableCapabilities();
caps.setCapability("platformName", "iOS");
caps.setCapability("appium:app", "storage:filename=<your app>.zip");
caps.setCapability("appium:deviceName", "iPad Simulator");
caps.setCapability("appium:deviceOrientation", "portrait");
caps.setCapability("appium:platformVersion", "18.0");
caps.setCapability("appium:automationName", "XCUITest");
MutableCapabilities sauceOptions = new MutableCapabilities();
sauceOptions.setCapability("appiumVersion", "2.11.3");
sauceOptions.setCapability("username", System.getenv("SAUCE_USERNAME"));
sauceOptions.setCapability("accessKey", System.getenv("SAUCE_ACCESS_KEY"));
sauceOptions.setCapability("name", "<your test name>");
sauceOptions.setCapability("armRequired", true);
caps.setCapability("sauce:options", sauceOptions);
Known Issues and Migration Notes
As you upgrade to iOS 17.5 and 18, be aware that Appium and related driver updates may require updates to existing tests to remove deprecated features no longer supported.
Check Appium Version Details for full bundle details on versions 2.1.3 and 2.11.3.
Changes to Content Scope
Appium Version | iOS Versions Affected | Content Scope |
---|---|---|
2.0.x | iOS 16 | WebView content elements accessed in their own context |
2.1.x | iOS 17 | WebView content elements accessed in the App's context |
2.11.x | iOS 18 | WebView content elements accessed in their own context |
Changes to iOS Alerts
Changes to Appium XCUITest Driver v7+ have modified how System alerts are interacted with, potentially requiring modifications to tests run on iOS 18 Simulators.
Solution: set respectSystemsAlerts
setting to true
— for more details and alernative options see the Appium documentation.
Changes to Gestures
Appium commands TouchActions
and MultiTouchActions
have been deprecated in XCUITest Driver 7+.
Solution: Refer to Appium Documentation for additional implementation options.
More details ➡️ Migrating to Appium 2
Learn More
- App Upload Instructions
- Appium Version Compatibility
- iOS Platform Support Matrix
- SauceCTL for XCUITest
Have questions? Visit the Sauce Labs Community or contact our support team.