Skip to main content

Update iOS

Corellium supports updating an iOS device to later available versions.

Updating can be useful for testing how your application behaves on a newer version of the OS, or for testing how your application behaves when the OS is updated. For example, if you have a virtual iPhone 12 running iOS 14.1, you'll be able to upgrade to iOS 15.1.

Updating iOS includes support for installing pre-release (beta) versions.

Note: This feature is available to users with Business Enterprise licenses and higher.

Updating your OS version

Using the Corellium UI

To update your OS version, you will need to go to Settings > General in the Corellium UI. Scroll down to the section titled "Update iOS Version".

Upgrade Device Step 1

From here, select a version to upgrade to, then press "Save changes"

Upgrade Device Step 2

You'll be presented with a confirmation dialog. Press "Update" to continue.

Upgrade Device Step 3

Wait for the device to upgrade and reboot.

Upgrade Device Step 4

You'll be presented with a confirmation once the device has finished upgrading. Here, you'll see the device version has been updated.

Upgrade Device Step 5

Close the confirmation dialog and examine the toolbar to see the new version.

Using the Corellium API / SDK

To update your OS version, you can use one of the following endpoints from our various APIs and SDKs:

Example JavaScript

Here is an example of how to update an instance using the JavaScript API:

// NODE_TLS_REJECT_UNAUTHORIZED=0
var { ApiClient, CorelliumApi } = require('@corellium/client-api');

var defaultClient = new ApiClient('https://app.corellium.co/api');
// Configure Bearer (ApiToken or JWT) access token for authorization: BearerAuth
var BearerAuth = defaultClient.authentications['BearerAuth'];
BearerAuth.accessToken = '[access_token]';
// BearerAuth.accessToken = process.env.CORELLIUM_API_ACCESS_TOKEN;

var api = new CorelliumApi(defaultClient)

// var args = process.argv.slice(2);
var instanceId = '[instance_id]' // args[0]
var os = '16.1' // args[1]
var osbuild = '20B79' // args[2]

var instanceUpgradeBody = {
os,
osbuild
};

api.v1UpgradeInstance(instanceId, instanceUpgradeBody).then(() => {
console.log('API called successfully.');
}, (error) => {
console.error(error);
});

Example Python

Here is an example of how to update an instance using the Python API:

import asyncio
import corellium_api
from corellium_api.rest import ApiException

# The client must configure the authentication and authorization parameters
# in accordance with the API server security policy.
# Examples for each auth method are provided below, use the example that
# satisfies your auth use case.

# Configure Bearer authorization (ApiToken or JWT): BearerAuth
configuration = corellium_api.Configuration(
host = "https://app.corellium.com/api"
ssl_ca_cert = "./ca_cert.cer"
)
configuration.access_token = '[access_token]'

async def main():
# Enter a context with an instance of the API client
async with corellium_api.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = corellium_api.CorelliumApi(api_client)
try:
instance_id = '[instance_id]'

api_response = await api_instance.v1_upgrade_instance(instance_id, {
'os': '16.1',
'osbuild': '20B79'
})
print(api_response)
except ApiException as e:
print("Exception when calling CorelliumApi->v1_upgrade_instance: %s\n" % e)

asyncio.run(main())

Notes

  • If you're on an on-site instance, the relevant IPSWs will need to be sourced on a network-enabled device then added to your on-site instance before updating. Learn more about adding firmware on our adding custom IPSWs article .
  • Updating an iOS device only works via the "restore" process - not "over the air" (OTA) updates.
  • When an iOS device is updated, the stock Apple apps (Mail, Reminders, etc.) are automatically scheduled for an update due to a conflict in their current app signatures and those stored in the Trust Cache. Until the update is complete, they are marked as invalidated by iOS. This is a normal process and does not affect the functionality of the device; however, it does mean you will need an internet connection to update the apps.
  • Application binaries can not be restored because they require an Apple account — same as for all Corellium virtual devices, there's no App Store access so you will need to source application binaries manually.