如何检测用户是否在越狱设备上退出ios应用程序

问题描述:

由于未知原因,当我在最近的菜单中杀死我的应用程序并尝试再次启动它时,我出现的最后一个屏幕再次出现并且设备被冻结。我必须做的是硬重启,之后,启动应用程序再次工作...如何检测用户是否在越狱设备上退出ios应用程序

或者,如果我想重新启动后杀死最近没有重新启动我的应用程序,我必须输入此命令移动终端

killall myapp 

,并在此之后,如果我尝试推出从主屏幕我的应用程序,我的应用程序工作正常...

我想知道的是我怎么能检测用户何时退出应用程序与主页按钮,从而启动发送killall命令的NSTask?我知道Apple不允许NSTask,但这是一款不打算在Apple Store上发布的越狱应用程序。

此外,这个bug真的无聊了......在viewDidLoad我有几个NSTask和方法,检查目录是否存在。你认为这些东西可能会阻止应用程序在最近杀死后重新启动并冻结设备吗?或者这是因为该应用程序以root身份运行,并且有些事情要做,特别是允许设备在这种情况下重新启动应用程序?

在此先感谢您的帮助!

+1

是的,它绝对是错误的代码。但谁知道,没有看到任何? – Droppy 2014-10-20 08:42:38

+0

是的,我知道,但这只是一些基本的NSTask和Obj-C方法来检查现有的目录,这就是为什么我没有发布任何代码示例。我会尝试删除这部分代码,看看这是否是问题的根源。 对于第一个问题,你知道如何检测应用程序的退出吗? – Synny 2014-10-20 09:03:31

+0

那么使用'NSTask'来检查目录的存在是你的第一个错误。为这些事情提供了API方法。 – Droppy 2014-10-20 09:40:15

好了第一个问题我已经找到了如何:我已经放在一个NSTask方法为didEnterBackground(AppDelegate类)杀死的应用程序,当用户退出应用程序

对于第二个问题,我真不不知道...我已经删除了放入viewDidLoad的方法,看看是否是问题的原因,但没有,只要我最近杀了应用程序,并尝试重新启动它,设备冻结。因为没有什么在viewDidLoad方法中,我认为这个问题是由根权限引起的... ...在DidEnterBackroung中的NStask解决了这个问题

首先,我想指出,使用NSTask并不总是answ呃。您可以使用NSFileManager。管理文件和目录,并且您可以使用exit(0)来终止您的过程。

至于你的实际问题,你的应用程序是以root身份运行吗?当iOS应用程序被告知关闭时,SpringBoard会发送一个SIGSTOP信号。由于SpringBoard以移动方式运行,因此这些信号由移动用户发送,这意味着根应用程序不会收到它们。这意味着每当一个根应用程序被告知退出时,它就会忽略该请求并继续执行。为了解决这个问题,Info.plist中有一个可以更改的密钥。

继续并在您的Info.plist中将UIApplicationExitsOnSuspend设置为布尔值true并查看是否解决了您的问题。