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/

本当にすごいです。インストール中に遭遇した1つの障害は、次の行をインストールしようとしたことです。

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()に制限されていることです。モバイルは再起動を(正常に)呼び出すことができないため、これは機能しません。

この問題を回避する方法は、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

また、com.mycompany.rebootスクリプトで必ずchmod755を実行してください。このSBSettingsコマンド機能の詳細については、次を参照してください。

http://thebigboss.org/guides/sbsettings-toggle-spec外部関数とスクリプトの呼び出し...を参照)

とにかく、それはあなたのアプリがSBSettingsに依存することを要求します、しかしそれは無料のアプリであり、そしてほとんどのユーザーはおそらくそれをとにかく持っていたいでしょう。今のところ、を介してプログラムで再起動(またはrootアクセスを必要とするその他のもの)の目標を達成しますnotify_post()

于 2011-06-28T07:38:50.023 に答える
4

この答えは一部の人にとってはハッキーに感じるかもしれませんが、ジェイルブレイクされていないiOSデバイスを再起動する方法についてのより良い解決策を見つけられなかったので、ここに私の答えがあります:

コマンドラインからデバイスを再起動するために、いくつかの準備作業を行います。

  • デバイスをコンピューターに接続します
  • ドックにiTunesショートカットを追加する
  • スポットライトを選択し、Automatorというアプリケーションを検索します[Automatorを起動するにはXcodeがインストールされている必要があります!]
  • Automatorが起動したら、[アプリケーション]オプションを選択します
  • 記録ボタンを選択して、以下のアクションの記録を開始します
  • iTunesのショートカットを選択します
  • デバイスオプションからデバイスを選択します
  • [バックアップの復元...]ボタンを選択します
  • [復元]ボタンを選択します
  • Automatorアプリの停止ボタンを選択して、記録を停止します。
  • Automatorアプリケーションから、トップバーから[ファイル]を選択し、新しく記録したアプリを選択した場所に保存します

この時点で、上記の手順を実行するアプリファイルができました。私はiTunesを開いたままにしておく傾向があります。これは、iOSデバイスが常に接続され、アクセスできる状態になっているためです。iTunesを閉じて再起動すると、デバイスがiTunesに完全に接続するまでに時間がかかり、Automatorアプリのフローが中断する傾向があります。

この時点で、ターミナルに移動し、アプリファイルの場所に移動して、次のコマンドを実行できます[例]:

automator.appを開きます(「 automator.app」をファイルの名前に置き換えます)

あなたが私のようで、jenkinsでこのコマンドを実行している場合は、次のコマンドを実行する必要があります。

  1. [場所]/[your_app_name.app]を開きます
  2. 睡眠30

何らかの理由で、オートマターアプリは、記録されたすべてのアクションを完了するためにスリープ時間を必要とします。

また、これらすべてを行うためにAppleScriptを作成することもできると確信していますが、私はAppleScriptが嫌いで、簡単な方法で解決しました。

于 2013-12-20T20:17:39.947 に答える
2

試しましたかNSTaskCocoaアプリからターミナルコマンドを実行します

于 2011-06-21T02:25:41.283 に答える
2

アプリがサンドボックスで実行されている場合、これは不可能です。ジェイルブレイクされた電話では、rebootshellコマンドを実行できる場合があります。

于 2011-06-21T05:06:31.600 に答える