Программно заблокировать приложение iOS в режиме одного приложения

Примечание. Я не хочу отправлять это приложение в магазин приложений.

Чего я хочу достичь:

Я хочу простое приложение с одним представлением, имеющим две кнопки блокировки и разблокировки.

Блокировка — эта кнопка заблокирует устройство. Только экран этого приложения будет показывать, что больше ничего не будет доступно, даже после перезапуска появится тот же экран. Кнопка «Домой», жесты будут отключены, как и в режиме одного приложения.

Разблокировать. Это разблокирует устройство и переключит его в обычный режим работы.

iOS : я хочу это для iOS 4.3 и выше.

Я проверил следующие решения, но они не соответствуют моим требованиям.

  1. Профиль конфигурации

    Блокировка iPhone/iPod/iPad поэтому он может запускать только одно приложение

    Но это вручную (перезагрузите устройство, откройте приложение, которое вы хотите запустить в режиме одного приложения). Я хочу сделать это программно, как я упомянул выше, через свое приложение.

  2. Управляемый доступ (iOS 6 и выше)

    Как заблокировать пользователя для Режим одного приложения в iOS 6, программно?

    Я хочу сделать это для всех ОС и программно.

Есть какой-либо способ сделать это ? Поскольку я не хочу отправлять его в магазин приложений, есть ли какой-нибудь частный API, какой-нибудь хак для трамплина для достижения этого?

Заранее спасибо !!


person Aditya Deshmane    schedule 29.11.2013    source источник


Ответы (3)


Насколько я знаю, в iOS 7 есть новая функция, позволяющая делать именно то, что вы хотите. Однако это применимо только для iOS 7 (и я считаю, что это применимо только к контролируемым устройствам).

1) Вам нужно будет установить профиль конфигурации ограничений с ключом autonomousSingleAppModePermittedAppIDs (посмотрите здесь)

Это один временной шаг, и пользователю нужно будет вручную принять этот профиль конфигурации.

Существует еще один вариант использования MDM для автоматической установки, но это может быть излишним для вас.

2) Вы должны использовать API:

UIAccessibilityRequestGuidedAccessSession (to lock/unlock)

Он определяется здесь

3) И самая красивая часть. Все это официально документально. Таким образом, вы даже можете отправить его в AppStore.

P.S. Зачем вам 4.3 или 5? Сейчас у них крошечная доля рынка. Скорее всего, даже iOS 6 уже занимает менее 20% рынка.

Обновление 1

Потенциально можно попробовать использовать API, который отправляет клики и ключи (ищите GSEvent в теге iPhone-privateapi). Может быть, используя эти API, вы можете сделать тройной дом, чтобы включать и выключать доступность.

Если это сработает, я думаю, вы сможете охватить iOS 6. Я не уверен, были ли доступны до этого и этот API, и тройной домашний клик.

Похоже, что этот частный API больше недоступен в iOS 7. Так что, возможно, вы можете проигнорировать эту идею.

