l'iphone reboot par programmation
J'ai le code
system("reboot")
La reboot
commande fonctionne dans le terminal, mais même si je exécuter l'application en tant que root, l'opération est toujours refusé. Quelqu'un a trouvé quelque chose qui fonctionne, ou ne peut expliquer un peu sur SBSetting de redémarrage, ce qui me rend curieux?
Parlons-nous des iPhone jailbreaké développement ici? Si oui, alors l'indiquer via une balise.
OriginalL'auteur philions | 2011-06-21
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une façon de le faire, même si c'est un peu compliqué. Le problème, c'est que même si vous configurez votre application de fonctionner comme racine, quand vous faites
system()
d'appels, vous êtes toujours apparemment limitée à l'utilisateur mobile privilèges. Depuis mobile ne peut pas appeler reboot (avec succès), cela ne fonctionne pas.Chemin, j'ai autour de ce problème est de profiter d'une nouvelle fonctionnalité qui SBSettings prend en charge. SBSettings a privilégié démon processus qui s'exécute. Il vous permet de brancher vos propres commandes, en écrivant un script (ou d'autres exécutables) et les déverser dans le répertoire approprié (
/var/mobile/Library/SBSettings/Commands
). Une fois que vous redémarrez l'sbsettingsd processus, vous pouvez l'obtenir à l'exécution de votre script par la publication d'une notification. Si vous avez le nom de votre scriptpuis à partir de votre application, vous pouvez exécuter ce code:
Ensuite, vous faites com.mycompany.redémarrage un simple script shell comme ceci:
Et assurez-vous de faire un chmod 755 sur votre com.mycompany.redémarrage du script. Tous les détails de cette SBSettings fonction de commande peut être trouvé ici:
http://thebigboss.org/guides/sbsettings-toggle-spec (voir l'Appel de Fonctions Externes et les Scripts ...)
De toute façon, elle ne nécessite votre application dépend de SBSettings, mais c'est une application gratuite, et la plupart des utilisateurs ne serait probablement envie de l'avoir de toute façon. Pour l'instant, il accomplit le but de le redémarrer (ou toute autre chose qui nécessite un accès root) par programme, par
notify_post()
.vous pouvez voir ce sujet de la construction de paquets Debian. Fondamentalement, vous construisez votre colis, avec un
./var/mobile/Library/SBSettings/Commands/com.mycompany.reboot
fichier et la structure de répertoire. Ou, vous pouvez simplement placer le com.mycompany.redémarrage du script à la racine de votre application (avec Info.plist, par Défaut.png, etc.), et utiliser le fichier DEBIAN/postinst script à copier /Applications/MyAppName.app/com.mycompany.redémarrage de /var/mobile/Library/SBSettings/Commandes. Soit devrait fonctionner.Alors que SBSettings n'est pas installé sur l'iPhone, comment puis-je exécuter une commande avec les privilèges de root à un utilisateur de l'app?
OriginalL'auteur Nate
J'ai enfin trouvé un moyen de faire redémarrer un appareil iOS sans l'enracinement d'un dispositif!!!!
L'outil de ligne de commande pour redémarrer un appareil iOS est appelé libimobiledevice:
http://krypted.com/mac-os-x/use-libimobiledevice-to-view-ios-logs/
C'est vraiment incroyable. Un seul hic que j'ai rencontré lors de l'installation a été d'essayer d'installer cette ligne:
Cependant, je suis autour du problème d'installation en exécutant cette ligne:
Après ce problème, j'ai suivi le reste de la notice d'instructions et le tour est joué!
La plupart des commandes peuvent être trouvés sur cette page:
http://krypted.com/uncategorized/command-line-ios-device-management/
La magie de commande redémarre l'appareil iOS est:
Ce qui est vraiment étonnant à propos de cet outil n'est pas seulement le redémarrage d'un appareil iOS, mais aussi de la sortie d'iOS journaux de périphérique pour le terminal mac app à l'aide de la commande suivante:
Notez que
appium
installeidevicediagnostics
donc, si vous avez l'ancienne, vous avez déjà la dernière (mais pas nécessairement à la version la plus récente).OriginalL'auteur Ray
Cette réponse pourrait se sentir hacky pour certains, mais je n'ai pas trouvé une meilleure solution sur la façon de redémarrer un appareil iOS qui n'a pas été jailbreaké alors, voici ma réponse:
Afin de redémarrer un appareil de la ligne de commande que je fais un peu le travail de préparation:
À ce stade, vous disposez d'une application fichier qui va exécuter les étapes mentionnées ci-dessus. J'ai tendance à laisser iTunes ouvrir car il aura toujours l'appareil iOS branché et prêt à être utilisés. Quand iTunes est fermé et relancé, l'appareil prend du temps à se connecter avec iTunes, ce qui tend à briser le flux de l'application Automator.
À ce point, je peux aller dans un terminal, allez à l'emplacement de l'application fichier et exécutez la commande suivante [EXEMPLE]:
ouvrir automator.app
(remplacez " automator.app " avec le nom de votre fichier)
Si vous êtes comme moi et que vous exécutez cette commande dans jenkins, vous devez exécuter les commandes suivantes:
Pour une raison quelconque, l'application automator besoins en sommeil le temps d'effectuer toutes les actions enregistrées.
Aussi, j'en suis sûr, vous pouvez également écrire un script applescript pour faire tout cela, mais je déteste applescript et a pris le chemin le plus facile!
Ce n'redémarrage de l'appareil, cependant, de récentes mises à jour d'iOS et iTunes faire en sorte que l'utilisateur doit cliquer sur le bouton si d'instruction et d'installation des écrans sur l'appareil. Cela rend difficile pour les vrai automatisation
OriginalL'auteur Ray
avez-vous essayé
NSTask
: Exécuter une commande de terminal à partir d'un Cacao appNSTask *task = [[NSTask alloc]init]; NSArray *arr = [[NSArray alloc]initWithObjects:@"reboot",nil]; [tâche setArguments:arr]; [tâche de lancement]; n'est-il correct? J'racine de l'application, mais a été "impossible d'exécuter le fichier binaire" du message.
changer de dossier /sbin/reboot
est disponible, mais il est privé. Vous avez juste à inclure l'en-tête de votre projet vous-même (produit, ou une copie de quelque chose). Je sais que l'OP n'a pas préciser que c'était pour un téléphone jailbreaké au moment de votre commentaire, mais je laisse mon commentaire pour les autres personnes qui pourraient bénéficier de
NSTask
.J'ai essayer la solution de NSTask mais j'obtiens cette erreur redémarrage": Opération non permise" comment puis-je régler ce problème?plz
OriginalL'auteur Travis Worm
Ce n'est pas possible si l'application est en cours d'exécution dans son bac à sable. sur un téléphone jailbreaké, vous pourriez être en mesure d'exécuter le redémarrage de la commande du shell.
Ensuite, vous devez trouver un moyen pour passer à l'utilisateur root, parce que seulement ce qui est autorisé à effectuer le redémarrage de la commande du shell. Mais c'est une autre question.
Juste avoir un jailbreak app exécuter en tant que root n'est pas assez. system("/sbin/reboot") permet d'obtenir l'erreur suivante dans le journal de la console, même pour une application qui s'exécute en tant que root: Lun Juin 27 21:19:01 iPhone-3G UIKitApplication:com.nom de la société.AppName[0xaf3d][438] <Note>: redémarrage: Opération non permise
fait de l'arrêt de travail?
Nope. Il n'y a pas de "shutdown" dans iOS. Il est /sbin/reboot, et qui fait ce que vous attendez de la ligne de commande. Mais, si vous utilisez l'appel système à partir de l'intérieur d'une application (même en cours d'exécution en tant que root), vous obtenez "opération non autorisée".
OriginalL'auteur Cocoanetics