# Configuration profile to set up single app mode on iOS devices

User-friendly interface, extensive app ecosystem, and robust security features have bolstered the use of iOS/iPadOS devices in corporate environments. This document describes how IT administrators can use a configuration profile to set up single app mode on iOS/iPadOS devices.

Setting up a single app mode on iOS limits its functionality, permitting only a specified application on the device. It allows the device to be used for specific purposes, such as a kiosk or POS system and prevents users from accessing other apps or settings. Here’s how you can easily configure single app mode for iOS devices by creating a custom configuration profile. Then, you can deploy it using Hexnode’s [Deploy Custom Configuration](https://www.hexnode.com/mobile-device-management/help/custom-configuration-profile-reference-for-ios-devices/) feature to lock your devices to the app of your choice.

 Disclaimer: 
The sample configuration profiles provided below are created using various profile creator applications.

 

 Note: 
This configuration profile is supported on **iOS/iPadOS 6.0 or later**.

 

Enable Single app mode on iOS
-----------------------------

You can provide the bundle identifier of the application you want to launch in single app mode for the key *Identifier* within the given profile. For example, to lock the device to run only the Safari app, specify the bundle identifier of the Safari app.

### Configuration profile to set up single app mode

Configuration profile to set up single app mode

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>App</key> <dict> <key>Identifier</key> <string>com.apple.mobilesafari</string> </dict> <key>PayloadIdentifier</key> <string>com.apple.app.lock.DCFD11C2-0F6E-4A5B-9F95-CB3A145E1220</string> <key>PayloadType</key> <string>com.apple.app.lock</string> <key>PayloadUUID</key> <string>DCFD11C2-0F6E-4A5B-9F95-CB3A145E1220</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </array> <key>PayloadDisplayName</key> <string>Single App Mode</string> <key>PayloadIdentifier</key> <string>iOS.F93DBB4A-CF2F-47D6-B43D-CB875ECBECEE</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>82F6C8E3-2DBB-49E9-AF67-292EEB081A40</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist> 

   1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

  <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

 <key>PayloadContent</key>

 <array>

 <dict>

 <key>App</key>

 <dict>

 <key>Identifier</key>

 <string>com.apple.mobilesafari</string>

 </dict>

 <key>PayloadIdentifier</key>

 <string>com.apple.app.lock.DCFD11C2-0F6E-4A5B-9F95-CB3A145E1220</string>

 <key>PayloadType</key>

 <string>com.apple.app.lock</string>

 <key>PayloadUUID</key>

 <string>DCFD11C2-0F6E-4A5B-9F95-CB3A145E1220</string>

 <key>PayloadVersion</key>

 <integer>1</integer>

 </dict>

 </array>

 <key>PayloadDisplayName</key>

 <string>Single App Mode</string>

 <key>PayloadIdentifier</key>

 <string>iOS.F93DBB4A-CF2F-47D6-B43D-CB875ECBECEE</string>

 <key>PayloadType</key>

 <string>Configuration</string>

 <key>PayloadUUID</key>

 <string>82F6C8E3-2DBB-49E9-AF67-292EEB081A40</string>

 <key>PayloadVersion</key>

 <integer>1</integer>

</dict>

</plist> 

   

 

  

You can also customise the device behavior as well as the options available to the user when the device is locked in single app mode. The following options can be customized:

Device Behavior options

 KeyDescriptionDisableTouchIf true, the touch screen is disabled. Default: False

DisableDeviceRotationIf true, device rotation sensing is disabled, and the screen will not rotate when the device is rotated. Default: False

DisableVolumeButtonsIf true, the volume buttons are disabled. Default: False

DisableRingerSwitchIf true, the ringer switch is disabled. When disabled, the position the switch was in when it was first disabled decides the device behavior. Default: False

DisableSleepWakeButtonIf true, the sleep/wake button is disabled. Default: False

DisableAutoLockIf true, the device doesn’t automatically go to sleep after an idle period. Default: False

EnableVoiceOverIf true, VoiceOver is enabled, and the device gives audible descriptions of what’s on the screen. Default: False

EnableZoomIf true, zoom is enabled. Default: False

EnableInvertColorsIf true, the Invert Colors functionality is enabled. Default: False

EnableAssistiveTouchIf true, the Assistive Touch feature is enabled. Default: False

EnableSpeakSelectionIf true, speak selection feature which will read out a selection portion of a text is enabled. Default: False

EnableMonoAudioIf true, Mono Audio functionality is enabled. Default: False

EnableVoiceControlIf true, users can speak commands to perform gestures, interact with screen elements, dictate and edit text, and more. Default: False

 

 

User-enabled options

 KeyDescriptionVoiceOverIf true, users can toggle VoiceOver. Default: False

ZoomIf true, users can toggle Zoom. Default: False

InvertColorsIf true, users can toggle Invert Colors. Default: False

AssistiveTouchIf true, users can toggle Assistive Touch. Default: False

VoiceControlIf true, users can toggle Voice Control. Default: False

 

 

Configuration profile to set up single app mode

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>App</key> <dict> <key>Identifier</key> <string>com.apple.mobilesafari</string> <key>Options</key> <dict> <key>DisableAutoLock</key> <true/> <key>DisableDeviceRotation</key> <true/> <key>DisableRingerSwitch</key> <true/> <key>DisableSleepWakeButton</key> <true/> <key>DisableTouch</key> <true/> <key>DisableVolumeButtons</key> <true/> <key>EnableAssistiveTouch</key> <true/> <key>EnableInvertColors</key> <true/> <key>EnableMonoAudio</key> <true/> <key>EnableSpeakSelection</key> <true/> <key>EnableVoiceOver</key> <true/> <key>EnableZoom</key> <true/> </dict> <key>UserEnabledOptions</key> <dict> <key>AssistiveTouch</key> <true/> <key>InvertColors</key> <true/> <key>VoiceOver</key> <true/> <key>Zoom</key> <true/> </dict> </dict> <key>PayloadDisplayName</key> <string>Single App Mode</string> <key>PayloadIdentifier</key> <string>com.apple.app.lock.8C11FA36-142E-4DA1-A3BF-473F7C41DBC2</string> <key>PayloadType</key> <string>com.apple.app.lock</string> <key>PayloadUUID</key> <string>8C11FA36-142E-4DA1-A3BF-473F7C41DBC2</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </array> <key>PayloadDisplayName</key> <string>Single App Mode</string> <key>PayloadIdentifier</key> <string>iOS.CE041111-E170-4EA2-9A6E-F8296975C42A</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>24769E63-A910-449C-B0E9-6132FC4621E3</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>

   1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

  <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

 <key>PayloadContent</key>

 <array>

 <dict>

 <key>App</key>

 <dict>

 <key>Identifier</key>

 <string>com.apple.mobilesafari</string>

 <key>Options</key>

 <dict>

 <key>DisableAutoLock</key>

 <true/>

 <key>DisableDeviceRotation</key>

 <true/>

 <key>DisableRingerSwitch</key>

 <true/>

 <key>DisableSleepWakeButton</key>

 <true/>

 <key>DisableTouch</key>

 <true/>

 <key>DisableVolumeButtons</key>

 <true/>

 <key>EnableAssistiveTouch</key>

 <true/>

 <key>EnableInvertColors</key>

 <true/>

 <key>EnableMonoAudio</key>

 <true/>

 <key>EnableSpeakSelection</key>

 <true/>

 <key>EnableVoiceOver</key>

 <true/>

 <key>EnableZoom</key>

 <true/>

 </dict>

 <key>UserEnabledOptions</key>

 <dict>

 <key>AssistiveTouch</key>

 <true/>

 <key>InvertColors</key>

 <true/>

 <key>VoiceOver</key>

 <true/>

 <key>Zoom</key>

 <true/>

 </dict>

 </dict>

 <key>PayloadDisplayName</key>

 <string>Single App Mode</string>

 <key>PayloadIdentifier</key>

 <string>com.apple.app.lock.8C11FA36-142E-4DA1-A3BF-473F7C41DBC2</string>

 <key>PayloadType</key>

 <string>com.apple.app.lock</string>

 <key>PayloadUUID</key>

 <string>8C11FA36-142E-4DA1-A3BF-473F7C41DBC2</string>

 <key>PayloadVersion</key>

 <integer>1</integer>

 </dict>

 </array>

 <key>PayloadDisplayName</key>

 <string>Single App Mode</string>

 <key>PayloadIdentifier</key>

 <string>iOS.CE041111-E170-4EA2-9A6E-F8296975C42A</string>

 <key>PayloadType</key>

 <string>Configuration</string>

 <key>PayloadUUID</key>

 <string>24769E63-A910-449C-B0E9-6132FC4621E3</string>

 <key>PayloadVersion</key>

 <integer>1</integer>

</dict>

</plist>

   

 

 

 What happens at the device end?
--------------------------------

On deploying this configuration profile, the application is launched automatically on the device. The user cannot exit the application until you [ remove the policy](https://www.hexnode.com/mobile-device-management/help/how-to-create-modify-delete-or-clone-policies/#remove-a-policy) for the configuration profile from the portal.

 Notes:- To create and customize configuration profiles, you can use tools like Apple Configurator, Profile Manager or manually create them using text editors.
- Use non-encrypted .mobileconfig, .xml, or plist files to deploy profiles across devices.
- Ensure that you do not associate conflicting configurations with the devices.
- Use wildcards to fetch key values from the portal.
- It is recommended to manually validate the configuration profile on a system before executing it in bulk.
- Hexnode will not be responsible for any damage/loss to the system on the behavior of the configuration profile.