# iOS device properties and hardware features

> Understand the iOS device properties and hardware features you can access from a script.

You can access iOS device properties and hardware features, such as vibration and display cutouts, from a script. Most features of the iOS devices are exposed through the [`Input`](/engine/6000.7/script-reference/unityengine/input.md) and [`Handheld`](/engine/6000.7/script-reference/unityengine/handheld.md) classes. For cross-platform projects, Unity defines `UNITY_IPHONE` for conditional compilation of iOS-specific C# code.

## Device properties

You can access the following device-specific properties:

* [`SystemInfo.deviceUniqueIdentifier`](/engine/6000.7/script-reference/unityengine/systeminfo/deviceuniqueidentifier.md)
* [`SystemInfo.deviceName`](/engine/6000.7/script-reference/unityengine/systeminfo/devicename.md)
* [`SystemInfo.deviceModel`](/engine/6000.7/script-reference/unityengine/systeminfo/devicemodel.md)
* [`SystemInfo.operatingSystem`](/engine/6000.7/script-reference/unityengine/systeminfo/operatingsystem.md)

## Device generation

Different device generations have varied performance and support different functionalities. Use the [`iOS.DeviceGeneration`](/engine/6000.7/script-reference/unityengine/ios/devicegeneration.md) property to query the device’s generation.

## Trigger a vibration

To trigger a vibration, call [`Handheld.Vibrate`](/engine/6000.7/script-reference/unityengine/handheld/vibrate.md). Devices without vibration hardware ignore this call.

## Activity indicator

Mobile operating systems have built-in activity indicators you can use during slow operations. For examples, refer to [`Handheld.StartActivityIndicator`](/engine/6000.7/script-reference/unityengine/handheld/startactivityindicator.md).

## Display cutout

On some displays, certain areas of the screen might be obscured or non-functional because of other hardware occupying that space. Use [`Screen.cutouts`](/engine/6000.7/script-reference/unityengine/screen/cutouts.md) to return a list of bounding boxes surrounding each cutout.

iOS devices don't provide a native API to get the display cutout information, so the cutouts are hardcoded in the Xcode project for each available iOS device. You can modify existing data or add additional devices in the Unity Xcode project `ReportSafeAreaChangeForView` function, which is in the `UnityView.mm` file.

## Anti-piracy check

A common way of hacking an application is by removing the App Store DRM protection and then redistributing it for free. Use Unity’s anti-piracy check to find out if your application was altered after it was submitted to the App Store.

Check if your application is genuine (not hacked) with the [`Application.genuine`](/engine/6000.7/script-reference/unityengine/application/genuine.md) property. If the property returns `false`, you can warn users they are using a hacked app, or you can disable certain functions.

> **Note:**
>
> Use [`Application.genuineCheckAvailable`](/engine/6000.7/script-reference/unityengine/application/genuinecheckavailable.md) along with `Application.genuine` to verify application integrity. Because accessing the [`Application.genuine`](/engine/6000.7/script-reference/unityengine/application/genuine.md) property is a resource-intensive operation, you shouldn’t perform it during frame updates or other time-critical code.

## Additional resources

* [Screen orientation on iOS](/engine/6000.7/manual/platform-specific/iphone/ios-developing/api/ios-manage-screen-orientation.md)
* [iPad multitasking modes](/engine/6000.7/manual/platform-specific/iphone/ios-developing/api/ios-ipad-multitasking-modes.md)
* [Input for iOS devices](/engine/6000.7/manual/platform-specific/iphone/ios-developing/ios-input.md)
* [iOS Player Settings](/engine/6000.7/manual/platform-specific/iphone/getting-started/class-player-settings-ios.md)
* [iOS requirements and compatibility](/engine/6000.7/manual/platform-specific/iphone/ios-introducing/ios-requirements-and-compatibility.md)
