10

我有代码

system("reboot") 

reboot命令在终端中有效,但即使我以 root 身份运行该应用程序,该操作仍然被拒绝。有没有人找到任何可行的方法,或者可以解释一下SBSetting的重启,这让我很好奇?

4

5 回答 5

26

我终于找到了一种无需root设备即可以编程方式重新启动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
于 2015-05-08T20:53:23.367 回答
9

我想出了一个方法来做到这一点,虽然它有点令人费解。问题是,即使您将应用程序设置为以root身份运行,当您system()拨打电话时,您显然仍受限于用户移动权限。由于移动设备无法调用 reboot(成功),因此这不起作用。

我解决这个问题的方法是利用SBSettings支持的新功能。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。可以在此处找到此 SB​​Settings 命令功能的完整详细信息:

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

无论如何,它确实需要您的应用程序依赖于 SBSettings,但它是一个免费应用程序,而且大多数用户可能都希望拥有它。目前,它通过notify_post().

于 2011-06-28T07:38:50.023 回答
4

这个答案可能会让一些人觉得很奇怪,但我还没有找到更好的解决方案来重新启动尚未越狱的 iOS 设备,所以我的答案如下:

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

  • 将设备连接到计算机
  • 将 iTunes 快捷方式添加到您的 Dock
  • 选择 Spotlight 并搜索名为 Automator 的应用程序[必须安装 Xcode 才能启动 Automator!]
  • 当 Automator 启动时,选择应用程序选项
  • 选择录制按钮开始录制以下动作
  • 选择 iTunes 快捷方式
  • 从设备选项中选择您的设备
  • 选择恢复备份... 按钮
  • 选择恢复按钮
  • 选择 Automator 应用程序上的停止按钮以停止录制。
  • 在 Automator 应用程序中,从顶部栏中选择文件,然后将新录制的应用程序保存到您选择的位置

此时您有一个应用程序文件将执行上述步骤。我倾向于让 iTunes 保持打开状态,因为它始终会连接 iOS 设备并准备好访问。当 iTunes 关闭并重新启动时,设备需要时间才能与 iTunes 完全连接,这往往会破坏 Automator 应用程序的流程。

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

打开 automator.app(将“ automator.app ”替换为您的文件名)

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

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

出于某种原因,自动化应用程序需要睡眠时间来完成所有记录的操作。

此外,我相信您也可以编写一个 AppleScript 来完成所有这些工作,但我讨厌 AppleScript 并采取了简单的方法!

于 2013-12-20T20:17:39.947 回答
2

你尝试过吗NSTask从 Cocoa 应用程序执行终端命令

于 2011-06-21T02:25:41.283 回答
2

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

于 2011-06-21T05:06:31.600 回答