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运行这个命令,你将需要运行以下命令:
- 打开[位置] / [your_app_name.app]
- 睡30
由于某些原因,automator应用程序需要休眠时间才能完成所有logging的操作。
另外,我相信你也可以写一个applescript来做所有这些,但是我讨厌applescript并且简单的解决了!
你尝试NSTask
: 从Cocoa应用程序执行一个terminal命令
这是不可能的,如果应用程序正在其沙箱中运行。 在越狱的手机上,您可能可以执行reboot shell命令。