person Victor Ronin    schedule 29.11.2013
comment
Спасибо !!! я не знал, что у управляемого доступа тоже есть API. Да, iOS 7 занимает большую долю рынка, но есть некоторые приложения, минимальные требования к iOS которых составляют 4.3 и т. д., поэтому я не могу обновить их все. Эти устройства просто хранятся в таком виде для тестирования и поддержки приложений. - person Aditya Deshmane; 02.12.2013
comment
Для автономногоSingleAppModePermittedAppIDs требуется, чтобы устройство находилось под наблюдением, что, насколько я могу судить, требует, чтобы устройство было физически настроено с помощью Apple Configurator, и не позволяет устройству синхронизироваться с какой-либо другой машиной. Есть ли способ обойти это? - person Ben Dowling; 18.12.2013
comment
@BenDowling: Это интересная информация. Я пропустил эту часть информации, что это было только для контролируемого режима. - person Victor Ronin; 18.12.2013
comment
Как вообще выйти из приложения, настроенного таким образом? - person Dan F; 29.01.2014
comment
@DanF: Это зависит. В некоторых случаях пользователь вообще не должен выходить. В этом весь смысл. Например, когда у вас есть киоск или iPad с каким-то приложением, которое вы используете при входе в магазин. Некоторые приложения, которые используют UIAccessibilityRequestGuidedAccessSession, могут позволить вам ввести пароль, чтобы разблокировать их и выйти на главный экран. - person Victor Ronin; 29.01.2014
comment
@VictorRonin, я пытался использовать старую технику GSEvent для имитации нажатия кнопки «Домой» (одинарное, двойное, тройное), но в iOS 7 она больше не работает. - person Nate; 11.03.2014
comment
@Нейт: Да. Это правда. На тот момент я не знал о проблемах с GSEvent. Я обновлю свой ответ сейчас. - person Victor Ronin; 11.03.2014
comment
@VictorRonin Я не думаю, что шаги 1 + 2 точны на 100%. Из документов UIAccessibilityIsGuidedAccessEnabled ...Entering Single App mode is supported only for devices that are supervised using Mobile Device Management (MDM).. app itself must be enabled .. by MDM.. Тем не менее, у меня все еще есть [проблемы] (stackoverflow.com/questions/ 22672486/) - person Sandeep Phadke; 27.03.2014
comment
Сохраняет ли это приложение в режиме одного приложения даже после перезапуска? - person user3413723; 05.08.2015
comment
@ user3413723 Я не уверен. - person Victor Ronin; 05.08.2015
comment
@VictorRonin, не могли бы вы посмотреть на мой вопрос stackoverflow.com/q/40678515/3388012 какое-нибудь руководство? - person Rushi trivedi; 19.11.2016
comment
@VictorRonin Я хочу разработать такое приложение, как OurPact. это можно сделать с помощью обычной учетной записи разработчика Apple или необходимой учетной записи Enterprice? какой именно шаг для этого? пожалуйста помоги. - person Rushi trivedi; 19.11.2016
comment
@Rushi Насколько я помню, вам нужно зарегистрироваться в программе корпоративного разработчика, которая позволяет вам стать поставщиком MDM, и вы сможете устанавливать такие конфигурации через MDM. Однако вопрос о том, как написать такое приложение, выходит далеко за рамки StackOverflow. - person Victor Ronin; 20.11.2016
comment
Вам не нужна учетная запись корпоративного разработчика Apple для разработки приложения с этой функцией. Требования: вы реализуете указанную выше функцию в своем коде, ваш клиент использует службу MDM для управления своими устройствами, и они контролируют эти устройства с помощью указанной службы, и они внесли ваш идентификатор пакета в белый список в своей системе MDM. developer.apple.com/videos/play/wwdc2017/716/? время=771 - person evan.bovie; 13.08.2020

Просто хотел написать об этом, хотя это устарело, так как мне нужно было реализовать подобное решение, и я заработал. Шаги для меня следующие, и примечание здесь состоит в том, что это включает в себя MDM и другие конкретные шаги.

Мое требование было следующим. На каждом iPad в разных местах установлен набор приложений. Для простоты предположим, что у каждого отдела есть свои собственные приложения. Участники открывают приложение, связанное с их отделом. чтобы пройти тест, приложение автоматически блокирует iPad в режиме одного приложения, а в конце теста оно само разблокируется.

  1. Управляйте iPad/iphone с помощью Apple Configurator.
  2. Установите файлы, связанные с MDM (каждый MDM имеет собственный набор инструкций, обычно включающий загрузку профиля).
  3. Каждый MDM имеет вариант режима одного приложения или режима множественного приложения. Выберите второй вариант и добавьте идентификаторы приложений в список. (Режим одного приложения довольно хорошо работает с MDM, но я не хочу, чтобы приложение все время было привязано к одному приложению).
  4. Я использовал UIAccessibilityRequestGuidedAccessSession api для блокировки разблокировки устройства в режиме одного приложения.

http://bobxcode.blogspot.com/2015/12/programmatically-implement-single-app.html

Спасибо, Боб

person Bobby    schedule 13.12.2015
comment
Подскажите, пожалуйста, как контролировать устройства программно? На самом деле, мне нужно сделать приложение вроде Экранный таймер, так что не могли бы вы мне помочь. - person Abhishek Joshi; 06.08.2018
comment
Есть ли способ отключить кнопку сна/блокировки для MultipleAppMode? - person Adam; 26.04.2019

В конфигурации MDM есть опция

  • autonomousSingleAppModePermittedAppID

    По желанию. Только под наблюдением. Если присутствует, позволяет приложениям, идентифицированным идентификаторами пакетов, перечисленными в массиве, автономно переходить в режим одного приложения. Доступность: доступно только в iOS 7.0 и более поздних версиях.

    Но для этого нужен режим контролируемого устройства.

person Sat_Rmd    schedule 03.03.2014