iphone reboot programmatically

折月煮酒 提交于 2019-11-26 16:36:31

I figured out a way to do it, although it's a bit convoluted. The problem is that even if you setup your app to run as root, when you make system() calls, you're apparently still limited to user mobile privileges. Since mobile cannot call reboot (successfully), this doesn't work.

The way I got around this problem is to take advantage of a new feature that SBSettings supports. SBSettings has a privileged daemon process that runs. It allows you to plug in your own commands, by simply writing a script (or other executable) and dumping it in the appropriate directory (/var/mobile/Library/SBSettings/Commands). Once you then restart the sbsettingsd process, you can get it to run your script by posting a notification. If you name your script

com.mycompany.reboot

then from within your app, you can execute this code:

#import <notify.h>

notify_post("com.mycompany.reboot");

Then, you make com.mycompany.reboot a simple shell script like this:

#!/bin/sh
reboot

And make sure to chmod 755 on your com.mycompany.reboot script. The full details of this SBSettings command feature can be found here:

http://thebigboss.org/guides/sbsettings-toggle-spec (see Calling External Functions and Scripts ...)

Anyway, it does require your app to depend on SBSettings, but it's a free app, and most users would probably want to have it anyway. For now, it accomplishes the goal of rebooting (or anything else that requires root access) programmatically, via notify_post().

Ray

I have finally found a way to programmatically restart an iOS device without rooting a device!!!! The command line tool to restart an iOS device is called libimobiledevice:

http://krypted.com/mac-os-x/use-libimobiledevice-to-view-ios-logs/

It is truly amazing. One snag I ran into while installing was trying to install this line:

brew install -v --devel --fresh automake autoconf libtool wget libimobiledevice

However I got around the install problem by running this line:

brew install -v --fresh automake autoconf libtool wget libimobiledevice

After that problem, I followed the rest of the instructions and voila!

Most of the commands can be found on this page: http://krypted.com/uncategorized/command-line-ios-device-management/

The magic command that restarts the iOS device is:

idevicediagnostics restart

What is truly amazing about this tool is not only restarting an iOS device but also outputting iOS device logs to mac's terminal app using the following command:

idevicesyslog

This answer might feel hacky to some but I have not found a better solution on how to restart an iOS device that has not been jailbroken so here goes my answer:

In order to restart a device from the command line I do some prep work:

  • Connect device to computer
  • Add iTunes shortcut to your dock
  • Select spotlight and search for an application called Automator [must have Xcode installed in order to launch Automator!]
  • When Automator launches, select the Application option
  • Select the record button to start recording following actions
  • Select the iTunes shortcut
  • Select your device from the Device options
  • Select the Restore Backup... button
  • Select the Restore button
  • Select the stop button on the Automator app to stop recording.
  • From the Automator application, select File from the top bar and Save your newly recorded app to a location of your choosing

At this point you have an app file that will execute the steps mentioned above. I tend to leave iTunes open as it will always have the iOS device hooked up and ready to be accessed. When iTunes is closed and relaunched, the device takes time to fully connect with iTunes and this tends to break the flow of the Automator app.

At this point I can go into a terminal, go to the location of the app file and run the following command [EXAMPLE]:

open automator.app (replace 'automator.app' with the name of your file)

If you are like me and your are running this command in jenkins, you will need to run the following commands:

  1. open [location]/[your_app_name.app]
  2. sleep 30

For some reason, the automator app needs the sleep time to complete all the recorded actions.

Also, I am sure you can also write an applescript to do all of this but I hate applescript and took the easy way out!

Travis Worm

This is not possible if the app is running in its sandbox. on a jailbroken phone you might be able to execute the reboot shell command.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!