Существует, вероятно, много способов сделать это, но одним из способов является использование same technique I used in this answer. По сути, проблема в том, что вы не выдаете команду с достаточными привилегиями.
Вы можете получить необходимые вам права, переместив команду killall SpringBoard
в командный скрипт, который запускается привилегированным демоном SBSettings.
See reference document here, под Вызов внешних функций и скриптов ....
Вы сделали бы исполняемый файл сценарий с именем (например), com.mycompany.respring
. В этом сценарии, добавьте
#!/bin/sh
killall SpringBoard
и сохраните его под /var/mobile/Library/SBSettings/Commands
. Тогда из вашего preference bundle's PSListController, вы бы добавить этот код:
#import <notify.h>
и
notify_post("com.mycompany.respring");
проводки, что пользовательские уведомления вызовет демона SBSettings', чтобы запустить файл сценария с тем же именем. Конечно, это заставляет ваш пакет зависит от SBSettings (которые вы можете сделать, помещая это в DEBIAN/control
файле вашего пакета):
Depends: preferenceloader, sbsettings
... но, как это бесплатно, стабильной и широко используется и любил, что не кажется большим ограничением.