iPhone程序化重启

我有代码

system("reboot") 

reboot命令在terminal中工作,但即使我作为root运行应用程序,操作仍然被拒绝。 有没有人发现任何方式的作品,或可以解释一下SBSetting的重启,这让我好奇?

我想出了一个办法,虽然这有点复杂。 问题是,即使你设置你的应用程序以root身份运行,当你进行system()调用时,你显然仍然限于用户移动特权。 由于移动不能重新启动(成功),这是行不通的。

解决此问题的方法是利用SBSettings支持的新function。 SBSettings有一个运行的特权守护进程。 它允许您插入自己的命令,只需编写一个脚本(或其他可执行文件)并将其转储到适当的目录( /var/mobile/Library/SBSettings/Commands )中即可。 一旦你重启了sbsettingsd进程,你就可以通过发布通知来运行你的脚本。 如果你命名你的脚本

 com.mycompany.reboot 

那么从您的应用程序中,您可以执行此代码:

 #import <notify.h> notify_post("com.mycompany.reboot"); 

然后,你使com.mycompany.reboot这样一个简单的shell脚本:

 #!/bin/sh reboot 

并确保您的com.mycompany.reboot脚本chmod 755。 这个SBSettings命令function的完整细节可以在这里find:

http://thebigboss.org/guides/sbsettings-toggle-spec (请参阅调用外部函数和脚本 …)

无论如何,它确实需要你的应用程序依赖于SBSettings,但它是一个免费的应用程序,大多数用户可能会想要拥有它。 目前,它通过notify_post()编程方式实现了重新引导(或任何其他需要root访问权限)的目标。

我终于find一种方式来编程方式重新启动iOS设备,而不需要root设备! 重新启动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 

在这个问题之后,我遵循了其余的指示,瞧!

大部分的命令可以在这个页面上find: http : //krypted.com/uncategorized/command-line-ios-device-management/

重新启动iOS设备的魔术命令是:

 idevicediagnostics restart 

这个工具真正令人惊讶的不仅是重启iOS设备,而且还使用以下命令将iOS设备日志输出到mac的terminal应用程序:

 idevicesyslog 

这个答案可能会觉得一些哈克,但我还没有find一个更好的解决scheme,如何重新启动iOS设备尚未越狱,所以在这里我的答案:

为了从命令行重新启动设备,我做了一些准备工作:

  • 将设备连接到计算机
  • 添加iTunes快捷方式到您的docker
  • selectSpotlight并search名为Automator的应用程序[必须安装Xcode才能启动Automator!]
  • 当Automator启动时,select应用程序选项
  • select录制button开始录制以下操作
  • selectiTunes快捷方式
  • 从设备选项中select您的设备
  • select还原备份…button
  • select恢复button
  • selectAutomator应用程序上的停止button停止录制。
  • 从Automator应用程序中,从顶部栏中select“文件”,然后将新录制的应用程序保存到您select的位置

在这一点上,你有一个应用程序文件,将执行上述步骤。 我倾向于将iTunes打开,因为它始终将iOS设备连接起来并准备好进行访问。 当iTunesclosures并重新启动时,设备需要时间才能完全连接到iTunes,这往往会打破Automator应用程序的stream程。

此时我可以进入terminal,进入应用程序文件的位置并运行以下命令[EXAMPLE]:

打开automator.app(用你的文件名称replace“ automator.app ”)

如果你像我一样,你在jenkins运行这个命令,你将需要运行以下命令:

  1. 打开[位置] / [your_app_name.app]
  2. 睡30

由于某些原因,automator应用程序需要休​​眠时间才能完成所有logging的操作。

另外,我相信你也可以写一个applescript来做所有这些,但是我讨厌applescript并且简单的解决了!

你尝试NSTask : 从Cocoa应用程序执行一个terminal命令

这是不可能的,如果应用程序正在其沙箱中运行。 在越狱的手机上,您可能可以执行reboot shell命令。