私はコードを持っています
system("reboot")
コマンドはreboot
ターミナルで機能しますが、rootとしてアプリを実行しても、操作は拒否されます。誰かがうまくいく方法を見つけましたか、またはSBSettingの再起動について少し説明できますか?それは私を興味深くさせますか?
私はコードを持っています
system("reboot")
コマンドはreboot
ターミナルで機能しますが、rootとしてアプリを実行しても、操作は拒否されます。誰かがうまくいく方法を見つけましたか、またはSBSettingの再起動について少し説明できますか?それは私を興味深くさせますか?
私はついにデバイスを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
少し複雑ですが、私はそれを行う方法を考え出しました。問題は、 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()
。
この答えは一部の人にとってはハッキーに感じるかもしれませんが、ジェイルブレイクされていないiOSデバイスを再起動する方法についてのより良い解決策を見つけられなかったので、ここに私の答えがあります:
コマンドラインからデバイスを再起動するために、いくつかの準備作業を行います。
この時点で、上記の手順を実行するアプリファイルができました。私はiTunesを開いたままにしておく傾向があります。これは、iOSデバイスが常に接続され、アクセスできる状態になっているためです。iTunesを閉じて再起動すると、デバイスがiTunesに完全に接続するまでに時間がかかり、Automatorアプリのフローが中断する傾向があります。
この時点で、ターミナルに移動し、アプリファイルの場所に移動して、次のコマンドを実行できます[例]:
automator.appを開きます(「 automator.app」をファイルの名前に置き換えます)
あなたが私のようで、jenkinsでこのコマンドを実行している場合は、次のコマンドを実行する必要があります。
何らかの理由で、オートマターアプリは、記録されたすべてのアクションを完了するためにスリープ時間を必要とします。
また、これらすべてを行うためにAppleScriptを作成することもできると確信していますが、私はAppleScriptが嫌いで、簡単な方法で解決しました。
試しましたかNSTask
:Cocoaアプリからターミナルコマンドを実行します
アプリがサンドボックスで実行されている場合、これは不可能です。ジェイルブレイクされた電話では、rebootshellコマンドを実行できる場合があります。