Перезагрузка iphone программно
У меня есть код
system("reboot")
reboot
Команда работает в терминале, но даже если я запускаю приложение от имени пользователя root, операция все равно будет отклонена. Кто-нибудь нашел какой-нибудь способ, который работает, или может немного рассказать о перезагрузке SBSetting, что вызывает у меня любопытство?
5 ответов
Я нашел способ сделать это, хотя это немного запутанно. Проблема в том, что даже если вы настроите ваше приложение для запуска с правами root, при system()
звонки, вы, очевидно, все еще ограничены пользовательскими мобильными привилегиями. Поскольку мобильный телефон не может вызвать перезагрузку (успешно), это не работает.
Чтобы обойти эту проблему, я воспользуюсь новой функцией, которую поддерживает SBSettings. SBSettings имеет привилегированный процесс демона, который выполняется. Он позволяет вам подключать свои собственные команды, просто написав скрипт (или другой исполняемый файл) и поместив его в соответствующий каталог (/var/mobile/Library/SBSettings/Commands
). После того, как вы перезапустите процесс sbsettingsd, вы можете запустить его в своем скрипте, отправив уведомление. Если вы назовете свой сценарий
com.mycompany.reboot
затем из вашего приложения вы можете выполнить этот код:
#import <notify.h>
notify_post("com.mycompany.reboot");
Затем вы делаете com.mycompany.reboot простым сценарием оболочки следующим образом:
#!/bin/sh
reboot
И убедитесь, что chmod 755 используется в вашем скрипте com.mycompany.reboot. Полную информацию об этой функции команды SBSettings можно найти здесь:
http://thebigboss.org/guides/sbsettings-toggle-spec (см. Вызов внешних функций и скриптов...)
В любом случае, оно требует, чтобы ваше приложение зависело от SBSettings, но это бесплатное приложение, и большинство пользователей, вероятно, все равно захотят его иметь. На данный момент он выполняет задачу перезагрузки (или чего-либо еще, что требует root-доступа) программно, через notify_post()
,
Я наконец нашел способ программно перезапустить устройство iOS без рутирования устройства!!!! Инструмент командной строки для перезапуска устройства iOS называется libimobiledevice:
http://krypted.com/mac-os-x/use-libimobiledevice-to-view-ios-logs/
Это действительно удивительно. Одна ошибка, с которой я столкнулся при установке, была попытка установить эту строку:
brew install -v --devel --fresh automake autoconf libtool wget libimobiledevice
Однако я справился с проблемой установки, запустив эту строку:
brew install -v --fresh automake autoconf libtool wget libimobiledevice
После этой проблемы я следовал остальным инструкциям и вуаля!
Большинство команд можно найти на этой странице: http://krypted.com/uncategorized/command-line-ios-device-management/
Волшебная команда, которая перезапускает устройство iOS:
idevicediagnostics restart
Что действительно удивительно в этом инструменте, так это не только перезапуск устройства iOS, но и вывод журналов устройств iOS в приложение терминала Mac с помощью следующей команды:
idevicesyslog
Этот ответ может показаться кому-то неприятным, но я не нашел лучшего решения о том, как перезапустить устройство iOS, которое не было взломано, поэтому вот мой ответ:
Чтобы перезапустить устройство из командной строки, я делаю некоторые подготовительные работы:
- Подключите устройство к компьютеру
- Добавьте ярлык iTunes в свой док
- Выберите прожектор и найдите приложение под названием Automator [для запуска Automator должен быть установлен Xcode!]
- Когда Automator запускается, выберите опцию приложения
- Нажмите кнопку записи, чтобы начать запись следующих действий
- Выберите ярлык iTunes
- Выберите ваше устройство из настроек устройства
- Нажмите кнопку Восстановить резервную копию...
- Нажмите кнопку Восстановить
- Нажмите кнопку остановки в приложении Automator, чтобы остановить запись.
- В приложении Automator выберите "Файл" в верхней панели и сохраните только что записанное приложение в выбранном вами месте.
На данный момент у вас есть файл приложения, который будет выполнять шаги, упомянутые выше. Я склонен оставлять iTunes открытым, так как устройство iOS всегда будет подключено и готово к доступу. Когда iTunes закрывается и перезапускается, устройству требуется время, чтобы полностью подключиться к iTunes, что приводит к нарушению работы приложения Automator.
В этот момент я могу зайти в терминал, перейти к расположению файла приложения и выполнить следующую команду [ПРИМЕР]:
откройте automator.app (замените "automator.app" именем вашего файла)
Если вы похожи на меня и выполняете эту команду в jenkins, вам нужно будет выполнить следующие команды:
- открыть [location]/[your_app_name.app]
- спать 30
По какой-то причине приложению automator требуется время ожидания для завершения всех записанных действий.
Кроме того, я уверен, что вы также можете написать яблочный скрипт, чтобы сделать все это, но я ненавижу яблочный скрипт и выбрал легкий путь!
Это невозможно, если приложение работает в своей песочнице. на взломанном телефоне вы можете выполнить команду reboot shell.
Ты пробовал NSTask
: Выполнить команду терминала из приложения Какао